
圖五 容器化
DCP對(duì)業(yè)務(wù)層提供了十分標(biāo)準(zhǔn)的基礎(chǔ)運(yùn)行環(huán)境。底層選用ECS的CentOS7.1.1503的鏡像,在此之上是Docker的Devicemapper-direct-lvm文件承接系統(tǒng),版本選擇是Docker 1.6.2版本。中間層是調(diào)度框架的實(shí)現(xiàn),使用的是Mesos 0.25和Swarm 1.0.0版本,以及一些容器級(jí)別的監(jiān)控,如貢獻(xiàn)給開源社區(qū)的cAdvisor 0.7.1.fix。PHP和Java對(duì)應(yīng)不同的后端應(yīng)用,微博的核心Feed、用戶關(guān)系等基礎(chǔ)服務(wù)都是用Java實(shí)現(xiàn),偏業(yè)務(wù)性的系統(tǒng)是用PHP來實(shí)現(xiàn)。對(duì)應(yīng)于Java和PHP的Docker體系是一致的,只是其中使用的版本不同,在Docker 1.3.2版本中需要兼容一些離線計(jì)算平臺(tái)。目前Java和PHP底層運(yùn)行環(huán)境已經(jīng)實(shí)現(xiàn)歸一化。

圖六 初始化
有了容器化的無差異運(yùn)行環(huán)境之后,在阿里云上分鐘級(jí)完成上千個(gè)計(jì)算節(jié)點(diǎn)的彈性擴(kuò)容還需要進(jìn)行性能優(yōu)化。首先各Stage盡可能并行化,目前可實(shí)現(xiàn)4分鐘內(nèi)初始化上百臺(tái)能力。同時(shí)通過Ansible的Callback機(jī)制,把耗時(shí)操作異步化。此外,使用Ansible自動(dòng)伸縮功能,根據(jù)初始化需求規(guī)模自動(dòng)伸縮,可支持分鐘內(nèi)千萬級(jí)別初始化能力。

圖七 鏡像分發(fā)
在Docker環(huán)境和云服務(wù)器計(jì)算資源準(zhǔn)備充分之后,之后的工作就是將業(yè)務(wù)鏡像進(jìn)行快速部署。由于單個(gè)鏡像的大小在GB級(jí)別,如果采用動(dòng)態(tài)拉取的方式,需要幾百臺(tái)云服務(wù)器專門做這個(gè)任務(wù),大大增加了擴(kuò)容成本。
微博將整個(gè)鏡像進(jìn)行分層,不變基礎(chǔ)鏡像放到云服務(wù)鏡像環(huán)境里面,通過本地Load方式實(shí)現(xiàn)鏡像的加載,大大減少了鏡像分發(fā)的帶寬需求,同時(shí)速度也有一定的提升;另外的一種操作就是反向緩存,突然之間在公有云上大規(guī)模彈性擴(kuò)容時(shí)會(huì)面臨冷啟動(dòng)的問題,即公有云上不存在相應(yīng)的業(yè)務(wù)鏡像,拉去業(yè)務(wù)變更的鏡像會(huì)占用大量專線帶寬。為了應(yīng)對(duì)這種情況,在公有云上常態(tài)化部署對(duì)專有云Registry反向緩存,對(duì)專有云Registry內(nèi)部變更和推送、配置都會(huì)同步到公有云的反向緩存節(jié)點(diǎn)上。此外也實(shí)現(xiàn)分發(fā)網(wǎng)絡(luò)可自動(dòng)伸縮。未來應(yīng)對(duì)超過千萬級(jí)別規(guī)模,微博正在嘗試采用P2P進(jìn)行分發(fā)。

圖八 混合云網(wǎng)絡(luò)架構(gòu)
在混合云中,最核心的就是整個(gè)網(wǎng)絡(luò)架構(gòu)。打通公有云和私有云時(shí),網(wǎng)絡(luò)環(huán)境、IP規(guī)劃等問題都應(yīng)該慎重考慮。目前微博采用阿里云的專有網(wǎng)絡(luò)服務(wù),構(gòu)建公有云與專有云一致的網(wǎng)絡(luò)環(huán)境。另外,采用多專線確保網(wǎng)絡(luò)高可用。路由方面,通過在核心交換上配置路由轉(zhuǎn)發(fā)規(guī)則,采用就近原則,最大程度減少路由跳數(shù),保證網(wǎng)絡(luò)低延遲,當(dāng)網(wǎng)絡(luò)故障時(shí),自動(dòng)啟動(dòng)備份路由。
同時(shí)基于原有的帶寬監(jiān)控,實(shí)現(xiàn)跨云專線監(jiān)控,細(xì)化到IP級(jí)別,根據(jù)每臺(tái)云服務(wù)器的IP自動(dòng)匯聚到對(duì)應(yīng)的產(chǎn)品線,監(jiān)控其整體帶寬消耗情況,確保各個(gè)業(yè)務(wù)產(chǎn)品線實(shí)際單寬占用不會(huì)影響。
彈性調(diào)度
不可變基礎(chǔ)設(shè)施的部署完成后,就已經(jīng)具備了在公有云上創(chuàng)建大規(guī)模 云服務(wù)器 計(jì)算節(jié)點(diǎn)的能力。接下來面臨的問題就是如何將業(yè)務(wù)合理調(diào)度到計(jì)算節(jié)點(diǎn)上。

圖九 業(yè)務(wù)跨云彈性調(diào)度
跨云業(yè)務(wù)部署時(shí),應(yīng)該使得業(yè)務(wù)以最小規(guī)模部署,在公有云上通過預(yù)付費(fèi)方式,常態(tài)化部署業(yè)務(wù)的最小規(guī)模,并提供在線服務(wù)。另外應(yīng)該盡量減少跨云專線的調(diào)用,保持帶寬在可控范圍之內(nèi),需要將業(yè)務(wù)后端資源Memory Cache等Loacl化,減少跨專線請(qǐng)求;一旦發(fā)生跨專線請(qǐng)求時(shí),需要開啟一些流量壓縮的協(xié)議。同時(shí),微博內(nèi)部通過WMB緩存數(shù)據(jù)雙向同步機(jī)制,基于消息分發(fā)策略,在專有云內(nèi)部對(duì)緩存的讀寫以消息的方式同步到公有云的緩存上,延遲一般在毫秒級(jí),同時(shí)在專線出現(xiàn)異常時(shí),消息不會(huì)丟失,做到高可用。
