成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

消息中間件該如何實現高可用架構

開發 新聞
本文對消息中間件的集群高可用架構的探討,是完全脫離于某個具體技術的,非常樸素的從本質的原理層面來討論這個話題。

1. 背景引入  

這篇文章,我們來聊一下消息中間件高可用架構的一些原理。

對于一個合格的高級 Java 工程師而言,你肯定會碰到在系統里用到 MQ(消息隊列)的場景。那么這個時候你需要基于你的業務場景和需求,考慮在使用 MQ 的時候可能遇到的一些技術問題。

接著,你必須得針對這些技術問題設計一套完整的技術方案。

你需要從消息的訂閱模式、消息的生產到消費全鏈路不丟數據、消息中間件本身如何保證高可用等各個角度切入,來考慮好你的系統和 MQ 對接之后的完整技術方案。

所以,本文就來聊聊消息中間件高可用的架構原理。

2. 先來思考一下消息中間件的可用性問題  

咱們先拋開各種具體的技術,思考一下什么是 MQ 的可用性問題?

大家看看下面的圖,其實道理很簡單。假設你的 MQ 就部署在一臺機器上,那么正常情況下,生產者都會發送消息到 MQ 去,然后讓消費者獲取到。

圖片

但是萬一天有不測風云,MQ 部署的那臺機器因為一些莫名的原因 MQ 自己本身的進程掛掉了或者是那臺機器直接就宕機了,那么這種時候該怎么辦呢?

很尷尬,是不是?結果是很明顯的。生產者沒法發送數據出去,然后消費者也沒法獲取到數據了。

然后整個系統不就完蛋了?因為系統的核心流程根本無法跑通了,對不對?

MQ 宕機就直接導致你的系統本身也故障了,然后可能會導致你的公司對外的 App、網站等產品就無法運作了,用戶無法使用你們公司的服務了。

如果你們公司是電商平臺、外賣平臺、社交平臺。那么來這么一出,不是會導致公司損失慘重?

如果你的系統持續幾個小時無法被人使用,本來你公司電商平臺一天營收可以達到 1 億,結果現在導致幾個小時內無法下單購買商品,最后當天營收就 5000 萬,那么你的公司是不是直接活生生損失了 5000 萬?

這個真的不是開玩笑的,如果大家留意互聯網行業的新聞的話和小道消息的話,就應該知道近幾年一些大型互聯網公司都出現過類似的情況,損失慘重。咱們做碼農的就得被祭天了,是不是?

3. 集群化部署 + 數據多副本冗余

好,問題來了!現在你感覺一個 MQ 中間件應該如何實現高可用呢?

這里的方式有很多種,比如說數據多副本冗余、集群鏡像同步機制。我們就拋開具體的技術來從本質層面思考一下 MQ 集群實現高可用的幾種方式。

先來看下面的一張圖,假設我們寫到 MQ 的數據都被多副本冗余了,也就是你寫的每一條消息都被復制到了其他的機器上去了。

那么此時任何一臺機器宕機,似乎都不會影響我們跟 MQ 繼續通信,而且寫出去的數據似乎也都還在。

圖片

上面的圖里,MQ 采用集群模式部署到了兩臺機器上去,然后生產者給其中一臺機器寫入一條消息,該機器自動同步復制給另外一臺機器。

此時數據在兩臺機器上,就有兩個副本了。那么如果第一臺機器宕機了,會影響我們嗎?

答案是:不會。

因為數據本身是多副本冗余的,此時消費者完全可以從第二臺機器消費到這條消息,并且生產者還可以繼續給第二臺機器寫入消息,數據沒丟失。

而且,系統根本不用中斷流程,還可以繼續運行,我們看下面的圖。

圖片

這種感覺是不是很棒?實際上這種 MQ 集群化部署架構以及數據多副本冗余機制,是非常常見的一種高可用架構。

Kafka 這個極為優秀的消息中間件,就是采用的這種架構保證高可用、數據容錯性。

4. 多副本同步復制強制要求  

但是這里你要思考另外幾個問題。

第一個問題,你在寫數據到其中一臺機器的時候,是不是有這樣的要求:必須得讓那臺機器復制數據到另外一臺機器了,保證集群里一定有這條數據雙副本了,才可以認為本次寫成功了?

沒錯,假如你要是不能保證這一點,比如你就寫數據給了其中一臺機器,然后它還沒來得及復制給另外一臺機器呢,直接第一臺機器就宕機了。

此時,雖然你可以繼續基于第二臺機器發送消息和消費消息,但是你剛才發送的一條消息就丟失了。

大家看下面的圖來理解一下這個場景。

圖片

所以對于采用這種機制的時候,你必須得讓生產者通過一些參數的設置,保證寫一條消息到某臺機器,必須同步這條消息到另外一臺機器成功。等到集群里有雙副本了,然后才可以認為這條消息寫成功了。

