近日,在 ApacheCon 2019 上,騰訊開(kāi)源管理委員會(huì)委員、騰訊開(kāi)源聯(lián)盟主席、Apache 軟件基金會(huì) Member 堵俊平介紹了騰訊開(kāi)源路線圖,宣布騰訊萬(wàn)億級(jí)分布式消息中間件 TubeMQ 正式對(duì)外開(kāi)源,并計(jì)劃捐贈(zèng)給 Apache 基金會(huì)。
▲ 騰訊開(kāi)源路線圖
TubeMQ 的原型是騰訊數(shù)據(jù)平臺(tái)部在2013年自研的分布式消息中間件系統(tǒng)(MQ),專注于大數(shù)據(jù)場(chǎng)景下海量數(shù)據(jù)的高性能存儲(chǔ)和傳輸,長(zhǎng)期服務(wù)微信支付、騰訊視頻、廣點(diǎn)通等產(chǎn)品。
▲ TubeMQ 項(xiàng)目介紹
TubeMQ 主要特性:
- 純 Java 語(yǔ)言實(shí)現(xiàn)
- 引入 Master 協(xié)調(diào)節(jié)點(diǎn):相比 Kafka 依賴于 Zookeeper 完成元數(shù)據(jù)的管理和實(shí)現(xiàn) HA 保障不同,TubeMQ 系統(tǒng)采用的是自管理的元數(shù)據(jù)仲裁機(jī)制方式進(jìn)行,Master 節(jié)點(diǎn)通過(guò)采用內(nèi)嵌數(shù)據(jù)庫(kù) BDB 完成集群內(nèi)元數(shù)據(jù)的存儲(chǔ)、更新以及 HA 熱切功能,負(fù)責(zé) TubeMQ 集群的運(yùn)行管控和配置管理操作,對(duì)外提供接口等;通過(guò) Master 節(jié)點(diǎn),TubeMQ 集群里的 Broker 配置設(shè)置、變更及查詢實(shí)現(xiàn)了完整的自動(dòng)化閉環(huán)管理,減輕了系統(tǒng)維護(hù)的復(fù)雜度
- 服務(wù)器側(cè)消費(fèi)負(fù)載均衡:TubeMQ 采用的是服務(wù)側(cè)負(fù)載均衡的方案,而不是客戶端側(cè)操作,提升系統(tǒng)的管控能力同時(shí)簡(jiǎn)化客戶端實(shí)現(xiàn),更便于均衡算法升級(jí)
- 系統(tǒng)行級(jí)鎖操作:對(duì)于 Broker 消息讀寫(xiě)中存在中間狀態(tài)的并發(fā)操作采用行級(jí)鎖,避免重復(fù)問(wèn)題
- Offset 管理調(diào)整:Offset 由各個(gè) Broker 獨(dú)自管理,ZK 只作數(shù)據(jù)持久化存儲(chǔ)用(最初考慮完全去掉ZK依賴,考慮到后續(xù)的功能擴(kuò)展就暫時(shí)保留)
- 消息讀取機(jī)制的改進(jìn):TubeMQ 采用的是消息隨機(jī)讀取模式,同時(shí)為了降低消息時(shí)延又增加了內(nèi)存緩存讀寫(xiě),對(duì)于帶 SSD 設(shè)備的機(jī)器,增加消息滯后轉(zhuǎn) SSD 消費(fèi)的處理,解決消費(fèi)嚴(yán)重滯后時(shí)吞吐量下降以及 SSD 磁盤(pán)容量小、刷盤(pán)次數(shù)有限的問(wèn)題,使其滿足業(yè)務(wù)快速生產(chǎn)消費(fèi)的需求
- 消費(fèi)者行為管控:支持通過(guò)策略實(shí)時(shí)動(dòng)態(tài)地控制系統(tǒng)接入的消費(fèi)者行為,包括系統(tǒng)負(fù)載高時(shí)對(duì)特定業(yè)務(wù)的限流、暫停消費(fèi),動(dòng)態(tài)調(diào)整數(shù)據(jù)拉取的頻率等;
- 服務(wù)分級(jí)管控:針對(duì)系統(tǒng)運(yùn)維、業(yè)務(wù)特點(diǎn)、機(jī)器負(fù)載狀態(tài)的不同需求,系統(tǒng)支持運(yùn)維通過(guò)策略來(lái)動(dòng)態(tài)控制不同消費(fèi)者的消費(fèi)行為,比如是否有權(quán)限消費(fèi)、消費(fèi)時(shí)延分級(jí)保證、消費(fèi)限流控制,以及數(shù)據(jù)拉取頻率控制等
- 系統(tǒng)安全管控:根據(jù)業(yè)務(wù)不同的數(shù)據(jù)服務(wù)需要,以及系統(tǒng)運(yùn)維安全的考慮,TubeMQ 系統(tǒng)增加了 TLS 傳輸層加密管道,生產(chǎn)和消費(fèi)服務(wù)的認(rèn)證、授權(quán),以及針對(duì)分布式訪問(wèn)控制的訪問(wèn)令牌管理,滿足業(yè)務(wù)和系統(tǒng)運(yùn)維在系統(tǒng)安全方面的需求
- 資源利用率提升改進(jìn):相比于 Kafka,TubeMQ 采用連接復(fù)用模式,減少連接資源消耗;通過(guò)邏輯分區(qū)構(gòu)造,減少系統(tǒng)對(duì)文件句柄數(shù)的占用,通過(guò)服務(wù)器端過(guò)濾模式,減少網(wǎng)絡(luò)帶寬資源使用率;通過(guò)剝離對(duì) Zookeeper 的使用,減少 Zookeeper 的強(qiáng)依賴及瓶頸限制
- 客戶端改進(jìn):基于業(yè)務(wù)使用上的便利性以,我們簡(jiǎn)化了客戶端邏輯,使其做到最小的功能集合,我們采用基于響應(yīng)消息的接收質(zhì)量統(tǒng)計(jì)算法來(lái)自動(dòng)剔出壞的 Broker 節(jié)點(diǎn),基于首次使用時(shí)作連接嘗試來(lái)避免大數(shù)據(jù)量發(fā)送時(shí)發(fā)送受阻
堵俊平介紹,騰訊每天要處理規(guī)模驚人的數(shù)據(jù)。為支持海量業(yè)務(wù),騰訊組建了包含存儲(chǔ)層、數(shù)據(jù)管理層及分析層 3 層結(jié)構(gòu)的數(shù)據(jù)湖協(xié)同方案,向下管理多種數(shù)據(jù)引擎,向上支撐多種數(shù)據(jù)應(yīng)用需求。TubeMQ 就是來(lái)源于騰訊數(shù)據(jù)湖存儲(chǔ)層的消息中間件系統(tǒng),支撐著海量數(shù)據(jù)的流入和運(yùn)轉(zhuǎn)。經(jīng)過(guò)近7年、萬(wàn)億規(guī)模的海量數(shù)據(jù)沉淀,TubeMQ 目前日均接入量超過(guò) 25 萬(wàn)億條消息。
▲ 騰訊數(shù)據(jù)湖方案,其絕大多數(shù)組件由 Apache 的開(kāi)源項(xiàng)目組成
堵俊平介紹到,騰訊計(jì)劃將 TubeMQ 捐贈(zèng)給 Apache 基金會(huì),目前已經(jīng)啟動(dòng)了相關(guān)的孵化流程。
【責(zé)任編輯:張燕妮 TEL:(010)68476606】