文章摘要:在阿里云上吉嚣,就創(chuàng)建了一個(gè)消息隊(duì)列的Topic观话,其他啥也沒(méi)干胃夏,過(guò)了一天就欠阿里云2元了轴或,消息隊(duì)列這項(xiàng)云服務(wù)也太能吸金了吧?
一仰禀、談?wù)凪Q消息隊(duì)列的產(chǎn)品概念
最簡(jiǎn)單地說(shuō)照雁,消息隊(duì)列就是消息在傳輸過(guò)程中用于保存消息的容器,在一次發(fā)送接收的通信過(guò)程中答恶,其主要充當(dāng)了“中轉(zhuǎn)站”的角色饺蚊,內(nèi)部提供路由并保證消息的可靠傳遞。如果發(fā)送消息時(shí)接收者不可用悬嗓,消息隊(duì)列會(huì)保留消息污呼,直到可以成功地傳遞它。
消息隊(duì)列目前已經(jīng)逐漸成為企業(yè)IT系統(tǒng)內(nèi)部通信的核心手段之一包竹,可以說(shuō)當(dāng)前絕大部分的大型分布式互聯(lián)網(wǎng)業(yè)務(wù)系統(tǒng)都基于消息隊(duì)列來(lái)構(gòu)建的燕酷。它具有低耦合、可靠投遞周瞎、廣播苗缩、流量控制、最終一致性等一系列的功能声诸,成為異步通信的主要手段之一挤渐。
二、MQ消息隊(duì)列云服務(wù)產(chǎn)品定義
近幾年双絮,隨著云計(jì)算技術(shù)的飛速發(fā)展浴麻,在IAAS產(chǎn)品已經(jīng)相對(duì)成熟后,其他越來(lái)越多的產(chǎn)品也逐步推向了云端(很多中間件產(chǎn)品再用以前l(fā)iences授權(quán)計(jì)費(fèi)的方式已經(jīng)不再受用)囤攀。MQ消息隊(duì)列是中間件產(chǎn)品中比較重要的產(chǎn)品之一软免,其云化方案對(duì)于云計(jì)算平臺(tái)能力的拓展與豐富有著重要的意義。
MQ(Message Queue)消息隊(duì)列云服務(wù)是構(gòu)成云計(jì)算核心能力不可或缺的一項(xiàng)產(chǎn)品焚挠,可以為云端的用戶(hù)提供一種定義未來(lái)云端的應(yīng)用開(kāi)發(fā)和未來(lái)企業(yè)的技術(shù)架構(gòu)方案的新方式膏萧。對(duì)于云端的消息隊(duì)列服務(wù),如果無(wú)法采用傳統(tǒng)的liences授權(quán)方式計(jì)費(fèi)蝌衔,那么它又是如何計(jì)費(fèi)的呢榛泛?今天小編就向大家介紹下消息隊(duì)列中間件這項(xiàng)云服務(wù)在阿里云上是怎么來(lái)計(jì)費(fèi)的。
三噩斟、阿里云MQ消息隊(duì)列云服務(wù)的計(jì)費(fèi)方式
3.1曹锨、兩種主要的消息隊(duì)列云服務(wù)計(jì)費(fèi)模式
目前,阿里云上主要提供如下兩種云化商用版MQ的計(jì)費(fèi)模式:
(1)預(yù)付費(fèi)(包年包月剃允,MQ 鉑金版):即為業(yè)界常說(shuō)的包周期云服務(wù)計(jì)費(fèi)模式沛简,云端客戶(hù)根據(jù)自己的預(yù)算以幾個(gè)月或者一年作為租賃使用周期進(jìn)行預(yù)先付款結(jié)算齐鲤。根據(jù)阿里云官方文檔的說(shuō)明:該種計(jì)費(fèi)方式訂購(gòu)的MQ是:“專(zhuān)享實(shí)例,獨(dú)占物理節(jié)點(diǎn)”椒楣;諸如“專(zhuān)家尊享通道 & 保價(jià)護(hù)航”给郊、“SQL 屬性過(guò)濾”、“數(shù)據(jù)傳輸加密”捧灰、“多路訪問(wèn)方式”淆九、“VPC SingleTunnel 訪問(wèn)”和“消息軌跡”幾個(gè)重要的功能特性方面都比(2)中的按量付費(fèi)版要支持的更加全面和完善一些。其實(shí)毛俏,從性?xún)r(jià)比上面來(lái)說(shuō)更加適合一些土豪級(jí)的企業(yè)級(jí)大客戶(hù)來(lái)用了吩屹。對(duì)于這類(lèi)用戶(hù),可能本身不會(huì)去過(guò)多的研究MQ的一些關(guān)鍵技術(shù)拧抖,可以完全依托于阿里云的MQ產(chǎn)品 & 研發(fā)團(tuán)隊(duì)核心成員直接為自己的云端系統(tǒng)的構(gòu)建煤搜,提供較為全面的MQ技術(shù)支持。
(2)后付費(fèi)(按量計(jì)費(fèi)):即為按量后付費(fèi)的云服務(wù)計(jì)費(fèi)模式唧席,阿里云按照客戶(hù)端的使用情況(一般擦盾,按照“Topic占用時(shí)長(zhǎng)”+“API的調(diào)用次數(shù)”來(lái)計(jì)費(fèi)的,具體的計(jì)費(fèi)方法后面還會(huì)再講)淌哟。各方面的功能都弱于(1)中的預(yù)付費(fèi)版本迹卢。這種方式比較適合對(duì)MQ關(guān)鍵技術(shù)有一定了解的初中級(jí)使用者,完全可以按照自己的需求來(lái)構(gòu)建適合云端業(yè)務(wù)系統(tǒng)的MQ徒仓。
3.2腐碱、阿里云MQ消息隊(duì)列云服務(wù)的計(jì)費(fèi)方法
MQ 費(fèi)用 = API 調(diào)用費(fèi) + Topic 資源占用費(fèi)
API 調(diào)用次數(shù) = 發(fā)送消息 API 調(diào)用次數(shù) + 訂閱消息 API 調(diào)用次數(shù) + 長(zhǎng)輪詢(xún) API 調(diào)用次數(shù)(長(zhǎng)輪詢(xún)說(shuō)明:MQ Consumer 為保證消息實(shí)時(shí)推送而產(chǎn)生的 API 調(diào)用,每個(gè)隊(duì)列 15 秒一次長(zhǎng)輪詢(xún)掉弛,在此期間症见,若隊(duì)列內(nèi)有消息產(chǎn)生,則不計(jì)長(zhǎng)輪詢(xún)次數(shù))殃饿。(摘自阿里云官網(wǎng))
解讀:從上面這段阿里云官網(wǎng)上的計(jì)費(fèi)項(xiàng)目說(shuō)明中谋作,可以得出以下幾點(diǎn)關(guān)鍵信息:
(1)Topic資源占用費(fèi):這部分費(fèi)用可能往往會(huì)被用戶(hù)忽略。使用MQ消息隊(duì)列云服務(wù)的費(fèi)用實(shí)際是包含兩部分的乎芳,也就是說(shuō)像小編一樣雖然沒(méi)有用阿里云的MQ消息隊(duì)列進(jìn)行消息的發(fā)送和消費(fèi)遵蚜,但是因?yàn)閯?chuàng)建并占用著一個(gè)Topic一天(Topic也是MQ消息隊(duì)列資源的一部分),因此也會(huì)對(duì)小編的賬戶(hù)進(jìn)行扣費(fèi)奈惑。所以吭净,這里也提醒各位使用阿里云MQ消息隊(duì)列云服務(wù)的各位童鞋要注意下,對(duì)于自己不用的Topic盡快刪除肴甸,否則也會(huì)產(chǎn)生資費(fèi)寂殉;
(2)API調(diào)用次數(shù):這部分的第一點(diǎn)應(yīng)該比較好理解,對(duì)于MQ消息隊(duì)列的使用(即為消息的發(fā)送和接收)雷滋,需要按照調(diào)用Client端的API發(fā)送消息或者消費(fèi)消息的次數(shù)來(lái)進(jìn)行累計(jì)產(chǎn)生資費(fèi)不撑。但是文兢,對(duì)于第二點(diǎn)沒(méi)有實(shí)際使用過(guò)RocketMQ的童鞋可能不太好理解晤斩。在RocketMQ中焕檬,在Push的消費(fèi)模式中有長(zhǎng)輪詢(xún)機(jī)制,如果Consumer端第一次發(fā)送Pull消息的請(qǐng)求至Broker澳泵,此時(shí)Broker端尚無(wú)可消費(fèi)的消息時(shí)实愚,會(huì)先hold住該P(yáng)ull消息的請(qǐng)求,通過(guò)Broker端的兩個(gè)后臺(tái)線程服務(wù)—PullRequestHoldService和ReputMessageService來(lái)重新嘗試Pull消息和二次處理兔辅。這里腊敲,默認(rèn)長(zhǎng)輪詢(xún)的RPC通信的超時(shí)時(shí)間為30s,而B(niǎo)roker端掛起Pull消息請(qǐng)求的最長(zhǎng)時(shí)間即為15s维苔。從這里來(lái)看碰辅,第一次hold住Pull請(qǐng)求的15s是不計(jì)費(fèi)長(zhǎng)輪詢(xún)次數(shù)的(即為不計(jì)費(fèi)的,小編認(rèn)為因?yàn)閔old住Pull請(qǐng)求是broker端來(lái)完成的本身就不會(huì)帶來(lái)PRC遠(yuǎn)程通信的一次調(diào)用)介时,倘若第二次從consumer端再發(fā)起長(zhǎng)輪詢(xún)請(qǐng)求則會(huì)進(jìn)行計(jì)費(fèi)没宾,小編個(gè)人想想覺(jué)得也合理的,因?yàn)楫吘箷?huì)耗費(fèi)一次RPC的遠(yuǎn)程通信訪問(wèn)沸柔。
這里列出下阿里云MQ消息隊(duì)列云服務(wù)兩種計(jì)費(fèi)項(xiàng)目的列表展示:
從這張阿里云官方的表格上面可以看出循衰,無(wú)論是“按照API調(diào)用次數(shù)計(jì)費(fèi)”還是“按照Topic的資源占用計(jì)費(fèi)”都是采用階梯計(jì)費(fèi)方式『峙欤基本上采用的計(jì)費(fèi)策略是会钝,發(fā)送和消費(fèi)的消息的調(diào)用次數(shù)越多則“每個(gè)Topic每日費(fèi)用”和“每百萬(wàn)次費(fèi)用”越便宜,這個(gè)倒是也符合批量銷(xiāo)售云服務(wù)資源的原則哦工三!
另外迁酸,對(duì)于其中具體的實(shí)現(xiàn),小編大膽地猜測(cè)下阿里云MQ消息隊(duì)列云服務(wù)的Broker端可能是采用類(lèi)似開(kāi)源版本中的Broker狀態(tài)統(tǒng)計(jì)服務(wù)實(shí)現(xiàn)類(lèi)—BrokerStatsManager(內(nèi)部構(gòu)建定時(shí)任務(wù))的方式俭正,來(lái)做到對(duì)Topic占用時(shí)長(zhǎng)和API調(diào)用次數(shù)的匯總統(tǒng)計(jì)胁出,同時(shí)借助RocketMQ本身的store存儲(chǔ)服務(wù)能力來(lái)持久化這些匯總統(tǒng)計(jì)的數(shù)據(jù)log至磁盤(pán)上。不過(guò)段审,這里需要考慮好如何解決Topic中多個(gè)messageQueue消息隊(duì)列分布在不同broker上的數(shù)據(jù)統(tǒng)計(jì)問(wèn)題全蝶。
3.3、阿里云MQ消息隊(duì)列云服務(wù)的計(jì)費(fèi)說(shuō)明
- MQ 后付費(fèi)產(chǎn)品寺枉,每小時(shí)進(jìn)行一次結(jié)算抑淫,每 24 小時(shí)出一次賬單(次日出賬單),費(fèi)用將自動(dòng)從賬戶(hù)余額中扣除姥闪;
- Topic 資源占用費(fèi)按每個(gè) Topic 每日 API 調(diào)用次數(shù)階梯計(jì)費(fèi)始苇,主-主賬號(hào)授權(quán)雙方均正常計(jì)費(fèi),主-子賬號(hào)授權(quán)所有計(jì)費(fèi)歸屬主賬號(hào)筐喳;不再使用的 Topic 請(qǐng)及時(shí)刪除催式,避免產(chǎn)生不必要的費(fèi)用函喉;
- 調(diào)用發(fā)送接收 API 均計(jì)費(fèi),計(jì)量單位為百萬(wàn)次荣月;API 調(diào)用次數(shù)包括長(zhǎng)輪詢(xún) API 的調(diào)用管呵,正常收發(fā)消息時(shí),不會(huì)產(chǎn)生多余長(zhǎng)輪詢(xún) API 調(diào)用哺窄;
- 消息體大小最大限制為 4 MB捐下,每 4 KB 發(fā)布或訂閱數(shù)據(jù)以 1 次請(qǐng)求計(jì)費(fèi)。例如萌业,1 次負(fù)載(發(fā)布或訂閱)為 256 KB 的 API 調(diào)用將以 256/4 次請(qǐng)求計(jì)費(fèi)坷襟;
- 事務(wù)消息發(fā)布請(qǐng)求 1 次按照 50 次計(jì)費(fèi),訂閱按照普通消息計(jì)費(fèi)生年。例如婴程,發(fā)布事務(wù)消息 1 次,訂閱該消息 1 次抱婉,按照 50+1=51 次 API 調(diào)用計(jì)費(fèi)档叔;
- 順序消息發(fā)布請(qǐng)求 1 次按照 25 次計(jì)費(fèi),訂閱請(qǐng)求 1 次按照 25 次計(jì)費(fèi)授段。例如蹲蒲,發(fā)布順序消息 1 次,訂閱該消息 1 次侵贵,按照 25+25=50 次 API 調(diào)用計(jì)費(fèi)届搁;
- 定時(shí)消息發(fā)布請(qǐng)求一次按照 25 次計(jì)費(fèi),訂閱按照普通消息計(jì)費(fèi)窍育。例如卡睦,發(fā)布定時(shí)消息 1 次,訂閱該消息1 次漱抓,按照 25+1=26 次 API 調(diào)用計(jì)費(fèi)表锻;(摘自阿里云官網(wǎng))
對(duì)于上面的計(jì)費(fèi)說(shuō)明,從中可以看出關(guān)鍵信息有如下幾點(diǎn):
(1)阿里云MQ消息隊(duì)列云服務(wù)是支持ACL權(quán)限分配的乞娄,可以將主賬號(hào)創(chuàng)建的Topic分配給子帳號(hào)使用瞬逊,子帳號(hào)產(chǎn)生的計(jì)費(fèi)將會(huì)算到主賬號(hào)上;
(2)MQ的后付費(fèi)產(chǎn)品的結(jié)算方式應(yīng)該是采用了根據(jù)出MQ云服務(wù)資源計(jì)量文件以后次日(T+1日來(lái)根據(jù)資源計(jì)量文件生成賬單從賬戶(hù)扣費(fèi))仪或,這種方式就會(huì)存在余額不足的小風(fēng)險(xiǎn)(ps:欠費(fèi)72小時(shí)后阿里云會(huì)自動(dòng)清理該用戶(hù)下面的Topic及其未消費(fèi)而積壓的存量消息)确镊;
(3)計(jì)費(fèi)中比較關(guān)鍵的一點(diǎn)是“每 4 KB 發(fā)布或訂閱數(shù)據(jù)以 1 次請(qǐng)求計(jì)費(fèi)”,小編認(rèn)為這一點(diǎn)倒也合乎情理范删,消息發(fā)送或者接收本質(zhì)上來(lái)說(shuō)是一次RPC通信(基于TCP連接)蕾域,那么按照消息大小來(lái)合理設(shè)置請(qǐng)求計(jì)費(fèi)次數(shù),即為對(duì)占用TCP帶寬大小和吞吐量的計(jì)費(fèi)到旦。這一點(diǎn)在用戶(hù)使用時(shí)候可能會(huì)忽略旨巷;
(4)事務(wù)消息巨缘、順序消息和定時(shí)消息均比普通消息的計(jì)費(fèi)價(jià)格來(lái)得更貴更高,所以使用的童鞋要好好考慮下發(fā)送和訂閱這三類(lèi)消息產(chǎn)生的資費(fèi)問(wèn)題采呐;
四若锁、總結(jié)
本文主要根據(jù)自己在阿里云上使用MQ消息隊(duì)列云服務(wù)的一些經(jīng)驗(yàn)展開(kāi)敘述,從技術(shù)開(kāi)發(fā)者的視角來(lái)看MQ消息隊(duì)列云服務(wù)的產(chǎn)品概念和定義懈万,并對(duì)阿里云MQ消息隊(duì)列云服務(wù)的計(jì)費(fèi)模式和方法進(jìn)行深入分析拴清。限于筆者的才疏學(xué)淺靶病,對(duì)本文內(nèi)容可能還有理解不到位的地方会通,如有闡述不合理之處還望留言一起探討。