消息队列,我只选RabbitMQ!
高并發(fā)架構(gòu)是架構(gòu)師的必修課,而消息隊(duì)列,則是王冠上最閃亮的那顆明珠!能否駕馭消息隊(duì)列這款高并發(fā)神器,亦成為架構(gòu)師的試金石。作為專注.NET領(lǐng)域十多年的老架構(gòu)師,下面從隊(duì)列本質(zhì)、技術(shù)選型、實(shí)戰(zhàn)應(yīng)用三個(gè)方面,給大家整理下個(gè)人心得,希望能對(duì)大家有所幫助。
隊(duì)列本質(zhì)
當(dāng)下成熟的消息隊(duì)列產(chǎn)品非常多,各種豐富的特性讓人眼花繚亂,難以抉擇。穿透現(xiàn)象先看本質(zhì),消息隊(duì)列其實(shí)就是一個(gè)第三方應(yīng)用程序,管理著一塊兒內(nèi)存空間,能快速存取數(shù)據(jù),具備先進(jìn)先出特性。只是跟系統(tǒng)架構(gòu)設(shè)計(jì)相結(jié)合,產(chǎn)生了神奇的特效,請(qǐng)看下圖:
基于消息隊(duì)列的異步架構(gòu)圖
消息隊(duì)列的好處:
1
---流量削峰:高并發(fā)的核心問(wèn)題就是請(qǐng)求集中在同一時(shí)間,服務(wù)器來(lái)不及處理,而有了消息隊(duì)列,就可以將請(qǐng)求的數(shù)據(jù)打包放入,然后由后端處理器異步處理,降低高峰期的并發(fā)處理壓力,用時(shí)間換空間
2
---高可用性:90%系統(tǒng)的不可用都是因?yàn)閿?shù)據(jù)庫(kù),而在異步化架構(gòu)里,就算數(shù)據(jù)庫(kù)掛掉、甚至處理器掛掉,均不影響系統(tǒng)的可用性,客戶端可以繼續(xù)響應(yīng)請(qǐng)求,只是將請(qǐng)求堆積在消息隊(duì)列即可
3
---高擴(kuò)展性:異步化架構(gòu)里,客戶端和處理器是通過(guò)消息來(lái)交互的,只要保證消息格式不變,可以隨意獨(dú)立演化擴(kuò)展
技術(shù)選型
男怕入錯(cuò)行,女怕嫁錯(cuò)郎,技術(shù)選型很迷茫!網(wǎng)上充斥著各種不負(fù)責(zé)任的分析文章,侃侃而談,似是而非,胡說(shuō)八道!下面我結(jié)合下個(gè)人開(kāi)發(fā)實(shí)踐經(jīng)歷,以及精選測(cè)試后的有效數(shù)據(jù),給大家做下分析和推薦,僅一家之言!
1? MSMQ
微軟自家重量級(jí)隊(duì)列,內(nèi)置在Windows Server,除了安裝省事兒外,幾乎沒(méi)別的優(yōu)勢(shì),在.NET Core跨平臺(tái)時(shí)代里,已經(jīng)基本淘汰!
2 ?ActiveMQ
最老牌的開(kāi)源消息隊(duì)列,想當(dāng)年是開(kāi)源消息隊(duì)列首選,不過(guò)眼下已進(jìn)入老年期,社區(qū)不活躍了。無(wú)論是功能還是性能,ActiveMQ 都已經(jīng)與現(xiàn)代的消息隊(duì)列存在明顯的差距,它存在的意義在于兼容那些還在用老系統(tǒng),比如2013年我給廣東電信做外包項(xiàng)目時(shí)接入的還是ActiveMQ,該選項(xiàng)可以基本排除!
3? Redis-List
互聯(lián)網(wǎng)開(kāi)發(fā)必備的Nosql-Redis,其List數(shù)據(jù)結(jié)構(gòu)就是一個(gè)輕巧型的隊(duì)列。優(yōu)勢(shì)是Redis的普及性,缺陷是現(xiàn)代化消息隊(duì)列很多必備功能和特性缺失,只能滿足中小型項(xiàng)目需求!
4? ZeroMQ
嚴(yán)格來(lái)說(shuō) ZeroMQ 并不是消息隊(duì)列,而是一個(gè)基于消息隊(duì)列的多線程網(wǎng)絡(luò)庫(kù),如果你的需求是將消息隊(duì)列的功能集成到你的系統(tǒng)進(jìn)程中,可以考慮使用 ZeroMQ,否則是跟異步化獨(dú)立架構(gòu)矛盾的,Pass!
5 RocketMQ
源自阿里的開(kāi)源消息隊(duì)列,經(jīng)歷過(guò)多次“雙十一”考驗(yàn),它的性能、穩(wěn)定性和可靠性都是值得信賴的。作為優(yōu)秀的國(guó)產(chǎn)消息隊(duì)列,近年來(lái)越來(lái)越多的被國(guó)內(nèi)眾多大廠使用。唯一的原罪是為Java開(kāi)發(fā)的國(guó)產(chǎn)消息隊(duì)列,與周邊生態(tài)系統(tǒng)的集成和兼容程度要略遜一籌,對(duì).NET支持就很不友好,果斷放棄不折騰!
6 RabbitMQ
特點(diǎn)是Messaging that just works,“開(kāi)箱即用的消息隊(duì)列”。也就是說(shuō),RabbitMQ 是一個(gè)相當(dāng)輕量級(jí)的消息隊(duì)列,非常容易部署和使用。這里有個(gè)RabbitMQ的安裝視頻,歡迎掃碼自取。
RabbitMQ號(hào)稱是世界上使用最廣泛的開(kāi)源消息隊(duì)列,其社區(qū)資源豐富、對(duì)各種開(kāi)發(fā)語(yǔ)言支持友好、還有各種定制化插件,對(duì)于.NETer是非常友好的。還有個(gè)獨(dú)特的Exchange設(shè)計(jì),非常實(shí)用。雖然也有并發(fā)不如其他隊(duì)列高的問(wèn)題,但是集群下大部分應(yīng)用場(chǎng)景是毫無(wú)問(wèn)題的,推薦!
7 Kafka
一個(gè)非常成熟的消息隊(duì)列產(chǎn)品,無(wú)論在數(shù)據(jù)可靠性、穩(wěn)定性和功能特性等方面都可以滿足絕大多數(shù)場(chǎng)景的需求,而且擁有著極致性能。跟周邊生態(tài)系統(tǒng)的兼容性是最好的沒(méi)有之一,尤其在大數(shù)據(jù)和流計(jì)算領(lǐng)域,幾乎所有的相關(guān)開(kāi)源軟件系統(tǒng)都會(huì)優(yōu)先支持 Kafka。但是其致命傷在于Kafka是為了性能選擇了異步批量發(fā)送模式,導(dǎo)致延時(shí)太高,無(wú)法滿足在線業(yè)務(wù)場(chǎng)景,常用于日志數(shù)據(jù)分析等場(chǎng)景!
實(shí)戰(zhàn)應(yīng)用
經(jīng)過(guò)以上分析,RabbitMQ以其優(yōu)異的互聯(lián)網(wǎng)開(kāi)發(fā)適應(yīng)性脫穎而出,是.NET架構(gòu)師必經(jīng)之路。要用好一款消息隊(duì)列可不是件容易的事兒,下面為大家規(guī)劃了一個(gè)RabbitMQ的實(shí)戰(zhàn)學(xué)習(xí)路線,為期四天,從應(yīng)用到調(diào)優(yōu)全覆蓋,這會(huì)兒掃碼可以免費(fèi)學(xué)習(xí)。學(xué)習(xí)計(jì)劃如下:
Day 1
1 解讀異步化架構(gòu)設(shè)計(jì),理解消息隊(duì)列的意義
2 完成RabbitMQ全套配置,基于.NET Core使用RabbitMQ
3 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者案例
Day 2
1 詳解RabbitMQ的多種路由配置使用和意義
2 結(jié)合實(shí)例講解路由的實(shí)際工作中的作用
3 解讀RabbitMQ消息確認(rèn)以及消息防丟失
Day 3
1 詳解RabbitMQ消息持久化
2 解讀和應(yīng)用消息優(yōu)先級(jí)
3 RabbitMQ多種消費(fèi)者模式案例實(shí)操
4 生產(chǎn)者消費(fèi)者 VS發(fā)布訂閱
Day 4
1 Linux下RabbitMQ集群服務(wù)器搭建
2 集群隊(duì)列下消息分發(fā)策略和高可用機(jī)制
文末福利
為期4天,每天20:00到21:30,由資深架構(gòu)師Richard為大家直播實(shí)操RabbitMQ,基礎(chǔ)實(shí)戰(zhàn)到集群到優(yōu)化一網(wǎng)打盡,直通架構(gòu)師!趕緊掃碼獲取免費(fèi)學(xué)習(xí)名額,僅限前200名!先到先得哦!
總結(jié)
以上是生活随笔為你收集整理的消息队列,我只选RabbitMQ!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从零搭建分布式文件系统MinIO比Fas
- 下一篇: 使用Jexus 容器化您的 Blazor