RabbitMQ系列(一)--消息中間件MQ如何去選擇


MQ在項目中的應用很普遍,本人所在項目組使用的是ActiveMQ,但是后面介紹的RabbitMQ。。。

一、應用場景

1、異步處理

2、流量削峰、秒殺

3、日志處理,推薦kafka

4、應用解耦

二、衡量指標

我們從服務性能、數據存儲、集群結構三個方面去對比,選擇適合自己項目的消息中間件

1、ActiveMQ

特點:

  早期主流的消息中間件,包括ZeroMQ,但是這幾年使用的很少了,主要在長期維護的項目中使用。API豐富,本身很成熟但是在高並發、大數據

環境下的性能不夠出色,主要試用於中小型項目,有較低的概率丟失數據,最主要是的,官方現在維護的頻率一直在降低,好幾個月才發布一個版本。

架構:

  1、Master-Slave模式,通過Zookeeper實現節點切換和故障轉移

  2、NetWork模式,相當於多套Master-Slave模式,通過NetWork網關進行集成

2、kafka

特點:

  基於pull模式來處理消息消費,追求高吞吐量,開始的目的是日志采集和傳輸,0.8版本開始支持復制,不支持事務,對消息的重復、丟失

、錯誤沒有嚴格要求,適合大數據服務的數據計算、日志采集業務

  topic數量從幾十到幾百的時候,吞吐量會大幅度下降,本身支持的功能比較簡單,可能有消息重復消費

集群:

  通過zookeeper集群管理多個kafka節點,節點之間相互replication

3、RocketMQ

特點:

  純Java開發,具備高吞吐量(10W級別)、高可用性、適合大規模分布式系統應用的特點。思路起源於kafka,對事務的可靠性傳遞和事務性

進行優化,在阿里巴巴廣泛應用於交易、充值、流計算、消息推送、日志流式處理、binglog分發等場景,但是商業版收費

  MQ功能較為完善,拓展性好,因為是分布式的,接口簡易,支持復雜的MQ業務場景,本身是阿里出品,品質有所保障

  社區維護一般,沒有特別活躍,而且萬一像之前的Dubbo一樣,沒人維護了,就涼了(Dubbo現在已經重新維護,接連發布很多版本)

集群:

  master-slave、2M-2S、多主多從等

 

 

4、RabbitMQ

特點:

  開源的消息代理和隊列服務器,在普通協議在不同的應用之間共享數據,使用Erlang編寫(Erlang進行數據交換的性能很好,和原生socket

一樣好的延遲響應效果),遵守AMQP協議,AMQP主要特征是面向消息、隊列、路由(點對點的發布/訂閱)、可靠性、安全。適合對數據一致性、

穩定性(100%消息投遞)和可靠性要求很高的場景,對性能和吞吐量的要求其次。

優點:

  能達到幾萬級別的吞吐量(和具體的機器配置有關),但是相比kafka和RocketMQ差了不少,因為采用Erlang,時延性是微秒級別,

最重要的是有專門的可視化界面,很方便進行管理,社區非常活躍,功能很完備

缺點:

  吞吐量的問題,因為是Erlang語言開發,很難去查看源碼。如果存在什么問題,只能等官方去解決,對其掌控度很低,但是社區活躍

度很高,這個影響也不大的

 

 

綜上:

  如果是大數據肯定推薦kafka,kafka是業內的標准,絕對沒問題。

  而RocketMQ更加優秀,但是好像商業版收費,社區有黃掉的風險,適合大公司對自己的技術實力有很大自信的,可以自己維護擴展

  RabbitMQ方面,Erlang語言是一個限制,畢竟國內精通這個的不多,好在是開源的,穩定支持,適合中小型公司吧

  本人比較喜歡RocketMQ的,雖然這個系列是學習RabbitMQ,以后肯定還是學習RocketMQ,相對RabbitMQ優點很明顯。

關於三者詳細對比,可以參考:常用MQ產品的對比,里面表格對比顯示的很詳細


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM