偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

消息中間件實現(xiàn)高可用架構(gòu),你會怎么設(shè)計?

開發(fā) 架構(gòu)
本文對消息中間件的集群高可用架構(gòu)的探討,是完全脫離于某個具體技術(shù)的,非常樸素的從本質(zhì)的原理層面來討論這個話題。

一、背景引入

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

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

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

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

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

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

咱們先拋開各種具體的技術(shù),就來思考一下,啥是MQ的可用性問題?

大家看看下面的圖,其實道理很簡單,假如你的MQ就部署在一臺機(jī)器上,那么正常情況下,生產(chǎn)者都會發(fā)送消息到MQ去,然后讓消費(fèi)者獲取到。

但是萬一天有不測風(fēng)云,MQ部署的那臺機(jī)器,因為一些莫名的原因,MQ自己本身的進(jìn)程掛掉了,或者是那臺機(jī)器直接就宕機(jī)了,那么此時怎么辦呢?

很尷尬,是不是,結(jié)果是很明顯的,生產(chǎn)者沒法發(fā)送數(shù)據(jù)出去,然后消費(fèi)者也沒法獲取到數(shù)據(jù)了。

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

MQ宕機(jī)就直接導(dǎo)致你的系統(tǒng)本身也故障了,然后可能會導(dǎo)致你的公司對外的APP、網(wǎng)站等產(chǎn)品就無法運(yùn)作了,用戶無法使用你們公司的服務(wù)了。

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

如果你的系統(tǒng)持續(xù)幾個小時無法被人使用,本來你公司電商平臺一天營收可以達(dá)到1億,結(jié)果現(xiàn)在導(dǎo)致幾個小時內(nèi)無法下單購買商品,最后當(dāng)天營收就5000萬,那么你的公司是不是直接活生生損失了5000萬?

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

三、集群化部署 + 數(shù)據(jù)多副本冗余

好,問題來了!現(xiàn)在你感覺一個MQ中間件應(yīng)該如何實現(xiàn)高可用呢?

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

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

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

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

此時數(shù)據(jù)在2臺機(jī)器上,就有2個副本了,那么如果第一臺機(jī)器宕機(jī)了,會影響我們嗎?

答案是:不會。

因為數(shù)據(jù)本身是多副本冗余的,此時消費(fèi)者完全可以從第二臺機(jī)器消費(fèi)到這條消息,并且生產(chǎn)者還可以繼續(xù)給第二臺機(jī)器寫入消息,數(shù)據(jù)沒丟失。

而且,系統(tǒng)根本不用中斷流程,還可以繼續(xù)運(yùn)行,我們看下面的圖。

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

Kafka這個極為優(yōu)秀的消息中間件,就是采用的這種架構(gòu)保證高可用、數(shù)據(jù)容錯性。

四、多副本同步復(fù)制強(qiáng)制要求

但是這里你要思考另外幾個問題,第一個就是:你在寫數(shù)據(jù)到其中一臺機(jī)器的時候,是不是得要求,必須得讓那臺機(jī)器復(fù)制數(shù)據(jù)到另外一臺機(jī)器了,保證集群里一定有這條數(shù)據(jù)雙副本了,才可以認(rèn)為本次寫成功了?

沒錯,假如你要是不能保證這一點(diǎn),比如你就寫數(shù)據(jù)給了其中一臺機(jī)器,然后他還沒來得及復(fù)制給另外一臺機(jī)器呢,直接第一臺機(jī)器就宕機(jī)了。

此時雖然你可以繼續(xù)基于第二臺機(jī)器發(fā)送消息和消費(fèi)消息,但是你剛才發(fā)送的一條消息就丟失了。

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

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

但凡剛寫一臺機(jī)器他就宕機(jī),還沒來得及復(fù)制到另外一臺機(jī)器的話,本次寫應(yīng)該報錯失敗,然后你應(yīng)該重試再次寫入數(shù)據(jù)到MQ集群里去。

大家看看下面的圖。只要你一次寫成功了,他就保證肯定已經(jīng)同步數(shù)據(jù)為雙副本了,此時哪怕一臺機(jī)器宕機(jī),數(shù)據(jù)不會丟失,生產(chǎn)和消費(fèi)都可以有條不紊的繼續(xù)進(jìn)行。

五、多機(jī)器承載多副本強(qiáng)制要求

第二個問題,假如說現(xiàn)在你的集群中本來有兩臺機(jī)器,現(xiàn)在宕機(jī)了其中的一臺,只有一臺機(jī)器了,你還能允許你的生產(chǎn)者對唯一的一臺機(jī)器繼續(xù)寫入數(shù)據(jù)嗎?

答案是:否。

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

所以說,你的生產(chǎn)者同理應(yīng)該基于參數(shù)設(shè)置一下,集群里必須有超過2臺機(jī)器可以接收你的數(shù)據(jù)副本復(fù)制。

否則如果只有1臺機(jī)器可以接受你的數(shù)據(jù)副本復(fù)制的話,那么還是算了。

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

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

實際上,上面說的那一整套的機(jī)制,在Kafka里都可以采用,他有對應(yīng)的一些參數(shù)可以配置數(shù)據(jù)有幾個副本,包括你每次寫入必須復(fù)制到幾臺機(jī)器才可以算成功,否則就要重新發(fā)送,以及你的集群剩余機(jī)器必須可以承載幾個副本才能繼續(xù)寫入數(shù)據(jù)。

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

此時,任何機(jī)器宕機(jī),數(shù)據(jù)都不會丟失,還可以正常讓系統(tǒng)繼續(xù)運(yùn)行。

六、架構(gòu)原理與技術(shù)無關(guān)性

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

具體的RabbitMQ、Kafka、RocketMQ等各種不同的消息中間件,對這種高可用架構(gòu)的實現(xiàn),都有一定的相似想通性,但是也都有各自不同的技術(shù)實現(xiàn),以及相對應(yīng)的區(qū)別。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2022-09-21 16:09:28

消息中間件

2021-01-14 05:23:32

高并發(fā)消息中間件

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ

2021-05-08 18:50:57

分庫分表中間件

2024-07-11 11:17:00

消息隊列Java

2015-08-11 11:16:36

淘寶中間件

2022-11-02 10:08:46

分布式高并發(fā)消息中間件

2021-12-14 10:39:12

中間件ActiveMQRabbitMQ

2023-04-26 07:57:29

軟件架構(gòu)設(shè)計

2021-12-16 08:21:31

高并發(fā)消息中間件

2010-04-13 10:37:47

核高基中間件

2019-11-12 08:40:03

RocketMQ架構(gòu)

2022-08-09 08:31:29

RocketMQ消息中間件

2023-05-08 08:09:26

路由元信息謂詞

2009-06-16 10:53:01

JBoss中間件JBoss架構(gòu)

2010-08-17 10:46:51

金蝶中間件企業(yè)IT架構(gòu)

2014-06-20 09:18:54

Dustjs中間件

2022-09-28 17:59:03

MQ消息中間件

2024-01-24 08:19:02

Stream應(yīng)用場景注解
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號