1.MQ的簡單了解
1.1.MQ簡介:
MQ,message Queue,是一種提供消息隊列服務(wù)的中間件,也稱消息中間件,是一套提供了信息生產(chǎn),儲存,消費全過程的API軟件系統(tǒng)。
1.2.MQ的主要用途:
- 流量削峰
MQ的流量削峰是指在系統(tǒng)面臨高并發(fā)請求時,使用MQ來緩沖請求,避免數(shù)據(jù)庫或其他服務(wù)承受過大的壓力。
例如,在雙十一等活動中,用戶的下單、搶購、支付等操作會導(dǎo)致系統(tǒng)的峰值流量集中在短時間內(nèi),如果直接訪問數(shù)據(jù)庫,可能會造成數(shù)據(jù)庫宕機(jī)或響應(yīng)緩慢。這時候,可以使用MQ來接收用戶的請求,然后按照一定的速率消費消息,從而平滑系統(tǒng)的負(fù)載。這樣既可以保證用戶的請求不會丟失,也可以提高系統(tǒng)的可用性和穩(wěn)定性。
流量削峰實際上是消息隊列最重要的功能,說直白點就是可以避免服務(wù)器在高峰時間段可能發(fā)生的宕機(jī)
- 異步解耦
MQ解耦合是指使用MQ來降低系統(tǒng)之間的依賴關(guān)系,使得系統(tǒng)之間可以異步地交換數(shù)據(jù)和消息。例如,如果A系統(tǒng)需要向B、C、D系統(tǒng)發(fā)送數(shù)據(jù),如果不使用MQ,那么A系統(tǒng)就需要直接調(diào)用B、C、D系統(tǒng)的接口,這樣會增加A系統(tǒng)的復(fù)雜度和風(fēng)險,如果其中一個系統(tǒng)出現(xiàn)故障或變動,會影響A系統(tǒng)的正常運(yùn)行。如果使用MQ,那么A系統(tǒng)只需要將數(shù)據(jù)發(fā)送到MQ中,然后由B、C、D系統(tǒng)從MQ中拉取數(shù)據(jù),這樣就可以實現(xiàn)A系統(tǒng)和B、C、D系統(tǒng)的解耦合。這樣既可以提高系統(tǒng)的可擴(kuò)展性和容錯性,也可以減少系統(tǒng)的開發(fā)和維護(hù)成本
1.3.MQ的主流產(chǎn)品:
- ActiveMQ
很老的玩意了,據(jù)說已經(jīng)g了 - RabbitMQ
RabbitMQ是一款使用Erlang語言開發(fā)的,實現(xiàn)AMQP (高級消息隊列協(xié)議)的開源消息中間件。它可以讓應(yīng)用程序之間通過消息來異步交互,提高系統(tǒng)的可靠性、可擴(kuò)展性和靈活性。 - Kafka
大量用于大數(shù)據(jù)領(lǐng)域,以高吞吐量著名,用與實時計算,日志采集場景,沒用使用常見MQ協(xié)議,而是自研協(xié)議。 - RocketMQ
使用java語言開發(fā),經(jīng)過阿里雙十一數(shù)年考驗,借鑒了kafka,同樣使用自研協(xié)議。
性能對比:圖片來源https://www.bilibili.com/video/BV1cf4y157sz
1.4.MQ常見協(xié)議:
- AMQP(Advanced Message Queuing Protocol),高級消息隊列協(xié)議,是一個提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)協(xié)議,為面向消息的中間件設(shè)計。它定義了消息的格式、傳輸方式和交換規(guī)則,支持多種語言和平臺。RabbitMQ就是基于AMQP協(xié)議的一個開源消息中間件。
- MQTT(Message Queuing Telemetry Transport),消息隊列遙測傳輸,是IBM開發(fā)的一個即時通訊協(xié)議,是一種二進(jìn)制協(xié)議,主要用于服務(wù)器和低功耗IoT(物聯(lián)網(wǎng))設(shè)備間的通信。它使用發(fā)布/訂閱模式,支持三種不同的服務(wù)質(zhì)量(QoS)級別。
- STOMP(Simple Text Oriented Messaging Protocol),簡單文本定向消息協(xié)議,是一個基于文本的消息傳輸協(xié)議,可以在不同的語言和平臺之間進(jìn)行通信。它使用幀結(jié)構(gòu)來傳輸數(shù)據(jù),每個幀包含一個命令、一個可選的頭部和一個可選的正文。
- XMPP(可擴(kuò)展消息處理現(xiàn)場協(xié)議,Extensible Messaging and Presence Protocol)是基于可擴(kuò)展標(biāo)記語言(XML)的協(xié)議,多用于即時消息(IM)以及在線現(xiàn)場探測。適用于服務(wù)器之間的準(zhǔn)即時操作。核心是基于XML流傳輸,這個協(xié)議可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時消息,即使其操作系統(tǒng)和瀏覽器不同。
優(yōu)點:通用公開、兼容性強(qiáng)、可擴(kuò)展、安全性高,但XML編碼格式占用帶寬大
1.5.RocketMQ的發(fā)展歷程:
-
2007年,阿里開始五彩石項目,Notify作為項目中的交易核心消息流轉(zhuǎn)系統(tǒng),應(yīng)運(yùn)而生,Notify系統(tǒng)是RocketMQ的雛形。
-
2010年,B2B大規(guī)模使用ActiveMQ作為阿里的消息內(nèi)核,阿里需要一個海量信息堆積的消息系統(tǒng)。
-
2011年初,Kafka開源,淘寶借鑒,開發(fā)Meta MQ。
-
2012年,MetaMQ發(fā)展DA到3.0水平,并將其抽象形成Rocket MQ 對其進(jìn)行了開源。
-
2015年,阿里在RocketMQ基礎(chǔ)上,有推出了一款專門針對阿里云上消息系統(tǒng)Aliware MQ。
-
2016年雙十一,RocketMQ承載了萬億級消息的流轉(zhuǎn),跨越了一個新的里程碑。11月28日,阿里巴巴向Apache 軟件基金會捐贈RocketMQ,成為Apache孵化項目。文章來源:http://www.zghlxwxcb.cn/news/detail-414412.html
-
2017年9月25日,Apache宣布RocketMQ孵化成為Apache頂級項目(TLP),成為國內(nèi)首個互聯(lián)網(wǎng)中間件在Apache上的頂級項目。文章來源地址http://www.zghlxwxcb.cn/news/detail-414412.html
到了這里,關(guān)于RocketMQ的學(xué)習(xí)歷程(一)----MQ簡介的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!