鐘艷雯,夏正龍,朱亮,呂冠儒,朱宏武
(湖南省氣象信息中心,長沙 410118)
隨著氣象業(yè)務(wù)的飛速發(fā)展,對氣象系統(tǒng)的信息化、集約化、扁平化的要求越來越高,Docker容器憑借輕量級、啟動(dòng)快、資源占用少的優(yōu)點(diǎn)[1],在氣象領(lǐng)域中得到了廣泛的應(yīng)用。近年來多省氣象部門開展了Docker技術(shù)在業(yè)務(wù)中的研究與應(yīng)用,利用相關(guān)技術(shù)搭建氣象云平臺服務(wù)、部署相關(guān)算法等[2-4]。2021年湖南省氣象大數(shù)據(jù)云平臺,即“天擎·湖南”(以下簡稱天擎)正式上線,提供數(shù)算一體的平臺化服務(wù),實(shí)現(xiàn)了數(shù)據(jù)管理、加工處理、應(yīng)用服務(wù)的高度集約。2022年天擎新增了鏡像資源管理與容器資源管理功能,允許用戶在天擎環(huán)境中制作鏡像,并在加工處理算法的容器云計(jì)算框架中加載運(yùn)行。本文擬對基于天擎的容器應(yīng)用進(jìn)行研究,將Docker體積小、部署快等優(yōu)點(diǎn)與天擎環(huán)境結(jié)合,在充分保證運(yùn)行環(huán)境獨(dú)立的同時(shí),減少環(huán)境部署時(shí)間,降低系統(tǒng)資源消耗。
Docker是dotCloud公司于2013年發(fā)布的輕量級容器引擎,得益于開源、高效和標(biāo)準(zhǔn)化實(shí)現(xiàn),Docker已成為容器云平臺的事實(shí)標(biāo)準(zhǔn)[5]。Docker機(jī)制包括鏡像(image)、容器(container)和倉庫(repository)。Docker鏡像類似于虛擬機(jī)鏡像,為只讀模板,包含了文件系統(tǒng)。容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例,容器間相互隔離,獨(dú)立運(yùn)行。鏡像是創(chuàng)建容器的基礎(chǔ),倉庫是Docker集中存放鏡像文件的場所。Docker容器是在操作系統(tǒng)層面上實(shí)現(xiàn)虛擬化,直接復(fù)用本地主機(jī)的操作系統(tǒng),對硬件的需求遠(yuǎn)低于傳統(tǒng)虛擬機(jī)。從資源占用上來說,更加輕量級;從應(yīng)用上來說虛擬移植性更強(qiáng),靈活性更高[6-9]。
天擎提供鏡像資源管理與容器資源管理功能,制作并管理Docker鏡像和容器;在算法管理中提供容器云計(jì)算框架,將用戶鏡像加載后供加工流水線調(diào)度運(yùn)行。天擎提供兩類基礎(chǔ)鏡像:一類為操作系統(tǒng)基礎(chǔ)鏡像,只包含操作系統(tǒng)及常用的基礎(chǔ)軟件;另一類為語言包基礎(chǔ)鏡像,除操作系統(tǒng)外,包含基礎(chǔ)的語言環(huán)境(如Java、Python、C++等)。算法基于容器有兩種運(yùn)行模式:①算法在容器外的宿主機(jī)上,運(yùn)行時(shí)通過映射的方式在容器內(nèi)運(yùn)行;②算法裝載到容器內(nèi),直接在容器內(nèi)運(yùn)行。模式①的優(yōu)點(diǎn)是方便算法的調(diào)試,算法修改后無需重新打包鏡像,缺點(diǎn)是不利于算法的管理,且需提供額外的存儲空間。模式②可以實(shí)現(xiàn)對算法及資源的嚴(yán)格管理,但當(dāng)算法更改時(shí),需要重新打包鏡像。天擎在算法開發(fā)測試階段允許使用模式①,便于進(jìn)行算法的調(diào)試。當(dāng)算法完成測試后,在業(yè)務(wù)環(huán)境中需要將算法裝載至容器內(nèi),以模式②運(yùn)行。
首先需要申請?zhí)烨鏄I(yè)務(wù)賬戶,激活數(shù)據(jù)存儲、算法集成與運(yùn)行權(quán)限;其次在資源申請頁面中申請存儲資源、算力資源、數(shù)據(jù)訪問;最后按照天擎標(biāo)準(zhǔn)對算法輸入輸出、運(yùn)行環(huán)境、監(jiān)視告警信息等進(jìn)行研發(fā)與改造,實(shí)現(xiàn)與天擎的適配。
用戶通過在線和離線等方式,進(jìn)行算法鏡像的制作和上傳提交申請,在管理員審核通過后,可以在天擎業(yè)務(wù)平臺“算法注冊”頁面進(jìn)行使用。鏡像制作主要包含三種方式:
方法一:離線鏡像制作。適用于用戶本地?zé)oDocker環(huán)境且無Docker鏡像制作基礎(chǔ),或算法環(huán)境依賴需要自定義制作時(shí)。使用該方式進(jìn)行鏡像制作時(shí)與虛擬機(jī)安裝環(huán)境類似:用戶申請容器資源;管理員審核通過后在指定服務(wù)器上創(chuàng)建容器并啟動(dòng)sshd服務(wù);用戶遠(yuǎn)程登錄到容器內(nèi),進(jìn)行算法依賴安裝、算法測試;測試通過后,在離線制作鏡像頁面選擇已調(diào)試后的容器,制作成鏡像。
方法二:在線鏡像制作。適用于用戶有Docker鏡像制作基礎(chǔ),并有算法包文件,依賴環(huán)境點(diǎn)單。用戶在平臺提供的基礎(chǔ)鏡像上,通過Docker指令在線制作鏡像,包括添加算法指令包、指定執(zhí)行目錄、端口映射、掛載目錄等。
方法三:鏡像文件上傳。用戶將通過鏡像下載頁面保存鏡像tar文件或者其他定制好的鏡像tar文件,在鏡像資源管理頁面上傳。
方法一、二制作的鏡像簡單、規(guī)范、安全,符合天擎審核要求。但是,在天擎提供的基礎(chǔ)鏡像無法滿足算法運(yùn)行環(huán)境需求時(shí),方法一、二中用戶無root權(quán)限,僅能以用戶申請的天擎業(yè)務(wù)用戶運(yùn)行,且除家目錄以外無寫權(quán)限,在需要安裝其它依賴及環(huán)境的情況下,建議采用方法三,在自建容器服務(wù)器中制作自定義鏡像,打包后上傳。下面以制作湖南省水文數(shù)據(jù)同步鏡像為例,介紹離線鏡像的制作方法。
(1)使用自建容器服務(wù)器制作鏡像時(shí),需要修改容器內(nèi)用戶最大線程數(shù)為65535。
修改方式為:vi/etc/security/limits.d/20-nproc.conf,如圖1所示。
圖1 修改容器內(nèi)用戶最大線程數(shù)
(2)編寫Dockerfile。
天擎要求Docker容器中的進(jìn)程以業(yè)務(wù)賬戶執(zhí)行,在用戶鏡像上傳后會校驗(yàn)是否需要包含業(yè)務(wù)賬戶名稱、用戶Uid,用戶目錄是否符合規(guī)范/space/cmadaas/dpl/{業(yè)務(wù)賬戶名稱}等。因此,選擇編寫Dockerfile文件,基于DSL語法構(gòu)建鏡像,如圖2所示。
圖2 Dockerfile內(nèi)容
其中,創(chuàng)建用戶與設(shè)置工作目錄關(guān)系到能否通過天擎的鏡像校驗(yàn),是必不可少的。業(yè)務(wù)賬戶名稱與產(chǎn)品加工業(yè)務(wù)系統(tǒng)用戶名稱保持一致,用戶Uid可以在鏡像管理頁面進(jìn)行查看。
COPY命令復(fù)制當(dāng)前目錄下的算法及相關(guān)文件或者目錄到容器指定目錄。
“RUN pip install-r requirements.txt”命令安裝requirements.txt中指定的Python軟件包。requirements.txt文件內(nèi)容為:
pymssql==2.2.5
requests==2.28.1
(3)生成Docker鏡像。
docker build-t sqltoxg:v3-f./Dcokerfile.
(4)運(yùn)行Docker容器。
docker run—name sqltoxugu3-it sqltoxg:v3/bin/bash
(5)調(diào)試成功后,將運(yùn)行中的容器保存為docker鏡像。
docker commit a346c822d116 sqltoxg:v3.1
(6)鏡像打包為tar文件。
docker save-o docker_SqlToXugu_v3.tar sqltoxg:v3.1
(7)上傳鏡像并注冊算法,將算法加載到加工流水線調(diào)度運(yùn)行,算法運(yùn)行界面如圖3所示。
圖3 算法運(yùn)行界面
湖南省水文數(shù)據(jù)同步算法主要任務(wù)是從ms-SQL數(shù)據(jù)庫同步水文行業(yè)共享數(shù)據(jù)到天擎的虛谷數(shù)據(jù)庫中。下面選取水文降水量數(shù)據(jù),以相同的算法及參數(shù)運(yùn)行在虛擬機(jī)環(huán)境、自建容器服務(wù)器(以下簡稱容器)、天擎算法容器云(以下簡稱算法)中,對虛擬機(jī)、容器、算法在同步效率方面進(jìn)行測試。
(1)不同時(shí)間段對比。
選取2022年7月1日0時(shí)至1時(shí)、7月2日至3日,7月11日至20日的數(shù)據(jù)進(jìn)行同步,分別進(jìn)行小時(shí)、日、旬?dāng)?shù)據(jù)同步速度比較,結(jié)果見表1。
表1 同步速度測試結(jié)果
(2)不同步驟對比。
每次同步操作的主要步驟為:①查詢SQL數(shù)據(jù)庫;②去除虛谷數(shù)據(jù)庫中重復(fù)記錄;③更新虛谷數(shù)據(jù)庫。選取2022年7月21日至30日逐日數(shù)據(jù)進(jìn)行同步測試,比較3個(gè)步驟耗時(shí)情況,查詢耗時(shí)、去重耗時(shí)和更新耗時(shí)結(jié)果依次如圖4、圖5和圖6所示。
圖4 逐日查詢耗時(shí)
圖5 逐日去重耗時(shí)
10天總記錄數(shù)為219501條,每條在3個(gè)步驟中的平均耗時(shí)見表2。
表2 每條記錄平均耗時(shí) 單位:毫秒
所有測試結(jié)果的不同時(shí)間段對比中,算法同步速度最快。不同步驟對比中,步驟1算法平均耗時(shí)、單日耗時(shí)稍長,虛擬機(jī)與容器耗時(shí)接近;步驟2算法平均耗時(shí)較短,容器耗時(shí)最長;步驟3算法單日和平均耗時(shí)最短,虛擬機(jī)與容器耗時(shí)接近。綜上所述,虛擬機(jī)與容器同步效率接近,算法效率最高。
天擎是目前氣象部門的核心平臺之一,各類算法融入氣象大數(shù)據(jù)云平臺是氣象信息化、集約化發(fā)展的趨勢與要求。Docker具有體積小、啟動(dòng)快,在保證運(yùn)行環(huán)境獨(dú)立的同時(shí)減少環(huán)境部署時(shí)間、降低系統(tǒng)資源消耗等優(yōu)點(diǎn),在天擎的算法接入方面有較大的優(yōu)勢。本文以湖南省水文數(shù)據(jù)同步算法為例,介紹了從鏡像制作到算法調(diào)度運(yùn)行的全流程,并對同步效率進(jìn)行了測試。這對其他算法融入具有一定的參考、示范意義,對推進(jìn)本省“云+端”的氣象業(yè)務(wù)體系起著積極作用。