1 MQS簡(jiǎn)介
消息隊(duì)列服務(wù)(Message Queue Service,簡(jiǎn)稱MQS),是阿里云推出的分布式消息中間件服務(wù)。
MQS旨在提供可靠、海量、高并發(fā)的分布式消息隊(duì)列服務(wù),從而幫助應(yīng)用開(kāi)發(fā)者實(shí)現(xiàn)應(yīng)用之間以及應(yīng)用內(nèi)部各組件之間的消息傳遞,解耦系統(tǒng)之間的依賴。
2 MQS功能特點(diǎn)
消息隊(duì)列最早出現(xiàn)在操作系統(tǒng)中,解決了傳統(tǒng)的進(jìn)程通信模式中存在的很多弊端。消息隊(duì)列具備的優(yōu)點(diǎn)包括:
(1) 單獨(dú)對(duì)消息的收、發(fā)進(jìn)行管理,確保消息的成功傳遞。
(2) 提供異步的通信協(xié)議,消息產(chǎn)生者只需要將消息發(fā)送到消息隊(duì)列中,即可立刻返回。
(3) 大大降低異構(gòu)系統(tǒng)之間的耦合度。
在大數(shù)據(jù)時(shí)代,傳統(tǒng)的消息隊(duì)列無(wú)法滿足日益增長(zhǎng)的消息通信需求,用戶個(gè)人搭建消息隊(duì)列集群會(huì)帶來(lái)較大的機(jī)器和運(yùn)維成本;同時(shí)隨著移動(dòng)端規(guī)模的爆發(fā)式增長(zhǎng),對(duì)消息隊(duì)列的安全性、可靠性以及可擴(kuò)展性提出了挑戰(zhàn)。阿里云推出的消息隊(duì)列服務(wù)(MQS)是基于阿里云飛天云平臺(tái)上的消息中間件服務(wù),相比傳統(tǒng)的消息隊(duì)列而言,具備如下特點(diǎn):
零運(yùn)維、高性能、高可擴(kuò)展。數(shù)據(jù)多冗余架構(gòu),確保消息的可靠性。在有效期內(nèi),保證每條消息至少可被消費(fèi)一次(at-least-once)。允許創(chuàng)建海量的消息隊(duì)列。API接口簡(jiǎn)單易用,對(duì)平臺(tái)無(wú)依賴。 不嚴(yán)格保證消息的FIFO屬性。3 MQS基本架構(gòu)
MQS的基本架構(gòu)如圖1所示??梢苑譃樗牟糠郑?/p> l OAuth、Authorization驗(yàn)權(quán)驗(yàn)證模塊。接入阿里云的賬號(hào)驗(yàn)證體系,用戶需首先在阿里云官網(wǎng)(www.aliyun.com)申請(qǐng)賬號(hào)并開(kāi)通服務(wù)之后方可使用MQS服務(wù)。l Http Front模塊。主要負(fù)責(zé)對(duì)用戶的HTTP請(qǐng)求進(jìn)行解析、處理,并接入阿里云的驗(yàn)證驗(yàn)權(quán)模塊,最終在MQS的后端服務(wù)集群執(zhí)行完請(qǐng)求后將結(jié)果返回給用戶。l MQS Master模塊。主要負(fù)責(zé)Message數(shù)據(jù)的切片調(diào)度,實(shí)現(xiàn)分布式的load balance。l Message Data Server集群?;诎⒗镌骑w天分布式計(jì)算平臺(tái)的MQS后端服務(wù)集群,是MQS的核心模塊,實(shí)現(xiàn)了關(guān)于隊(duì)列、消息的所有操作。
圖1 MQS架構(gòu)圖
3.1 數(shù)據(jù)多冗余
如圖1所示,寫(xiě)入到MQS的所有消息數(shù)據(jù)都會(huì)對(duì)應(yīng)三份拷貝,從而確保數(shù)據(jù)的高可靠性。
3.2 Qos控制
在Message Data Server層針對(duì)每個(gè)隊(duì)列都設(shè)置有單獨(dú)的QoS控制,針對(duì)該隊(duì)列的訪問(wèn)請(qǐng)求量不得超過(guò)其QoS上限值。
3.3 數(shù)據(jù)多切片分布
隊(duì)列的消息數(shù)據(jù)是按照特定的算法進(jìn)行切片分布的,并由MQS Master進(jìn)行集中管理,這不僅有效的實(shí)現(xiàn)了load balance,同時(shí)還能夠動(dòng)態(tài)的進(jìn)行集群規(guī)模的彈性擴(kuò)展。
4 MQS隊(duì)列中消息存活周期
在具體介紹隊(duì)列中消息存活周期之前,首先介紹下MQS涉及到的相關(guān)術(shù)語(yǔ)。
Active Message(活躍消息)隊(duì)列中可以被取出消費(fèi)的消息。Inactive Message(非活躍消息)隊(duì)列中已經(jīng)被取出但未刪除的消息,非活躍消息將保持一段時(shí)間(隊(duì)列的VisibilityTimeout屬性值)無(wú)法被其他人取出。Expired Message (過(guò)期消息)當(dāng)隊(duì)列中的某條消息超過(guò)了消息有效時(shí)間(TTL)之后仍未被取出,則該消息將變?yōu)檫^(guò)期消息,會(huì)被后臺(tái)GC模塊回收。
在介紹完一些基本術(shù)語(yǔ)之后,圖2中顯示了一條消息的整個(gè)生命周期。
在PutMessage之后,消息進(jìn)入到隊(duì)列中,即成為能夠被取出的ActiveMessage;(如圖2中A所示)
在消費(fèi)者取出該條消息之后則轉(zhuǎn)變?yōu)镮nactiveMessage;(如圖2中B所示)
a) 如果在VisibilityTimeout時(shí)間段內(nèi),消費(fèi)者將該條消息消費(fèi)完畢,并發(fā)送刪除請(qǐng)求,則該消息將會(huì)從隊(duì)列中刪除;(如圖2中C所示)
b) 如果消費(fèi)者未完成消費(fèi),則InactiveMessage將會(huì)在VisibilityTimeout之后自動(dòng)轉(zhuǎn)換成ActiveMessage,從而可以再次被取出消費(fèi);(如圖2中D所示)
在消息有效時(shí)間過(guò)后,消息將變?yōu)镋xpiredMessage,從隊(duì)列中刪除。(如圖2中E.1和E.2所示)
圖2 隊(duì)列中消息的生命周期
5 MQS中多樣的隊(duì)列模式
在滿足普通的消息收發(fā)模式的同時(shí),MQS還向用戶提供了多樣的隊(duì)列模式,分別包括延遲隊(duì)列、長(zhǎng)輪詢隊(duì)列以及優(yōu)先級(jí)隊(duì)列等。
5.1 延遲隊(duì)列
在延遲隊(duì)列中,發(fā)送到隊(duì)列中的每一條消息都會(huì)保持一段等待時(shí)間,在等待時(shí)間過(guò)后才可以被取出消費(fèi)。延遲隊(duì)列可以幫用戶輕松實(shí)現(xiàn)任務(wù)定時(shí)分發(fā)等功能。目前延遲隊(duì)列支持最大的延遲時(shí)間長(zhǎng)達(dá)7天。
5.2 長(zhǎng)輪詢隊(duì)列
由于MQS實(shí)現(xiàn)的是基于HTTP協(xié)議的API接口,用戶是通過(guò)拉(pull)的方式進(jìn)行消息的獲取,從而可能會(huì)出現(xiàn)消息數(shù)據(jù)獲取不及時(shí)或者頻繁發(fā)送空取消息的無(wú)用請(qǐng)求。MQS通過(guò)長(zhǎng)輪詢(long polling)的方式確保了用戶能夠在減少無(wú)用請(qǐng)求的基礎(chǔ)上,又能及時(shí)獲取到消息。
5.3 優(yōu)先級(jí)隊(duì)列
優(yōu)先級(jí)隊(duì)列能夠?yàn)橛脩籼峁┚邆湎?yōu)先級(jí)別的隊(duì)列。發(fā)送到隊(duì)列中的每條消息都會(huì)設(shè)置有相應(yīng)的優(yōu)先級(jí)別;在進(jìn)行消費(fèi)時(shí),較高優(yōu)先級(jí)別的消息將會(huì)先被取出。目前優(yōu)先級(jí)隊(duì)列暫時(shí)無(wú)法確保百分百的優(yōu)先級(jí)順序。
6 技術(shù)展望
作為消息通訊的中間件服務(wù),MQS會(huì)將服務(wù)的穩(wěn)定性和安全性放在首位,主要工作將包括:
開(kāi)放賬戶訪問(wèn)權(quán)限授予的API接口;
增加隊(duì)列狀態(tài)監(jiān)控報(bào)警機(jī)制;
同時(shí),在功能和性能方面將進(jìn)行更多的嘗試:
長(zhǎng)連接功能打開(kāi);
后端server采用更高效的異步處理模式;
死信隊(duì)列,消息數(shù)據(jù)備份等。
原文鏈接:http://blog.aliyun.com/1346?spm=0.0.0.0.R1KCex