訊息系統分類(快速帶你認識訊息系統)
訊息系統分類
* Peer-to-Peer
* 一般基於Pull或者Polling接收訊息
* 傳送到佇列中的訊息被一個而且僅僅一個接收者所接收,即使有多個接收者在同一個佇列中偵聽同一訊息
* 即支援非同步“即發即棄”的訊息傳送方式,也支援同步請求/應答傳送方式
* 釋出/訂閱(不一定是多播,支援多播)
* 釋出一個主題的訊息,可被多個訂閱者所接收
* 釋出/訂閱即可基於Push消費資料,也可基於Pull或者Polling消費資料
* 解耦能力比P2P模式更強
訊息系統適用場景:
1. 解耦:各個系統之間通過訊息系統統一介面交換資料
2. 冗餘:部分訊息系統具有訊息持久化能力,可規避訊息處理前丟失的風險
3. 擴充套件:訊息系統是統一的資料介面,各系統可獨立擴充套件
4. 峰值處理能力:訊息系統可頂住峰值流量,業務系統可根據處理能力從訊息系統中獲取並處理對應量的請求
5. 可恢復性:系統中部分元件失效並不會影響整個系統,它恢復後仍然可從訊息系統中獲取並處理資料
6. 非同步通訊:在不需要立即處理請求的場景下,可以將請求放入訊息系統,合適的時候再處理
* * *
常用訊息系統對比:
* RabbitMQ:Erlang編寫,支援多協議AMQP、XMPP、SMTP、STOMP。支援負載均衡、資料持久化。同時支援Peer-toPeer和釋出/訂閱模式。
* Redis:key-value的nosql資料庫,同時支援MQ功能,可做輕量級佇列服務使用。就入隊操作而言,Redis對短訊息(<=10kb)的效能比RabbitMQ好,長訊息的效能比RabbitMQ差
* ZeroMQ:一個開發庫,n to m 通訊方式。Peer to Peer. 使用成本,門檻高。
* ActiveMQ:JMS實現,Peer to Peer,支援持久化、XA事務。(支援本地事務)
* Kafka/Jafka: 分散式釋出/訂閱訊息系統,資料持久化,全分散式,同時支援線上和離線處理
* MetaQ/RocketMQ: 純java實現,釋出/訂閱訊息系統,支援本地事務和XA分散式事務
* * *
Kafka設計目標
* 高吞吐率
* 訊息持久化
* 完全分散式
* 同時滿足適應線上處理和離線批處理
* * *