分佈式、中間件和消息隊列到底是怎麼的一種工作模式?

宋曉培


分佈式:

用於實現任務的分擔,比如之前有一個辦業務的窗口,隨著客流量多,多開幾個辦理業務窗口,這樣多個窗口,同時工作,分擔任務。

這時會出現問題了,那麼多個窗口,客戶來了該去那個窗口,這個時候會讓客戶去取號機,取號,其實取號機就是中間件的角色,只是類似消息隊列的中間件。

分佈式要解決的問題很多,其中兩個最重要的是:分佈式鎖和分佈式事務。可以參考我發的文章。

中間件:

簡單來說就是一座橋,是連接各方的中樞。

上面的例子中,如果多個窗口內部中間需要協作,一般是找個中間人,俗話說就是跑腿的,在各個窗口之間來回折騰,這樣每個窗口的業務員不用動,只需要告訴中間人就行了,然後繼續辦理其他客戶的業務。

有時候消息隊列也是實現中間件的一直方式。

消息隊列

其實就是一個排隊的機制,然後實現通知機制。

消息隊列一般用於:

1.日誌記錄

2.流量削峰

3.通訊

4.系統解耦(中間件)

5.實現分佈式事務的最終一致性

6.等等


全民學編程


分別解釋一下什麼是分佈式、中間件和消息隊列;如果有說的不對的地方,請留言指正:

分佈式

一個業務被拆成多個子業務,部署在多臺服務器上,這個就叫做分佈式

我有一個系統A,提供一個很簡單的接口,根據員工編號查詢員工姓名和他的考勤記錄。

我拆開兩個系統:人員管理系統B和考勤系統C,分別部署在兩臺服務器上。

這個需求,需要調用一下系統B,再調用一下系統C,最後得到需要的結果。

這個就是分佈式。

中間件

將具體業務和底層邏輯解耦的軟件。

舉個例子:

我要開一家炸雞店(業務端),需要雞肉,有很多養雞場(底層),我需要一個一個比較價錢,然後找一家性價比高的養雞場合作(適配不同底層邏輯)。可能一段時間後,我需要重新選一家養雞場合作,進貨方式、交易方式等要重新制定(重新適配)。

這一套事情太複雜了,於是我找到了一個專門整合養雞場的第三方代理(中間件),跟他談好價格和質量後(統一接口),以後我就只需要給代理錢,然後拿肉就行。具體這個第三方代理怎麼操作,我不用管。

消息隊列

消息隊列可以看做內存中的隊列,有人往裡放消息,有人從裡取消息。

  • Producer:消息生產者。
  • Broker:消息處理中心,負責消息存儲、確認、重試等。
  • Consumer:消息消費者。

消息隊列的特點是:異步、解耦、可靠性(消息隊列一般會把接收到的消息持久化到本地硬盤上)

用較多的消息隊列有ActiveMQ,RabbitMQ,Kafka,RocketMQ,它們又可以被稱作是消息中間件,消息中間件解決的就是分佈式系統之間消息傳遞的問題。


舉個例子:

比如我是做網上商城的,有一個短信系統,當客戶下了一個訂單之後,通知客戶你下單成功。

當訂單量比較小的時候,只需要調用發送短信的接口就可以了。

但是如果訂單量大了之後呢,並且短信發送晚個一兩分鐘也沒有什麼問題,那麼就可以使用消息中間件:把待發送的短信發送到消息隊列裡面,短信系統從消息隊列中取出短信進行發送就可以了。

而且還有一個好處:如果短信系統掛掉了,短信消息保存在消息中間件裡面不會丟失,等短信系統恢復了之後,繼續短信發送即可。

我將持續分享Java開發、架構設計、科技前沿、程序員職業發展等方面的見解,希望能得到你的關注。


會點代碼的大叔


接觸分佈式和消息中間件幾年的時間了,有幸回答你的問題!

什麼是分佈式?相對於以前單一系統,所有的功能,服務都部署在一臺服務器上,一掛全掛!分佈式採用了把系統提供的服務分佈在不同的服務器上的策略,這樣的架構就叫做分佈式架構!



分佈式架構有什麼好處呢?

1,單個服務宕機不影響別的服務正常運行!

2,單個節點所有的負載分佈均衡到了多臺服務器上!

3,各服務之間相互透明,實現解耦!

現在的用戶流量越來越大,所以分佈式基本是以後架構發展必須的一個趨勢!

分佈之後問題來了,以前的單一系統,所有服務都在同一個同一個機器,在同一個內存裡面,直接調用即可,但是現在分佈在不同的jvm中,怎麼調用呢?或者說數據怎麼傳輸?



消息中間件應運而生!

目前我用過的消息中間件有activemq,ons,kafka,其實所有的消息中間件本質都一樣,


1,生產者和消費者之間通過某種方式(點對點或者訂閱)實現"綁定"!

2,生產者生產數據,併發送到消息中間件,消息中間件進行落庫處理!

3,訂閱了消息的消費者通過監聽器監聽消息中間件,如果有屬於自己的消息,進行消費!

當然整個過程中間會有數據一致性問題,怎麼解決呢?

只要保證生產消息到消息中間件的時候進行返回值確認保證這一步的數據一致,然後在消息到消費者的時候保證返回正確結果即可,如果中間出現異常可進行重試,或者發郵件等!

到此,分佈式系統的數據傳遞通過消息中間件解決了!

但是分佈式還有比如session,日誌處理,單點登錄等各服務器需要相同的數據的問題,可通過接到同一個redis緩存進行處理!

分佈式服務的配置文件可以通過統一的文件配置中心統一處理!

添加服務註冊和發現,還有服務宕機的監控處理!

分佈式在現如今數據量暴增,服務全面化的年代有著越來越重要的作用,也是一個不可避免的趨勢!

學好分佈式,工資暴增日!

關於分佈式還有更多的細節諸如數據安全,數據一致性,重複調用,冪等性等等的問題,來來來,我們一塊研究!


分享到:


相關文章: