邱紅飛,黃春光
(中國電信股份有限公司廣東研究院,廣州510360)
按照云計(jì)算的服務(wù)模型劃分,云計(jì)算可分為軟件即服務(wù)(SaaS)、平臺(tái)即服務(wù)(PaaS)、基礎(chǔ)設(shè)施即服務(wù)(IaaS)。目前,在IaaS層上的虛擬機(jī)技術(shù)是最主流的虛擬化技術(shù),它實(shí)現(xiàn)了極高的隔離度和標(biāo)準(zhǔn)化,但是虛擬機(jī)占用了宿主機(jī)的資源,同時(shí)虛擬機(jī)本身的啟動(dòng)速度比較緩慢。隨著云平臺(tái)研究的進(jìn)展,PaaS層和IaaS層日趨融合,其核心價(jià)值為加速應(yīng)用、彈性伸縮、動(dòng)態(tài)編排、高效運(yùn)維,代表性的是容器技術(shù)的推廣應(yīng)用。容器也是一種虛擬化技術(shù),Docker容器引擎及其上的容器管理平臺(tái)使得云平臺(tái)構(gòu)建簡單高效,容器相關(guān)技術(shù)的優(yōu)勢主要體現(xiàn)在下列四個(gè)方面。
在傳統(tǒng)的基礎(chǔ)設(shè)施環(huán)境下,容易造成應(yīng)用打包的依賴關(guān)系遺漏以及開發(fā)測試環(huán)境不一致問題。通過容器鏡像方式,可以把鏡像分成基礎(chǔ)鏡像包、應(yīng)用鏡像包、鏡像庫等層次,再通過dockerfile構(gòu)建鏡像包,最后發(fā)布鏡像包之后,保持了開發(fā)和測試環(huán)境一致性的部署。
在傳統(tǒng)虛擬機(jī)環(huán)境下,IaaS雖然通過虛擬機(jī)的技術(shù)實(shí)現(xiàn)物理資源的池化,但往往還是靜態(tài)獨(dú)占資源,并不能很好的解決共享和資源利用率的問題。容器管理平臺(tái)能夠跟IaaS層對接,屏蔽直接對IaaS資源的獲取,通過容器應(yīng)用按需的方式,進(jìn)一步加大平臺(tái)資源的使用率;同時(shí)容器具備資源隔離的能力,可以提高應(yīng)用在宿主機(jī)上的部署密度,提升資源利用率。
在傳統(tǒng)虛擬機(jī)環(huán)境下,在流量快速上升和下降時(shí),短時(shí)間內(nèi)完成應(yīng)用的擴(kuò)容和收縮都是很困難的事情。容器管理平臺(tái)可以滿足業(yè)務(wù)突發(fā)高峰時(shí)應(yīng)用的處理能力要求,實(shí)現(xiàn)對業(yè)務(wù)動(dòng)態(tài)變化的敏捷響應(yīng)。容器管理平臺(tái)有很強(qiáng)的彈性,支持手動(dòng)和自動(dòng)的擴(kuò)容方式,自動(dòng)方式可以根據(jù)設(shè)定的動(dòng)態(tài)伸縮指標(biāo),完成應(yīng)用的快速擴(kuò)容和縮減。
傳統(tǒng)模式下應(yīng)用軟件的升級,除了應(yīng)用軟件本身的升級,還會(huì)包含依賴軟件包的升級。由于依賴關(guān)系的復(fù)雜性,所以在傳統(tǒng)的環(huán)境下回滾一般比較困難。通過使用容器技術(shù),應(yīng)用軟件升級時(shí),制作一個(gè)新的容器鏡像,升級過程就是先部署一個(gè)新的容器,然后停掉舊的容器,再啟動(dòng)新容器?;貪L過程就是把新的容器停掉,啟動(dòng)舊的容器,整個(gè)過程相對簡單。
本文旨在研究電信企業(yè)容器管理平臺(tái)的測試方法,包括性能、可擴(kuò)展性、高可用性、可移植性等技術(shù)指標(biāo),從而真正建立一套完整的容器管理平臺(tái)的測試標(biāo)準(zhǔn),為企業(yè)內(nèi)選型和采購提供依據(jù)。
利用應(yīng)用容器引擎,開發(fā)者可以打包應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到電信的應(yīng)用Linux服務(wù)器上,容器使用沙箱機(jī)制,相互之間沒有接口。容器運(yùn)行后幾乎沒有性能開銷,可以很容易地在機(jī)器和數(shù)據(jù)中心中運(yùn)行。容器將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,可針對各種特定生產(chǎn)需求而定制個(gè)性化的功能。Docker是dotCloud開源的一個(gè)基于LXC(Linux Container)的應(yīng)用容器引擎。Docker擴(kuò)展了LXC特性并使用高層的API,利用輕量級虛擬化技術(shù)進(jìn)行資源隔離,讓開發(fā)者可以將應(yīng)用程序、依賴的運(yùn)行庫文件打包,然后發(fā)布到任何系統(tǒng)為Linux的機(jī)器上。
容器管理平臺(tái)實(shí)現(xiàn)業(yè)務(wù)的快速彈性伸縮,提升資源使用效率,滿足業(yè)務(wù)突發(fā)高峰時(shí)系統(tǒng)的處理能力要求,實(shí)現(xiàn)對業(yè)務(wù)動(dòng)態(tài)變化的敏捷響應(yīng)。容器管理平臺(tái),具有強(qiáng)大的集群管理和應(yīng)用調(diào)度能力,應(yīng)用支撐能力,包括服務(wù)注冊和服務(wù)發(fā)現(xiàn)機(jī)制,內(nèi)建負(fù)載均衡器,強(qiáng)大的故障發(fā)現(xiàn)和自我修復(fù)能力,服務(wù)滾動(dòng)升級和在線擴(kuò)容能力。目前有兩種比較主流和應(yīng)用廣泛的容器管理平臺(tái),Kubernetes和 Mesos。
Kubernetes:遵從Apache2.0開源協(xié)議,是為Docker設(shè)計(jì)的容器編排技術(shù)。生態(tài)鏈完善,文檔齊全,發(fā)展速度迅猛。國內(nèi)外很多大型互聯(lián)網(wǎng)公司,都基于Kubernetes構(gòu)建了容器云系統(tǒng)。Kubernetes是為Docker而設(shè)計(jì),能夠很好的和Docker技術(shù)進(jìn)行結(jié)合。并且生態(tài)圈成熟,發(fā)展迅速,因此,在容器云編排方面,首選Kubernetes,基本能夠滿足大多數(shù)的應(yīng)用場景。
Mesos:遵從Apache2.0開源協(xié)議,推出時(shí)間較早。產(chǎn)品成熟,在國內(nèi)外很多大型互聯(lián)網(wǎng)公司有很多成功應(yīng)用案例。產(chǎn)品技術(shù)棧復(fù)雜,靈活性不高。要在已經(jīng)存在的工作任務(wù)(Hadoop、Spark等)上做容器化,推薦使用Mesos。
傳統(tǒng)的開發(fā)測試部署包括以下部分,如圖1:
圖1 傳統(tǒng)的開發(fā)測試部署
傳統(tǒng)的開發(fā)測試部署過程存在如下幾個(gè)問題:
(1)對比容器,傳統(tǒng)的物理機(jī)和虛擬機(jī)部署的資源利用效率都比較低;
(2)物理機(jī)多應(yīng)用在進(jìn)程空間、CPU資源、磁盤無法有效隔離;
(3)對比容器,虛擬機(jī)的密度較低,無法部署較多的應(yīng)用;
(4)物理機(jī)和虛擬機(jī)的測試和版本管理復(fù)雜,測試包和生產(chǎn)包可能存在不一致等問題;
(5)由于需要重新搭建環(huán)境及部署操作系統(tǒng),虛擬機(jī)的遷移成本高;
(6)對比容器,傳統(tǒng)虛擬機(jī)的空間占用大、啟動(dòng)速度慢,另外管理上也比較復(fù)雜。
現(xiàn)有的開發(fā)測試部署包括以下部分,如圖2:
圖2 基于容器的開發(fā)測試部署
開發(fā)階段從倉庫獲取標(biāo)準(zhǔn)鏡像,開發(fā)完成后將結(jié)果鏡像保存在鏡像倉庫中;測試階段從鏡像倉庫中獲取開發(fā)完成的鏡像,并進(jìn)行驗(yàn)證測試,測試通過后提交鏡像至倉庫;生產(chǎn)階段獲取最新的鏡像進(jìn)行部署,同時(shí)對原有鏡像進(jìn)行備份處理。
比較傳統(tǒng)的開發(fā)測試部署流程和以容器為基礎(chǔ)的開發(fā)測試部署流程,現(xiàn)有的開發(fā)部署存在下列優(yōu)點(diǎn):
①簡化了環(huán)境搭建的步驟,采用容器技術(shù)后,不需要自己安裝操作系統(tǒng),安裝各種中間件軟件和依賴庫;
②提高資源利用率,由于容器技術(shù)隔離性好,在測試環(huán)境和生產(chǎn)環(huán)境中可以部署更多的應(yīng)用;
③提高了開發(fā)質(zhì)量和交付速度,采用容器技術(shù)后,測試階段完成的鏡像文件可以放到生產(chǎn)環(huán)境中運(yùn)行,因?yàn)殓R像本身就帶有自己的依賴文件和環(huán)境參數(shù),不需要進(jìn)行修改和調(diào)整。
由于容器技術(shù)在開發(fā)測試部署中優(yōu)點(diǎn),本文從容器管理平臺(tái)的操作易用性、集群、可伸縮、可擴(kuò)展、高可用等功能和性能要求來制定的一個(gè)基于電信系統(tǒng)平臺(tái)的容器測試技術(shù)規(guī)范,具體內(nèi)容如下:
①容器網(wǎng)絡(luò)能力:測試使用容器時(shí),容器同宿主機(jī)之間訪問請求的性能,同不使用容器時(shí)進(jìn)行對比檢查;測試使用容器時(shí),跨宿主機(jī)容器之間訪問請求的性能,同不使用容器時(shí)進(jìn)行對比檢查。
②容器應(yīng)用并發(fā)訪問測試:容器的并發(fā)訪問性能達(dá)到性能指標(biāo)要求,測試并發(fā) 100,200,300,400,500個(gè)用戶,對比系統(tǒng)吞吐量TPS(Transaction Per Second)測試結(jié)果。
①容器應(yīng)用的高可用性:支持容器應(yīng)用的集群高可用部署;支持容器應(yīng)用的故障恢復(fù)機(jī)制。
②容器管理平臺(tái)的高可用性:管理平臺(tái)故障,不影響業(yè)務(wù)應(yīng)用的正常運(yùn)行;管理平臺(tái)支持高可用部署。
③鏡像倉庫的高可用性:鏡像倉庫支持集群部署,同時(shí)容器鏡像支持多副本備份,存儲(chǔ)和磁盤故障可快速恢復(fù)。
①應(yīng)用手動(dòng)擴(kuò)縮容:支持管理員根據(jù)業(yè)務(wù)的實(shí)際情況,手動(dòng)進(jìn)行應(yīng)用的擴(kuò)縮容。
②應(yīng)用自動(dòng)擴(kuò)縮容:支持自動(dòng)擴(kuò)縮容的機(jī)制,支持CPU、MEM等指標(biāo),以及時(shí)間周期等指標(biāo)觸發(fā)自動(dòng)擴(kuò)縮容機(jī)制。
①容器監(jiān)控管理:支持容器應(yīng)用以及所在宿主機(jī)的各項(xiàng)指標(biāo)的監(jiān)控,包括CPU、MEM、網(wǎng)絡(luò)、磁盤等。
②告警管理:支持根據(jù)監(jiān)控的關(guān)鍵指標(biāo)設(shè)置告警的規(guī)則和閾值,支持告警的上報(bào)和查詢。
③日志管理:支持容器日志以及應(yīng)用業(yè)務(wù)日志的采集和匯總,提供容器統(tǒng)一日志查詢機(jī)制。
①API開放能力:能夠提供北向API,根據(jù)應(yīng)用場景調(diào)用容器管理平臺(tái)的API完成管理操作。
①用戶管理:提供用戶注冊和審批等用戶管理能力。
②權(quán)限管理:提供基于角色的權(quán)限管理能力。
③資源隔離:支持用戶之間資源的隔離。
①鏡像倉庫
(a)鏡像上傳/下載:提供應(yīng)用鏡像的上傳和下載機(jī)制,兼容 Docker Registry V2 API;
(b)鏡像版本管理:提供應(yīng)用鏡像的多版本管理;
(c)鏡像權(quán)限控制:提供鏡像權(quán)限管理機(jī)制,通過權(quán)限控制鏡像的查看。
②容器生命周期管理
(a)容器應(yīng)用創(chuàng)建和刪除:能夠進(jìn)行創(chuàng)建容器應(yīng)用和刪除容器應(yīng)用;
(b)容器應(yīng)用啟動(dòng)和停止:能夠完成容器應(yīng)用的停止然后重新啟動(dòng),刪除后列表檢查;
(c)容器應(yīng)用部署和調(diào)度:應(yīng)用部署時(shí)支持多種調(diào)度算法;
(d)容器應(yīng)用部署后健康檢查和故障恢復(fù):容器應(yīng)用部署后支持監(jiān)控檢查的機(jī)制,當(dāng)發(fā)現(xiàn)容器故障時(shí),平臺(tái)負(fù)責(zé)故障容器的快速恢復(fù)。
(e)容器管理平臺(tái)和鏡像倉庫的對接:容器管理平臺(tái)在部署應(yīng)用時(shí)直接從鏡像倉庫拉取鏡像進(jìn)行部署。
③容器網(wǎng)絡(luò)和存儲(chǔ)
(a)跨主機(jī)容器網(wǎng)絡(luò)能夠互通:能夠提供支持跨宿主機(jī)的容器之間的網(wǎng)絡(luò)互通;
(b)容器網(wǎng)絡(luò)和宿主機(jī)網(wǎng)絡(luò)互通:支持容器和宿主機(jī)網(wǎng)絡(luò)的互通,容器應(yīng)用和非容器應(yīng)用之間的網(wǎng)絡(luò)互通;
(c)容器支持宿主機(jī)本地磁盤:容器支持宿主機(jī)本地磁盤掛載容器卷;
(d)容器支持網(wǎng)絡(luò)存儲(chǔ):容器支持網(wǎng)絡(luò)存儲(chǔ)掛載容器卷。
④應(yīng)用編排和管理
(a)應(yīng)用編排管理:提供復(fù)雜應(yīng)用編排能力,完成應(yīng)用的一鍵化部署;
(b)應(yīng)用配置管理:提供應(yīng)用配置管理能力,針對應(yīng)用的配置進(jìn)行統(tǒng)一的管理和下發(fā);
(c)應(yīng)用滾動(dòng)升級:提供應(yīng)用滾動(dòng)升級的機(jī)制,實(shí)現(xiàn)應(yīng)用不間斷對外提供服務(wù),同時(shí)支持應(yīng)用的版本的回退;
(d)應(yīng)用負(fù)載均衡:提供應(yīng)用負(fù)載均衡能力,支持應(yīng)用多實(shí)例的負(fù)載均衡。
容器性能測試包括容器網(wǎng)絡(luò)性能、容器應(yīng)用并發(fā)訪問性能。容器網(wǎng)絡(luò)性能主要指容器同通宿主機(jī)之間訪問請求的性能,跨宿主機(jī)容器之間訪問請求的性能。容器應(yīng)用并發(fā)訪問性能是指容器的并發(fā)訪問性能達(dá)到性能指標(biāo)要求,主要是測試并發(fā)100,200,300,400,500個(gè)用戶的TPS。具體實(shí)施方案主要是部署qperf客戶端和服務(wù)端鏡像、通過編寫LoadRunner腳本來獲取系統(tǒng)的各項(xiàng)性能指標(biāo),大致的方法如下:
測試場景準(zhǔn)備如表1:
表1 測試場景數(shù)據(jù)準(zhǔn)備
容器網(wǎng)絡(luò)性能測試的測試步驟示意圖如圖3。
①步驟1:預(yù)置集群內(nèi)服務(wù)器運(yùn)行容器,容器軟件、容器集群管理軟件已安裝就緒,使用qperf作為基準(zhǔn)測試工具;
②步驟2:將qperf分別安裝部署在兩臺(tái)主機(jī)A、B,設(shè)主機(jī)A為client端,B為Server端,通過主機(jī)A向主機(jī)B請求,測試其帶寬,作為基準(zhǔn)值Val;
③步驟3:設(shè)主機(jī)A仍為client端,將主機(jī)B系統(tǒng)環(huán)境與qperf一起構(gòu)建為鏡像C啟動(dòng)該鏡像,設(shè)為Server端,測試Client與Server的帶寬Val1;
④步驟4:設(shè)主機(jī)A系統(tǒng)環(huán)境與qperf一起構(gòu)建為鏡像B,啟動(dòng)該鏡像,并設(shè)為client端;啟動(dòng)鏡像C,設(shè)為Server端,測試Client與Server的帶寬Val2。
預(yù)期的測試結(jié)果,程序運(yùn)行正常,所有數(shù)據(jù)包均可正確收發(fā),Val1>=Val*80%,Val2>=Val*70%。
容器應(yīng)用并發(fā)訪問性能測試部署圖如圖3。
圖3 容器網(wǎng)絡(luò)性能布署圖
①準(zhǔn)備壓力測試工具LoadRunner,采用鏡像A部署容器應(yīng)用,準(zhǔn)備好測試腳本。
②分別并發(fā)100、300、500用戶,壓測此容器應(yīng)用查看此應(yīng)用的TPS和平均響應(yīng)時(shí)間。
③每次并發(fā)持續(xù)10分鐘。
④填寫 100、200、300、400、500并發(fā)的 TPS和平均響應(yīng)時(shí)間。
圖4 并發(fā)訪問性能測試部署圖
Docker是一種輕量級的虛擬化技術(shù),相比傳統(tǒng)的虛擬機(jī)架構(gòu)有很大優(yōu)勢,目前電信企業(yè)應(yīng)用系統(tǒng)平臺(tái)都有采用容器技術(shù)部署各類業(yè)務(wù)系統(tǒng)的規(guī)劃。本文針對容器管理平臺(tái)的集群系統(tǒng)的部署、高可靠性、開放性、安全性、基礎(chǔ)功能和性能等問題,設(shè)計(jì)了測試標(biāo)準(zhǔn)和評估方法,該設(shè)計(jì)與企業(yè)應(yīng)用系統(tǒng)相結(jié)合并得到了應(yīng)用,具有很高的可靠性和效率。本文希望建立一套完整的容器管理平臺(tái)的測試標(biāo)準(zhǔn),能夠衡量和評估不同的容器管理平臺(tái)的功能和性能。
[1]張忠琳.基于 OpenStack云平臺(tái)的 Docker應(yīng)用[J].設(shè)計(jì)研究與應(yīng)用,2014,35(11):73-76.
[2]伍陽.基于Docker的虛擬化技術(shù)研究[J].信息技術(shù),2016(1):121-126.
[3]常煜芬.中間件技術(shù)研究[J].計(jì)算機(jī)應(yīng)用與研究,2001,12(12)233-236.
[4]陳琳.網(wǎng)絡(luò)中間件的測試方法研究[J].計(jì)算機(jī)應(yīng)用研究,2005,8(9)137-139.
[5]周相兵.面向服務(wù)的網(wǎng)構(gòu)軟件中間件研究[J].計(jì)算機(jī)應(yīng)用研究,2008,10(9)56-59.
[6]華為實(shí)踐小組.Docker技術(shù)入門與實(shí)踐[M].機(jī)械工業(yè)出版社,2016.