目錄
1.MQ 的相關概念
1.1.什么是 MQ?
1.2.為什么要用MQ?MQ的應用場景
1.2.1.流量消峰:
1.2.2.任務異步處理:
1.2.3.應用解耦
2.AMQP和JMS
3.MQ 的分類
1.ActiveMQ
2.Kafka
3..RocketMQ
4..RabbitMQ
4.RabbitMQ
1.四大核心概念
生產者
交換機
佇列
消費者
RabbitMQ的作業原理
1.MQ 的相關概念
1.1.什么是 MQ?
MQ(message queue):訊息佇列
“訊息佇列”是在訊息的傳輸程序中保存訊息的容器,它是典型的:生產者、消費者模型,生產者不斷向訊息佇列中生產訊息,消費者不斷的從佇列中獲取訊息,因為訊息的生產和消費都是異步的,而且只關心訊息的發送和接收,沒有業務邏輯的侵入,這樣就實作了生產者和消費者的解耦,
1.2.為什么要用MQ?MQ的應用場景
1.2.1.流量消峰:
舉個例子,如果訂單系統最多能處理一萬次訂單,這個處理能力應付正常時段的下單時綽綽有余,正 常時段我們下單一秒后就能回傳結果,但是在高峰期,如果有兩萬次下單作業系統是處理不了的,只能限 制訂單超過一萬后不允許用戶下單,使用訊息佇列做緩沖,我們可以取消這個限制,把一秒內下的訂單分 散成一段時間來處理,這時有些用戶可能在下單十幾秒后才能收到下單成功的操作,但是比不能下單的體 驗要好,
1.2.2.任務異步處理:
高并發環境下,由于來不及同步處理,請求往往會發生堵塞,比如說,大量的insert,update之類的請求同時到達MySQL,直接導致無數的行鎖表鎖,甚至最后請求會堆積過多,導致資料庫崩潰,
通過使用訊息佇列,我們可以異步處理請求,從而緩解系統的壓力,將不需要同步處理的并且耗時長的操作由訊息佇列通知訊息接收方進行異步處理,減少了應用程式的回應時間,
1.2.3.應用解耦
MQ相當于一個中介,生產方通過MQ與消費方互動,它將應用程式進行解耦合,如果程式耦合度很高,其中一個模塊出現例外可能會導致整個程式無法繼續運行
以電商應用為例,應用中有訂單系統、庫存系統、物流系統、支付系統,用戶創建訂單后,如果耦合 呼叫庫存系統、物流系統、支付系統,任何一個子系統出了故障,都會造成下單操作例外,當轉變成基于 訊息佇列的方式后,系統間呼叫的問題會減少很多,比如物流系統因為發生故障,需要幾分鐘來修復,在 這幾分鐘的時間里,物流系統要處理的記憶體被快取在訊息佇列中,用戶的下單操作可以正常完成,當物流 系統恢復后,繼續處理訂單資訊即可,中單用戶感受不到物流系統的故障,提升系統的可用性,

2.AMQP和JMS
MQ是訊息通信的模型,并發具體實作,現在實作MQ的有兩種主流方式:AMQP、JMS,
兩者間的區別和聯系:
-
JMS是定義了統一的介面,來對訊息操作進行統一;AMQP是通過規定協議來統一資料互動的格式
-
JMS限定了必須使用Java語言;AMQP只是協議,不規定實作方式,因此是跨語言的,
-
JMS規定了兩種訊息模型;而AMQP的訊息模型更加豐富
3.MQ 的分類
1.ActiveMQ
優點:單機吞吐量萬級,時效性 ms 級,可用性高,基于主從架構實作高可用性,訊息可靠性較 低的概率丟失資料
缺點:官方社區現在對 ActiveMQ 5.x 維護越來越少,高吞吐量場景較少使用,
2.Kafka
大資料的殺手锏, 百萬級 TPS 的吞吐量,在資料采集、傳輸、存盤的程序中發揮著舉足輕重的作用,
優點: 性能卓越,就是吞吐量高,kafka 是分布式的,一個資料多個副本,少數機器宕機,不會丟失資料,不會導致不可用,在日志領域比較成熟,
缺點:Kafka 單機超過 64 個佇列/磁區,Load 會發生明顯的飆高現象,佇列越多,load 越高,發送消 息回應時間變長,使用短輪詢方式,實時性取決于輪詢間隔時間,消費失敗不支持重試;支持訊息順序, 但是一臺代理宕機后,就會產生訊息亂序,社區更新較慢;
3..RocketMQ
RocketMQ 出自阿里巴巴的開源產品,用 Java 語言實作,在設計時參考了 Kafka,并做出了自己的一 些改進,被阿里巴巴廣泛應用在訂單,交易,充值,流計算,訊息推送,日志流式處理,binglog 分發等場景,
優點:單機吞吐量十萬級,可用性非常高,分布式架構,訊息可以做到 0 丟失,MQ 功能較為完善,支持 10 億級別的訊息堆積,不會因為堆積導致性能下降
缺點:支持的客戶端語言不多,目前是 java 及 c++,其中 c++不成熟;社區活躍度一般,沒有在 MQ 核心中去實作 JMS 等介面,有些系統要遷移需要修改大量代碼
4..RabbitMQ
2007 年發布,是一個在 AMQP(高級訊息佇列協議)基礎上完成的,可復用的企業訊息系統,是當前最 主流的訊息中間件之一,
優點:由于 erlang 語言的高并發特性,性能較好;吞吐量到萬級,MQ 功能比較完備,跨平臺、支持多種語言,支持 AJAX 檔案齊全;社區活躍度高;更新頻率相當高
缺點:商業版需要收費,學習成本較高
4.RabbitMQ
RabbitMQ 是一個訊息中間件:它接受并轉發訊息,
1.四大核心概念
生產者
產生資料發送訊息的程式是生產者
交換機
交換機是 RabbitMQ 非常重要的一個部件,一方面它接收來自生產者的訊息,另一方面它將訊息 推送到佇列中,交換機必須確切知道如何處理它接收到的訊息,是將這些訊息推送到特定佇列還是推 送到多個佇列,亦或者是把訊息丟棄,這個得有交換機型別決定
佇列
佇列是 RabbitMQ 內部使用的一種資料結構,盡管訊息流經 RabbitMQ 和應用程式,但它們只能存 儲在佇列中,佇列僅受主機的記憶體和磁盤限制的約束,本質上是一個大的訊息緩沖區,許多生產者可 以將訊息發送到一個佇列,許多消費者可以嘗試從一個佇列接收資料,這就是我們使用佇列的方式
消費者
消費與接收具有相似的含義,消費者大多時候是一個等待接收訊息的程式,請注意生產者,消費 者和訊息中間件很多時候并不在同一機器上,同一個應用程式既可以是生產者又是可以是消費者,
RabbitMQ的作業原理

組成部分說明:
- Broker:訊息佇列服務行程,此行程包括兩個部分:Exchange和Queue
- Exchange:訊息佇列交換機,按一定的規則將訊息路由轉發到某個佇列,對訊息進行過慮,
- Queue:訊息佇列,存盤訊息的佇列,訊息到達佇列并轉發給指定的
- Producer:訊息生產者,即生產方客戶端,生產方客戶端將訊息發送
- Consumer:訊息消費者,即消費方客戶端,接收MQ轉發的訊息,
- Connection:生產者,消費者和 broker 之間的 TCP 連接
- Channel:信道、Channel 作為輕量級的 Connection 極大減少了作業系統建立 TCP connection 的開銷
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/423214.html
標籤:其他
