周銀鋒, 王漢瑤, 蘇雨晴, 劉健, 楊靈藝, 侯葵
(平高集團有限公司, 河南, 平頂山 467001)
自動化技術的實現需要自動化部署系統的支撐,國內外相關學者對此進行了大量研究,文獻[1]使用自動部署工具可以大大減少人為干預,生成C代碼來協調片外和片內傳輸和計算,但是其動化部署耗費時間較長;文獻[2]在不同規模應用的云系統和邊緣系統中,基于VM和容器的部署轉向應用程序之間的共享環境,得出一個新的參考模型與數據驅動的參數公式和表示形式,但是其信息保存模式不唯一,適用性較強;國內的相關研究中,文獻[3]為提高辦公環境個人計算機部署效率,制作硬盤鏡像,實現PC機典型使用場景的快速部署,但是其信息保存周期較短。文獻[4]研發了自動化部署系統,提高中國電信集團全國集中應用系統部署的質量和效率,但是其應用自動化部署耗費時間較長。
容器群托管技術允許管理者和開發人員對應用程序和相關數據進行打包和遷移,可以在任何當前的Linux發行版中使用,且其輕量級特性大大降低了性能開銷。在大多數情況下,容器技術被應用到應用中,容器群托管技術的應用分為5個部分:應用組件的分解、基本映像的選擇、安全性和可管理性的解決方案、添加代碼、配置測試和部署。由此,本文以容器群托管技術為核心,以Docker容器鏡像構建與優化為創新點,設計了集群反饋客戶機這一過程,由此完善了完整的應用全壽命周期自動化部署系統,期望提高應用自動化部署的應用效率。
對于服務器硬件方面的配置,主要涉及三方面,分別是RAID、OOB、BIOS配置設計,具體的配置設計工具如表1所示。

表1 硬件配置工具
硬件的自動化配置包括以下三點:
第一是RAID,可以支持的RAID卡策略有RAID 0、RAID 1、RAID 5、RAID 10等;
第二是OOB,其可以完成用戶、密碼等初始化工作;
第三是BIOS,所支持的配置包括VT、HT等[5-6]。根據表1可以看出,由于硬件配置工具的不相同,導致硬件自動化配置具有更大挑戰性[7]。
為了保證其配置兼容性,可以將設置完成的RAID、OOB、BIOS配置信息設為腳本,根據腳本中參數進行后續的配置工作。
在應用生命周期自動部署系統中,除了上述硬件配置外,還有一個不可或缺的硬件設備,即負載均衡設備。在客戶機和集群服務器之間,需要負載平衡設備來連接和通信[8],如圖1所示。所謂負載均衡設備的主要功能是利用各種分配算法將網絡請求分配給可用的服務器,并傳遞數據流量和網絡帶寬,從而幫助訪問者獲得最佳的硬件設備聯網體驗。

圖1 集群示意圖
硬件設計完成后,以此作為支撐,進行系統軟件的設計。
自動部署系統包括從底部到頂部服務的硬件配置以及中間的網絡和容器組托管。整個結構主要包括以下幾個層次,如表2所示。

表2 層級結構表
通過以上層次的合理應用、協作,用戶可以在不接觸計算機硬件的情況下,以操作系統為核心對應用生命周期進行控制和管理,甚至在用戶感覺到之前,操作系統就會根據應用程序的資源需求自動分配相關的資源部署。
該流程的實現基于容器組托管技術,通過構建應用程序生命周期映像,配置基于映像組的應用程序部署,最終實現應用程序的自動部署。
容器群托管技術在自動部署系統中應用的主要目的是構建應用的生命周期映像。所謂映像就是軟件包,它包含文件系統、可執行程序、依賴程序的配置文件等,而且構造的映像具有可移植性和可重用性的特點,在應用程序自動化部署中可以發揮巨大的作用。對于圖像創建的形式,最流行的方法之一是使用commit命令。以原始容器為中心,修改并提交圖像。這種形式雖然有效,但也有很多缺點,比如只能使用一次,不能完成模塊的更新和安裝。因此,在設計新的系統軟件時,可以采用另一種方法,用標準格式命令創建Dockerfile文件。
該方法具有功能更優、擴展性大、模塊更新安裝簡單、后期維護方便等優點。Docker容器具體的鏡像構建流程如圖2所示。

圖2 Docker容器鏡像構建流程
在圖2中,以Docker Client作為基礎,可以完成Web應用鏡像分裝的工作。
應用鏡像功能的優點是使用一個程序就可加工同一工件的各個部位,獲取組合權值,建立目標函數,如式(1):
(1)
式中,bj為找正中心點,aj為使用程序輸入值,dhj為檢索次數,t為調用時間。之后,將其存儲至Docker倉庫,稍后將其應用于已部署好系統的服務器內,只需要執行簡單的命令,就可以實現應用全壽命周期自動化部署。
鏡像構建完成后,將形成鏡像組,然后容器組托管技術將發揮作用。鏡像組管理作為信息化進程中的重要技術之一,是系統版本更新和應用自動部署的基礎。在系統應用中,必須面對各種業務應用模塊。應用功能模塊的不同決定了數據處理和基本傳輸的不同。為了保證鏡像處理的效率,可以通過Docker創建一個部署程序來管理有效的鏡像。
必要時,可以提取指定的鏡像進行移植。同時,將鏡像備份存儲在倉庫中,幫助Docker在使用和遷移鏡像時直接從本地拉取下載鏡像,提高應用部署效率。其中,具體的容器群托管流程如圖3所示。

