漫話消息隊列

當下成熟的消息隊列產品非常多,各種豐富的特性讓人眼花繚亂,難以抉擇。穿透現象先看本質,消息隊列其實就是一個第三方應用程序,管理着一塊兒內存空間,能快速存取數據,具備先進先出特性。只是跟系統架構設計相結合,產生了神奇的特效,請看下圖:

基於消息隊列的異步架構圖

 

消息隊列的好處

1

---流量削峯:高併發的核心問題就是請求集中在同一時間,服務器來不及處理,而有了消息隊列,就可以將請求的數據打包放入,然後由後端處理器異步處理,降低高峯期的併發處理壓力,用時間換空間

2

---高可用性:90%系統的不可用都是因爲數據庫,而在異步化架構裏,就算數據庫掛掉、甚至處理器掛掉,均不影響系統的可用性,客戶端可以繼續響應請求,只是將請求堆積在消息隊列即可

3

---高擴展性:異步化架構裏,客戶端和處理器是通過消息來交互的,只要保證消息格式不變,可以隨意獨立演化擴展

技術選型

 

男怕入錯行,女怕嫁錯郎,技術選型很迷茫!網上充斥着各種不負責任的分析文章,侃侃而談,似是而非,胡說八道!下面我結合下個人開發實踐經歷,以及精選測試後的有效數據,給大家做下分析和推薦,僅一家之言!

 

1  MSMQ

微軟自家重量級隊列,內置在Windows Server,除了安裝省事兒外,幾乎沒別的優勢,在.NET Core跨平臺時代裏,已經基本淘汰!

 

2  ActiveMQ

最老牌的開源消息隊列,想當年是開源消息隊列首選,不過眼下已進入老年期,社區不活躍了。無論是功能還是性能,ActiveMQ 都已經與現代的消息隊列存在明顯的差距,它存在的意義在於兼容那些還在用老系統,該選項可以基本排除!

 

3  Redis-List

互聯網開發必備的Nosql-Redis,其List數據結構就是一個輕巧型的隊列。優勢是Redis的普及性,缺陷是現代化消息隊列很多必備功能和特性缺失,只能滿足中小型項目需求!

 

4  ZeroMQ

嚴格來說 ZeroMQ 並不是消息隊列,而是一個基於消息隊列的多線程網絡庫,如果你的需求是將消息隊列的功能集成到你的系統進程中,可以考慮使用 ZeroMQ,否則是跟異步化獨立架構矛盾的,Pass!

 

 

5 RocketMQ

源自阿里的開源消息隊列,經歷過多次“雙十一”考驗,它的性能、穩定性和可靠性都是值得信賴的。作爲優秀的國產消息隊列,近年來越來越多的被國內衆多大廠使用。唯一的原罪是爲Java開發的國產消息隊列,與周邊生態系統的集成和兼容程度要略遜一籌,對.NET支持就很不友好,果斷放棄不折騰!

 

6 RabbitMQ

特點是Messaging that just works,“開箱即用的消息隊列”。也就是說,RabbitMQ 是一個相當輕量級的消息隊列,非常容易部署和使用。這裏有個RabbitMQ的安裝視頻,歡迎掃碼自取。

RabbitMQ號稱是世界上使用最廣泛的開源消息隊列,其社區資源豐富、對各種開發語言支持友好、還有各種定製化插件,對於.NETer是非常友好的。還有個獨特的Exchange設計,非常實用。雖然也有併發不如其他隊列高的問題,但是集羣下大部分應用場景是毫無問題的,推薦!

 

7 Kafka

一個非常成熟的消息隊列產品,無論在數據可靠性、穩定性和功能特性等方面都可以滿足絕大多數場景的需求,而且擁有着極致性能。跟周邊生態系統的兼容性是最好的沒有之一,尤其在大數據和流計算領域,幾乎所有的相關開源軟件系統都會優先支持 Kafka。但是其致命傷在於Kafka是爲了性能選擇了異步批量發送模式,導致延時太高,無法滿足在線業務場景,常用於日誌數據分析等場景!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章