消息队列,我只选RabbitMQ!
高并發架構是架構師的必修課,而消息隊列,則是王冠上最閃亮的那顆明珠!能否駕馭消息隊列這款高并發神器,亦成為架構師的試金石。作為專注.NET領域十多年的老架構師,下面從隊列本質、技術選型、實戰應用三個方面,給大家整理下個人心得,希望能對大家有所幫助。
隊列本質
當下成熟的消息隊列產品非常多,各種豐富的特性讓人眼花繚亂,難以抉擇。穿透現象先看本質,消息隊列其實就是一個第三方應用程序,管理著一塊兒內存空間,能快速存取數據,具備先進先出特性。只是跟系統架構設計相結合,產生了神奇的特效,請看下圖:
基于消息隊列的異步架構圖
消息隊列的好處:
1
---流量削峰:高并發的核心問題就是請求集中在同一時間,服務器來不及處理,而有了消息隊列,就可以將請求的數據打包放入,然后由后端處理器異步處理,降低高峰期的并發處理壓力,用時間換空間
2
---高可用性:90%系統的不可用都是因為數據庫,而在異步化架構里,就算數據庫掛掉、甚至處理器掛掉,均不影響系統的可用性,客戶端可以繼續響應請求,只是將請求堆積在消息隊列即可
3
---高擴展性:異步化架構里,客戶端和處理器是通過消息來交互的,只要保證消息格式不變,可以隨意獨立演化擴展
技術選型
男怕入錯行,女怕嫁錯郎,技術選型很迷茫!網上充斥著各種不負責任的分析文章,侃侃而談,似是而非,胡說八道!下面我結合下個人開發實踐經歷,以及精選測試后的有效數據,給大家做下分析和推薦,僅一家之言!
1? MSMQ
微軟自家重量級隊列,內置在Windows Server,除了安裝省事兒外,幾乎沒別的優勢,在.NET Core跨平臺時代里,已經基本淘汰!
2 ?ActiveMQ
最老牌的開源消息隊列,想當年是開源消息隊列首選,不過眼下已進入老年期,社區不活躍了。無論是功能還是性能,ActiveMQ 都已經與現代的消息隊列存在明顯的差距,它存在的意義在于兼容那些還在用老系統,比如2013年我給廣東電信做外包項目時接入的還是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是為了性能選擇了異步批量發送模式,導致延時太高,無法滿足在線業務場景,常用于日志數據分析等場景!
實戰應用
經過以上分析,RabbitMQ以其優異的互聯網開發適應性脫穎而出,是.NET架構師必經之路。要用好一款消息隊列可不是件容易的事兒,下面為大家規劃了一個RabbitMQ的實戰學習路線,為期四天,從應用到調優全覆蓋,這會兒掃碼可以免費學習。學習計劃如下:
Day 1
1 解讀異步化架構設計,理解消息隊列的意義
2 完成RabbitMQ全套配置,基于.NET Core使用RabbitMQ
3 實現生產者消費者案例
Day 2
1 詳解RabbitMQ的多種路由配置使用和意義
2 結合實例講解路由的實際工作中的作用
3 解讀RabbitMQ消息確認以及消息防丟失
Day 3
1 詳解RabbitMQ消息持久化
2 解讀和應用消息優先級
3 RabbitMQ多種消費者模式案例實操
4 生產者消費者 VS發布訂閱
Day 4
1 Linux下RabbitMQ集群服務器搭建
2 集群隊列下消息分發策略和高可用機制
文末福利
為期4天,每天20:00到21:30,由資深架構師Richard為大家直播實操RabbitMQ,基礎實戰到集群到優化一網打盡,直通架構師!趕緊掃碼獲取免費學習名額,僅限前200名!先到先得哦!
總結
以上是生活随笔為你收集整理的消息队列,我只选RabbitMQ!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零搭建分布式文件系统MinIO比Fas
- 下一篇: 使用Jexus 容器化您的 Blazor