“消息隊(duì)列”是在消息的傳輸過程中保存消息的容器?!跋ⅰ笔窃趦膳_(tái)計(jì)算機(jī)間傳送的數(shù)據(jù)單位。消息可以非常簡(jiǎn)單,例如只包含文本字符串;也可以更復(fù)雜,可能包含嵌入對(duì)象。
“消息隊(duì)列”是在消息的傳輸過程中保存消息的容器?!跋ⅰ笔窃趦膳_(tái)計(jì)算機(jī)間傳送的數(shù)據(jù)單位。消息可以非常簡(jiǎn)單,例如只包含文本字符串;也可以更復(fù)雜,可能包含嵌入對(duì)象。消息被發(fā)送到隊(duì)列中?!跋㈥?duì)列”是在消息的傳輸過程中保存消息的容器。消息隊(duì)列管理器在將消息從它的源中繼到它的目標(biāo)時(shí)充當(dāng)中間人。隊(duì)列的主要目的是提供路由并保證消息的傳遞;如果發(fā)送消息時(shí)接收者不可用,消息隊(duì)列會(huì)保留消息,直到可以成功地傳遞它。
消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用解耦,異步消息,流量削鋒等問題,實(shí)現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu)。目前使用較多的消息隊(duì)列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。
針對(duì)MQ的核心場(chǎng)景,我們從異步、解耦、削峰填谷等特性進(jìn)行分析,區(qū)別于傳統(tǒng)的RPC調(diào)用。尤其在引入中間節(jié)點(diǎn)的情況下,通過空間(擁有存儲(chǔ)能力)換時(shí)間(RPC同步等待響應(yīng))的思想,增加更多的可能性和能力。
1、消息通訊
作為消息隊(duì)列,其場(chǎng)景就是實(shí)現(xiàn)消息通訊。
應(yīng)用舉例:微信發(fā)消息、QQ聊天群等。
消息隊(duì)列主要有兩種模式:點(diǎn)對(duì)點(diǎn)(Point to Point)模式和發(fā)布-訂閱(Publisher-Subscriber)模式。
2、異步通信
針對(duì)不需要立即處理消息,尤其那種非常耗時(shí)的操作,通過消息隊(duì)列提供了異步處理機(jī)制,通過額外的消費(fèi)線程接管這部分進(jìn)行異步操作處理。
3、應(yīng)用解耦
在應(yīng)用和應(yīng)用之間,提供了異構(gòu)系統(tǒng)之間的消息通訊的機(jī)制,通過消息中間件解決多個(gè)系統(tǒng)或異構(gòu)系統(tǒng)之間除了RPC之外另一種單向通訊的機(jī)制。
4、擴(kuò)展性
因?yàn)橄㈥?duì)列解耦了主流程的處理過程,只要另外增加處理過程即可,不需要改變代碼、不需要調(diào)整參數(shù),便于分布式擴(kuò)容。
5、流量削峰
在秒殺場(chǎng)景,由于峰值訪問量過大,超出服務(wù)能力,則會(huì)壓垮服務(wù),導(dǎo)致服務(wù)崩潰。此時(shí),可以先將用戶的秒殺請(qǐng)求作為消息存入MQ,然后服務(wù)再根據(jù)自身能力慢慢處理這些請(qǐng)求。
優(yōu)點(diǎn):提示峰值處理能力,提示服務(wù)穩(wěn)定性。
應(yīng)用舉例:秒殺活動(dòng)、團(tuán)購(gòu)搶單等。
6、順序保證
在大多使用場(chǎng)景下,數(shù)據(jù)處理的順序都很重要。大部分消息隊(duì)列本來就是排序的,并且能保證數(shù)據(jù)會(huì)按照特定的順序來進(jìn)行處理。
7、數(shù)據(jù)流處理
分布式系統(tǒng)產(chǎn)生的海量數(shù)據(jù)流,如:業(yè)務(wù)日志、監(jiān)控?cái)?shù)據(jù)、用戶行為等,針對(duì)這些數(shù)據(jù)流進(jìn)行實(shí)時(shí)或批量采集匯總,然后導(dǎo)入到大數(shù)據(jù)實(shí)時(shí)計(jì)算引擎,通過消息隊(duì)列解決異構(gòu)系統(tǒng)的數(shù)據(jù)對(duì)接能力。
RabbitMQ 在吞吐量方面雖然稍遜于 Kafka 和 RocketMQ ,但是由于它基于 erlang 開發(fā),所以并發(fā)能力很強(qiáng),性能極其好,延時(shí)很低,達(dá)到微秒級(jí)。但是也因?yàn)?RabbitMQ 基于 erlang 開發(fā),所以國(guó)內(nèi)很少有公司有實(shí)力做erlang源碼級(jí)別的研究和定制。
如果業(yè)務(wù)場(chǎng)景對(duì)并發(fā)量要求不是太高(十萬級(jí)、百萬級(jí)),那這些消息隊(duì)列中,RabbitMQ 一定是你的首選。
新網(wǎng)消息隊(duì)列RabbitMQ,通過創(chuàng)建集群的方式來實(shí)現(xiàn)RabbitMQ以及所依賴的服務(wù)的部署,完全兼容RabbitMQ開源生態(tài)以及多語言客戶端,為用戶提供快速創(chuàng)建、方便管理的消息中間件:
https://www.xinnet.com/cs/rabbitmq.html
免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。