1. 程式人生 > 實用技巧 >MQ概念

MQ概念

MQ

1.訊息佇列可以簡單理解為:把要傳輸的資料放在佇列中。用來降低Web伺服器因傳送訊息而導致的負載和延時問題。

2.為什麼用MQ(MQ優點):解耦、非同步、削峰/限流、高可用、防資料丟失。

1)解耦舉例:訂單系統下單,需要呼叫支付系統、物流系統、庫存系統、積分系統等等一批。物流系統宕機,整個一串全完。使用MQ,只需要物流系統修復後從MQ中讀取訊息進行處理,其他系統正常執行。

2)非同步舉例:訂單系統下單,需要呼叫支付系統、物流系統、庫存系統、積分系統等等一批。導致訂單提交耗時很長。使用MQ,訂單系統推送到MQ,然後結束,其他系統接收訊息後自行處理。

3)削峰/限流:併發量大系統,假設每秒鐘併發1萬次,一臺伺服器每秒鐘處理1百次,共10臺機器。可以使用MQ每次處理1百,其他的排隊等待。

4)高可用:MQ用來削峰,一但宕機,全完蛋,這就需要支援叢集。

5)防資料丟失:MQ執行著,各種原因導致宕機,要防止資料丟失。MQ可把資料持久化到磁碟上。

版本比較

ActiveMQ

多用於傳統企業,對高併發、高吞吐、高負載要求不高的,且版本的迭代速度比較慢,目前是幾個月迭代一個小版本。

RabbitMQ

多用於中型企業,支援萬級的吞吐,可以保證資料不丟失,有視覺化的資料管理頁面,版本迭代速度比較快,缺點是用erlang語言開發的,原始碼分析較難,難以二次開發。

RocketMQ

阿里開發的,用的是Java語言,支援十萬級的吞吐,可以做分散式的,缺點是如果阿里放棄此技術,公司又沒有研究原始碼的人,那後續出現的問題不好解決。

Kafka

是apache開源的訊息佇列專案,多用於大資料,有超高的吞吐量,如實時日誌採集、實時資料同步、實時資料計算等。

RabbitMQ和Kafka比對:

Kafka作為訊息傳輸的資料管道,RabbitMQ作為交易資料作為資料傳輸管道,主要的取捨因素則是是否存在丟資料的可能;RabbitMQ在金融場景中經常使用,具有較高的嚴謹性,資料丟失的可能性更小,同時具備更高的實時性;而kafka優勢主要體現在吞吐量上,雖然可以通過策略實現資料不丟失,但從嚴謹性角度來講,大不如RabbitMQ;由於Kafka保證每條訊息最少送達一次,有較小的概率會出現資料重複傳送的情況;Kafka的設計初衷就是處理日誌。