基于Docker的京東大數(shù)據(jù)實時計算平臺
JRC用戶需求多樣復(fù)雜,用戶要求的資源配置也大小不一,系統(tǒng)更新部署步驟繁瑣,人工操作亦有極大的安全風(fēng)險,與此同時,用戶的資源需求也越來越多,大集群支持、資源節(jié)省亦是我們應(yīng)該重點關(guān)注的問題。
本文就來介紹一種我們京東為了解決上述問題而研發(fā)的基于docker的實時計算平臺。
現(xiàn)狀以及問題
storm集群結(jié)構(gòu):
storm拓撲結(jié)構(gòu):
storm瓶頸
從storm架構(gòu)圖可以看出,storm整個集群對zookeeper的依賴非常大,無論是拓撲配置、分配信息、心跳、錯誤信息,均存儲在zookeeper中,而nimbus每次分配、更新任務(wù),均需要從zookeeper中獲取這些信息,因此nimbus的壓力非常大,特別是當(dāng)單集群worker使用量超過5000時,每次分配、更新任務(wù)所耗的時間經(jīng)常需要幾分鐘,其中特別是worker心跳對zookeeper所造成的壓力影響最甚。
眾所周知,京東業(yè)務(wù)廣泛,對實時計算的需求也很大,對應(yīng)所要求的集群規(guī)模也不可能小,因此京東對于上述這些問題也必須做出改變以適應(yīng)自身業(yè)務(wù)的發(fā)展,其中***的改變即是對拓撲應(yīng)用結(jié)構(gòu)的改變,增設(shè)了TopologyMaster角色,把metrics、心跳、背壓等信息均由TopologyMaster處理,大大減輕了nimbus及zookeeper壓力,當(dāng)然啦,還有很多很多很不錯的改動,但這不是本文的重點,就不在此累贅了。改變后的拓撲結(jié)構(gòu)為
為響應(yīng)京東集群資源上云號召,京東實時計算平臺雖然解決了大集群、資源隔離等用戶或集群所面臨的重要問題,但若直接把整個storm照搬上彈性云平臺虛擬機使用,則無法滿足資源隔離需求,屆時,集群用戶任務(wù)之間的相互影響很可能帶來各種不可預(yù)見的問題,因此我們必需對storm底層進行一次完整的改造。
技術(shù)架構(gòu)實現(xiàn)
如圖所示,我們將Storm的Nimbus功能進行拆分,將拓撲的主要管理職能交給TopologyMaster,改造后的storm在我們內(nèi)部稱之為Mars,意寓發(fā)現(xiàn)新大陸。
Mars主要有以下幾個特性。
1.二級調(diào)度
改造后的Nimbus只需管理TopologyMaster的調(diào)度,其它如UI訪問、命令下發(fā)、拓撲更新、分配、背壓、metrics、心跳等,均由TopologyMaster負責(zé)處理,真正實現(xiàn)了完整意義上的二級調(diào)度。
2.資源隔離
改造后每個docker實例下只有一個supervisor,并且每個supervisor里只用一個worker,通過每個docker一個worker來進行worker級別的資源隔離。此外,我們引入了組的概念,不用用戶申請的資源也可以統(tǒng)一放到一個組上,一個任務(wù)只能運行在一個組內(nèi),并通過產(chǎn)品化來引入權(quán)限管理,以此保證不同用戶申請的資源不會被他人占用。
3.全高可用(High Availability)
基礎(chǔ)進程HA
我們在每個docker實例里內(nèi)置一個管理進程mars admin,并配置crontab每分鐘檢測mars admin進程狀態(tài),保證mars admin發(fā)生異常后自動重啟。Mars admin管理著supervisor進程、進行日志服務(wù)的doctor進程、抓取日志的bee進程,這些進程的啟停與更新由mars admin來執(zhí)行,保障每個docker實例里的基礎(chǔ)進程的HA。
Nimbus HA
我們通過Zookeeper來實現(xiàn)Active-Standby模式的nimbus ha,由于改造后nimbus的工作內(nèi)容很少,因此單機執(zhí)行完全足夠滿足需求。
TopologyMaster HA
TopologyMaster會定期與Nimbus進行心跳交互,若Nimbus檢測到TM心跳超時,則會重新調(diào)起一個新的TM,新的TM會將自身信息寫入Zookeeper中,其它Container與Supervisor將通過Zookeeper來識別到新的TM,從而保障TM的HA。
Container/Worker HA
Container會定期與TM進行交互,若TM檢測到Container心跳超時,則會重新從資源池里調(diào)起一個新的Container接管原來失效Container的任務(wù),并把新的任務(wù)分配寫入Zookeeper中,以便其它Container識別新的Container的位置,從而保障Container的HA。
4.自動部署
由于一個docker一個worker,而一個docker實例可以理解為一個虛擬機,用戶資源申請具有隨機性、配置個性化等特點,因此對我們配置管理上必需具有自適應(yīng)性。對此我們通過提供一個特殊鏡像,通過產(chǎn)品化把JRC與云平臺資源申請打通,并把資源配置、包部署等功能產(chǎn)品化,以達到自動部署的目的。
總結(jié)
基于docker的實時計算平臺是京東自行研發(fā)的全新的、自動化的實時計算平臺,它基于storm理念,通過重新設(shè)計整個底層架構(gòu)及運行邏輯,并添加背壓、壓縮、限速、監(jiān)控、日志等輔助功能,經(jīng)過產(chǎn)品化并與彈性云平臺打通,達到了用戶申請即可用、配置個性化、大規(guī)模集群的要求,操作高效且自動化。
36大數(shù)據(jù)(www.36dsj.com)成立于2013年5月,是中國訪問量***的大數(shù)據(jù)網(wǎng)站。36大數(shù)據(jù)(微信號:dashuju36)以獨立第三方的角度,為大數(shù)據(jù)產(chǎn)業(yè)生態(tài)圖譜上的需求商 、應(yīng)用商、服務(wù)商、技術(shù)解決商等相關(guān)公司及從業(yè)人員提供全球資訊、商機、案例、技術(shù)教程、項目對接、創(chuàng)業(yè)投資及專訪報道等服務(wù)。