圖3 容器群托管流程圖
此外,在自動化部署過程中,首先需要計算每個Docker容器的負載能力。
如果使用的是編譯型語言,不需要整個Debian或者Ubuntu鏡像,只需要從一個非常小的鏡像開始構建,故在網絡可用性條件下,提取指定的鏡像進行移植,并以此為依據進行部署分配。容器計算數據從容器CPU利用率、內存使用率、帶寬利用率三方面來計算。
容器平均CPU利用率公式:
(2)
平均內存使用率公式:
(3)
平均帶寬利用率公式:
(4)
式中,Avg_CPU表示CPU利用率,Avg_Mem表示內存使用率,Avg_Net表示帶寬利用率,并且將負載數據設置為20來進行計算。在式(4)中,考慮到負載均衡需求,通過計算容器的負載能力,得到容器集群的負載信息,從而實現應用程序生命周期部署的自動化。
在這個過程中,硬件配置負載均衡裝置起到了很大的作用。當客戶端通過自身發起請求時,請求內容與虛擬服務IP有關。為了確保IP用戶從安全的倉庫拉取鏡像,進而在安全的安裝源安裝相關軟件包,負載均衡設備接收到消息后,根據預先設計的策略,選擇要接收相關請求的服務器,并將消息中的目的地址設置為服務器的IP地址。目的地址設置函數為

(5)
式中,根據旋轉的計算方法,綜合考慮了服務器集群的失效因素,將式(2)~式(4)綜合,可以得到容器負載能力公式:
Avg_Load=u1*Avg_CPU+u2*Avg_Mem+
u3*Avg_Net
(6)
當服務器沒有響應負載平衡設備發送的請求時,它將被踢出集群。在接收到訪問信息后,集群將其反饋給客戶機。
此時,反饋服務器的IP通過負載均衡設備進行轉換,傳送給客戶端。在客戶機收到返回消息之前,完成一個完整的集群加載過程。在此過程中,將收集應用程序生命周期部署配置信息。
應用自動化部署的主要工作是安裝和設置信息系統程序。其中,JENKINS可用于系統連續集成工具軟件中,在完成集成控制的同時,顯示系統列表和查詢分析日志。專業人員將軟件包放入JENKINS容器中構建模塊和部署信息,最后提交相關信息。用戶可以操作可視化系統界面。
在自動化部署測試過程中,工作人員可以實現監控、及時解決問題、提高應用效率、減少自動化部署時間。在實際應用中,對系統中的一臺服務器進行應用生命周期自動化部署,根據應用結果,整理出如表3所示的應用部署情況。

表3 應用部署情況表
根據對應用的分析,本系統的設計以容器群托管技術為核心技術,根據應用的生命周期進行鏡像創建和鏡像群管理,實現了部署效率的提高。另外,通過對集裝箱裝載能力的分析,計算出集裝箱組的裝載能力,然后以負載均衡設備為載體,實現應用生命周期的自動部署。
以容器群托管技術為核心的應用自動化部署系統設計完成后,為了保證該系統的應用效果,特進行實驗論證。
通過構造虛擬機的方式,建立偽分布仿真環境。采用Windows10操作系統作為主體,對系統的性能進行測試,測試采用I76700k核心硬件CPU,最高可達4.5 GHz。為了增強實驗測試結果的說服力,以本文系統為實驗組的測試對象,而以文獻[3]方法(傳統系統1)和文獻[4]方法(傳統系統2)為控制組的測試對象,分別進行了應用生命周期自動部署,并根據部署時差得出了實驗結論。
在容器群托管技術的使用過程中,會對應用程序中的節點進行計算。不同程序節點數量不同,其運行時間也有所差別。首先,為了保證結果準確度更高,選擇單一的節點進行實驗,分別使用三種系統進行五次應用全壽命周期自動化部署測試,仿真實驗結果如圖4所示。

(a) 本文系統

(b) 傳統系統圖4 單一應用自動化部署仿真測試結果
通過圖4的測試結果可以發現,面對單一節點的應用程序,進行重復應用全壽命周期自動化部署操作時,本文系統與傳統系統之間所耗費時間相差并不大,本文系統進行自動化部署時間保持在5—10 ms之間,而傳統系統運行時間保持在10—15 ms左右。經過比較可以得出結論,文中設計的自動化部署系統實際運行中花費時間更少,更具有優勢。
因為每個應用程序的節點數量并不一致,所以自動化部署的運行效率也隨著節點的增加而降低。為了說明本文系統在現實應用程序自動化部署中,具有較高的即時性,采取多個應用程序同時進行自動化部署測試,分別選取具有100、200、300、400、500個Slave節點作為條件。將自動化部署運行時間平均值與傳統的系統運行結果對比,結果如圖5所示。

(a) 本文系統

(b) 傳統系統圖5 多應用自動化部署仿真測試結果
通過上述測試結果圖5可以得出一個結論,當測試對象為節點數量比較少的應用程序時,本文系統與傳統系統自動化部署花費時間差距不大。但是,隨著應用程序數量的增長,Slave節點數量也在不斷上升,文中所設計的自動化部署系統優勢開始顯現出來。當面對200個節點數量時,傳統系統自動化部署時間是本文系統花費時間的2倍左右,之后依舊飛速增長,直到500個節點時,兩種傳統系統處理所需時間都達到了本文系統的4倍,因此隨著應用程序的增加以及節點數量的增長,采用容器群托管技術為核心的應用全壽命周期自動化部署系統用時更少,效率更高。
本文系統以容器群托管技術為核心,實現了應用全壽命周期自動化部署,可以滿足規模較大、效率較高的自動化部署需求,同時降低了人工成本。
雖然本文設計系統可以實現應用自動化部署,但是由于時間與資源的約束,在私有容器云平臺優化應用方面仍然沒有完全完善,未來將會進行深入研究。