只要剛寫一臺機器他就宕機,還沒來得及復制到另外一臺機器的話,本次寫應該報錯失敗。然后,你應該重試再次寫入數據到 MQ 集群里去。

大家看看下面的圖。只要你一次寫成功了,就保證肯定已經同步數據為雙副本了。此時,哪怕一臺機器宕機,數據不會丟失,生產和消費都可以有條不紊地繼續進行。

圖片

5. 多機器承載多副本強制要求  

第二個問題,假如說現在你的集群中本來有兩臺機器,現在其中的一臺宕機了,只有一臺機器了,你還能允許你的生產者對唯一的那臺機器繼續寫入數據嗎?

答案是:否。

因為,如果集群里只有一臺機器可以承載寫入,那么萬一剩余的一臺機器又宕機了呢?是不是還是會導致數據丟失,集群完蛋?

所以說,你的生產者同理應該基于參數設置一下,集群里必須有超過兩臺機器可以接收你的數據副本復制。

否則如果只有一臺機器可以接受你的數據副本復制的話,那么還是算了。

大家看看下面的圖,感受一下那個場景。

圖片

假設集群里有 3 臺機器,那么其中一臺宕機了,你后續再寫入另外一臺的時候,判斷一下集群里還有剩余兩臺機器,足以保證數據雙副本的高可用性和容錯性,所以可以繼續正常的寫入數據到 MQ 集群里去。

實際上,上面說的那一整套的機制,在 Kafka 里都可以采用。它有對應的一些參數可以配置數據有幾個副本,包括你每次寫入必須復制到幾臺機器才可以算成功,否則就要重新發送。還可以通過參數設置,集群剩余機器必須可以承載幾個副本才能繼續寫入數據。

通過這一整套方案的設計和基于具體技術的落地,才可以保證在集群化部署的情況下,集群必須有幾臺機器承載多副本,同時數據寫入之后必須是保證多副本冗余的。

此時,任何機器宕機,數據都不會丟失,還可以正常讓系統繼續運行。

6. 架構原理與技術無關性  

其實本文對消息中間件的集群高可用架構的探討,是完全脫離于某個具體技術的,非常樸素的從本質的原理層面來討論這個話題。

具體的 RabbitMQ、Kafka、RocketMQ 等各種不同的消息中間件,對這種高可用架構的實現,都有一定的相似想通性,但是也都有各自不同的技術實現,以及相對應的區別。

責任編輯:張燕妮 來源: 石杉的架構筆記
相關推薦

2022-09-03 18:00:05

消息中間件MQ

2021-05-08 18:50:57

分庫分表中間件

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ

2021-12-14 10:39:12

中間件ActiveMQRabbitMQ

2015-08-11 11:16:36

淘寶中間件

2022-11-02 10:08:46

分布式高并發消息中間件

2019-11-12 08:40:03

RocketMQ架構

2023-05-08 08:09:26

路由元信息謂詞

2010-04-13 10:37:47

核高基中間件

2022-08-09 08:31:29

RocketMQ消息中間件

2009-06-16 10:53:01

JBoss中間件JBoss架構

2019-09-11 09:00:19

消息中間件選型

2021-12-16 08:21:31

高并發消息中間件

2022-10-21 10:48:17

消息中間件互聯網應用協議

2022-02-13 23:04:28

RedisRabbitMQKafka

2014-06-20 09:18:54

Dustjs中間件

2021-04-22 10:45:28

高并發架構BAT

2024-01-24 08:19:02

Stream應用場景注解

2020-08-19 08:39:05

中間件前端設計模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美性精品 | 凹凸日日摸日日碰夜夜 | 九九av | 久久国品片 | 欧美日韩在线观看一区 | 亚洲精品久久久久久国产精华液 | 嫩呦国产一区二区三区av | 国产一级在线 | 日韩国产欧美一区 | 亚洲成人av| 天天插天天操 | 午夜丁香视频在线观看 | 日本天天操 | a级免费视频 | 国产精品一区久久久 | 美国黄色毛片 | 另类二区| 国产精品亚洲综合 | 天天插天天射天天干 | 青草青草久热精品视频在线观看 | 午夜av毛片 | 中文字幕在线视频免费视频 | 雨宫琴音一区二区在线 | 国产高清精品一区二区三区 | 国产日韩亚洲欧美 | 亚洲精品视频在线看 | 日本大片在线播放 | 日韩一区二区三区在线观看视频 | 亚洲日本欧美 | 天天操精品视频 | 午夜影院在线观看 | 久久久久久久一区二区三区 | 成人一区二区三区在线观看 | 日本一区二区不卡 | 日韩中文在线观看 | 男女爱爱福利视频 | 免费99精品国产自在在线 | 国产视频久久久 | 久久久婷 | 波多野结衣电影一区 | 狠狠爱视频 |