隨著企業(yè)對IT精益運(yùn)營要求的提高,DevOps概念日漸火爆。調(diào)查顯示,2016年,38%的企業(yè)已經(jīng)在使用DevOps, 2017年超過70%的IT市場會將目光聚焦在DevOps技術(shù)及功能上。
企業(yè)若想實施DevOps離不開近幾年最為火爆的技術(shù)之一Docker, 該技術(shù)的應(yīng)用能為運(yùn)維人員提供了良好的開發(fā)及應(yīng)用環(huán)境,還能夠提供資源;而對開發(fā)者,Docker足夠簡單,便于開發(fā)人員調(diào)用硬件資源、構(gòu)建環(huán)境及配置資源。
美團(tuán)云從2015年開始構(gòu)建Docker容器集群管理系統(tǒng),提供對Docker容器的實例化、調(diào)度、運(yùn)行、監(jiān)控以及鏡像托管等功能。兩年的實戰(zhàn)驗證了Docker容器虛擬化技術(shù)在提高運(yùn)維效率,降低IT成本等方面的價值。近日,美團(tuán)云技術(shù)團(tuán)隊與金融科技企業(yè)買單俠的技術(shù)專家就Docker的應(yīng)用進(jìn)行了分享交流。
美團(tuán)云計算研發(fā)負(fù)責(zé)人鞏向鋒在買單俠做技術(shù)分享
為何開發(fā)容器管理平臺
作為國內(nèi)最大的生活服務(wù)電商平臺,美團(tuán)點評為超6億用戶、450萬商家提供多樣化的服務(wù),因自身業(yè)務(wù)屬性,美團(tuán)點評每天都面臨周期性、突發(fā)性流量高并發(fā)的挑戰(zhàn)。因此,美團(tuán)點評于2013年將業(yè)務(wù)全部遷移上云。
即便在上云及自動化運(yùn)維方面走在行業(yè)前列,在構(gòu)建容器平臺之前,美團(tuán)點評仍必須事先基于虛擬機(jī)進(jìn)行手動擴(kuò)容,提前為業(yè)務(wù)線預(yù)留大量資源,方能保證業(yè)務(wù)高峰期平穩(wěn)度過,其效率很低,資源浪費(fèi)也較嚴(yán)重。
為了解決以上問題,美團(tuán)云從2015年開始引入Docker,結(jié)合集團(tuán)的業(yè)務(wù)需求,基于美團(tuán)云現(xiàn)有架構(gòu)和組件,實踐出一條自研Docker容器管理平臺之路。平臺在多個緯度封裝了業(yè)務(wù)需要的資源,簡化了業(yè)務(wù)和資源平臺的交互,在業(yè)務(wù)有大規(guī)模需求的時候能自動化部署,彈性伸縮,不但指數(shù)級的提高了效率,還大量地節(jié)約了成本。
容器管理平臺的架構(gòu)設(shè)計
美團(tuán)云將容器管理平臺視作一種云計算模式,云計算的架構(gòu)同樣適用于容器。云平臺的大部分組件可以直接復(fù)用或者經(jīng)過少量擴(kuò)展開發(fā)。
美團(tuán)點評容器管理平臺架構(gòu)
可以看出,容器平臺整體架構(gòu)與美團(tuán)云基本一致,自上而下分為業(yè)務(wù)層、PaaS層、IaaS控制層及宿主機(jī)資源層。
業(yè)務(wù)層:美團(tuán)點評使用容器的業(yè)務(wù)線,是容器平臺的最終用戶。
PaaS層:使用容器平臺的HTTP API,完成容器的編排、部署、彈性伸縮、監(jiān)控、服務(wù)治理等功能,對上面的業(yè)務(wù)層通過HTTP API或者Web的方式提供服務(wù)。
IaaS控制層:提供容器平臺的API處理、調(diào)度、網(wǎng)絡(luò)、用戶鑒權(quán)、鏡像倉庫等管理功能,對PaaS提供HTTP API接口。
宿主機(jī)資源層:Docker宿主機(jī)集群由多個機(jī)房數(shù)百個節(jié)點組成。每個節(jié)點部署HostServer、Docker、監(jiān)控數(shù)據(jù)采集模塊,Volume管理模塊,OVS網(wǎng)絡(luò)管理模塊,Cgroup管理模塊等。
據(jù)介紹,容器平臺中的絕大部分組件是基于美團(tuán)云已有組件擴(kuò)展開發(fā)的,例如API,鏡像倉庫、平臺控制器、HostServer、網(wǎng)絡(luò)管理模塊等。
高性能、高彈性的容器網(wǎng)絡(luò)
一個好的網(wǎng)絡(luò)架構(gòu),需要有高網(wǎng)絡(luò)傳輸性能、高彈性、多租戶隔離、支持軟件定義網(wǎng)絡(luò)配置等多方面的能力。從容器集群系統(tǒng)來看,只有單宿主機(jī)的網(wǎng)絡(luò)接入是遠(yuǎn)遠(yuǎn)不夠的,網(wǎng)絡(luò)還需要提供跨宿主機(jī)、機(jī)架和機(jī)房的能力。從這個需求出發(fā)Docker和虛擬機(jī)共通,沒有明顯的差異?;谠摾砟?,美團(tuán)點評容器平臺在網(wǎng)絡(luò)方面復(fù)用了美團(tuán)云網(wǎng)絡(luò)基礎(chǔ)架構(gòu)和組件。
美團(tuán)點評容器平臺網(wǎng)絡(luò)架構(gòu)
數(shù)據(jù)平面: 美團(tuán)云采用萬兆網(wǎng)卡,結(jié)合OVS-DPDK方案,并進(jìn)一步優(yōu)化單流的轉(zhuǎn)發(fā)性能,將幾個CPU核綁定給OVS-DPDK轉(zhuǎn)發(fā)使用,只需要少量的計算資源即可提供萬兆的數(shù)據(jù)轉(zhuǎn)發(fā)能力。OVS-DPDK和容器所使用的CPU完全隔離,因此也不影響用戶的計算資源。
控制平面: 美團(tuán)云使用OVS方案。該方案是在每個宿主機(jī)上部署一個自研的軟件Controller,動態(tài)接收網(wǎng)絡(luò)服務(wù)下發(fā)的網(wǎng)絡(luò)規(guī)則,并將規(guī)則進(jìn)一步下發(fā)至OVS流表,決定是否對某網(wǎng)絡(luò)流放行。
美團(tuán)云還基于Libnetwork開發(fā)了MosBridge ——適配美團(tuán)云網(wǎng)絡(luò)架構(gòu)的Docker網(wǎng)絡(luò)驅(qū)動。在創(chuàng)建容器時,需要指定容器創(chuàng)建參數(shù)并將IP地址、網(wǎng)關(guān)、OVS Bridge等參數(shù)傳給Docker,由MosBridge完成網(wǎng)絡(luò)的配置過程。有了MosBridge,容器創(chuàng)建啟動后便有了網(wǎng)絡(luò)可以使用。容器的網(wǎng)絡(luò)配置也持久化在MosBridge中,容器重啟后網(wǎng)絡(luò)配置也不會丟失。更重要的是,MosBridge使Host-SRV和Docker充分解耦,讓網(wǎng)絡(luò)功能的升級更加方便。
穩(wěn)定、高可用的解決方案:MosDocker
Docker社區(qū)十分火熱,版本更新頻繁,且每次更新都會伴隨大量的代碼重構(gòu),不可避免地會引入新的Bug, 其穩(wěn)定性很難滿足生產(chǎn)場景的要求。因此有必要維護(hù)一個相對穩(wěn)定的版本,如果發(fā)現(xiàn)Bug, 可以在此版本基礎(chǔ)上,通過自研或者采用社區(qū)的BugFix來修復(fù)。
美團(tuán)點評業(yè)務(wù)的一些需求來自于公司的生產(chǎn)環(huán)境,而不屬于業(yè)界通用的需求,因此除了穩(wěn)定性的需求之外,美團(tuán)云還需要開發(fā)一些功能來滿足美團(tuán)點評自身業(yè)務(wù)的需求。對于這類需求,開源社區(qū)通常不會考慮。美團(tuán)云作為公司基礎(chǔ)服務(wù)團(tuán)隊則必須通過技術(shù)開發(fā)來滿足該需求。
基于以上考慮,美團(tuán)云從Docker 1.11版本開始,自研維護(hù)一個分支,稱之為MosDocker。MosDocker自研的特性主要有:MosBridge支持美團(tuán)云網(wǎng)絡(luò)架構(gòu)的網(wǎng)絡(luò)驅(qū)動,基于此特性實現(xiàn)容器多IP,VPC等網(wǎng)絡(luò)功能;Cgroup持久化,擴(kuò)展Docker Update接口,可以使更多的CGroup配置持久化在容器中,保證容器重啟后CGroup配置不丟失;支持子鏡像的Docker Save,可以大幅度提高Docker鏡像的上傳、下載速度。
維護(hù)MosDocker使美團(tuán)云可以將Docker穩(wěn)定性逐漸控制在自己手里,并且可以按照公司業(yè)務(wù)的需求做定制開發(fā)。
Docker推動美團(tuán)點評DevOps落地
目前,美團(tuán)云容器平臺已經(jīng)接入了美團(tuán)點評多個大型業(yè)務(wù)部門,讓業(yè)務(wù)的機(jī)器申請、部署、業(yè)務(wù)發(fā)布一步完成,業(yè)務(wù)擴(kuò)容從原來的小時級縮減為秒級,極大地提高了業(yè)務(wù)的彈性能力,以應(yīng)對突發(fā)業(yè)務(wù)高峰。
此外,Docker計算效率更高,加之高彈性使得業(yè)務(wù)部門不必預(yù)留大量的資源,節(jié)省了硬件投資。而Docker的在線擴(kuò)容能力,能夠保障服務(wù)不中斷。例如,數(shù)據(jù)庫和緩存在運(yùn)行時常常需調(diào)整CPU、內(nèi)存和磁盤,在接入容器平臺之前,調(diào)整配置需要重啟虛擬機(jī),業(yè)務(wù)的可用性不可避免地被中斷。而Docker對CPU、內(nèi)存等資源管理是通過Linux的CGroup實現(xiàn)的,調(diào)整配置只需要修改容器的CGroup參數(shù),不必重啟容器。
基于美團(tuán)云計算平臺構(gòu)建的Docker容器管理平臺讓美團(tuán)點評的研發(fā)和運(yùn)維人員通過自動化流程加強(qiáng)協(xié)作,加速落地了美團(tuán)點評DevOps的實施,在面對日訂單超1800萬的業(yè)務(wù)壓力時,為公司提升了IT運(yùn)營效率并節(jié)省大量資源,真正實現(xiàn)了精細(xì)化運(yùn)營。
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!