□ 陸武生 韋于倩 李敏盛
Docker是一個虛擬化開源應用容器引擎,擁有秒級的啟動速度,CPU和內存的資源占用少,空間占用小等優勢,開發者可以把自己的程序制作成一個Docker鏡像,發布到Linux和Windows機器上,并可輕松實現持續交付、部署、遷移、維護和擴展。
Docker Swarm是Docker的集群管理工具,它是將若干臺已運行Docker容器引擎的物理機器或虛擬主機組成集群,抽象成一個整體。集群的活動由swarm管理器控制,加入集群的機器、主機稱為一個節點(Node)。一般來說,一個集群會有多個工作節點(Worker Node)和至少一個管理節點(Manager Node),管理節點負責集群的配置,服務管理,維護集群狀態,向工作節點分配任務,工作節點的任務就是運行相應的服務執行管理節點分配的任務。開發者用服務形式多副本運行自己的程序鏡像,程序副本會均衡部署在各個工作節點中。管理節點默認也是工作節點,只是比工作節點多了管理功能。圖1為Docker Swarm的集群架構。

圖1 Docker Swarm的集群架構
目前,廣西全區無線發射臺站中,三級以上臺站的站內自動化和遠程監控系統的應用程序都部署在一臺工控計算機上,當這臺計算機發生故障時,所承載的應用程序就無法正常工作,從而導致臺站自動化和遠程監控功能失效。對此,本文提出一種設計方案,利用Docker Swarm將多臺支持 Docker的Linux、Windows的計算機或嵌入式設備組成云集群,提高硬件資源的利用率、負載均衡和可拓展性。自動化和遠程監控程序以多副本的形式均衡部署在Docker Swarm的工作節點中,實現應用程序分布式化。當某個節點出現故障時,Swarm管理器會在其他節點上新運行故障節點所承載的任務,確保了程序的正常運行。自動化和遠程監控程序的分布式,提高了站內自動化和遠程運維的穩定型、可靠性,確保了廣播電視的正常播出。
Docker Swarm是Docker容器引擎自帶的一個集群工具,只要安裝Docker就會存在Docker Swarm。Docker容器引擎支持x86_64/amd64、ARM、ARM64等架構的主流linux,MacOS,Windows 7以上的操作系統,故 Docker和Docker Swarm能兼容主流的通用計算機、服務器和嵌入式計算機。Docker支持市面上主流的編程語言,包括c/c++,C#,go,hy,java,node,perl,php,python,rails和ruby等編程語言。目前,我們臺站端的控制計算機大部分還是XP系統,小部分是Windows 7系統。未來,安裝xp系統的電腦,可以更換成linux操作系統,即可以支持Docker。綜上所述,Docker Swarm在硬件和軟件上的兼容性良好,能滿足站內自動化和遠程監控系統分布式化部署的軟硬件需求。
Docker公司曾在2016年聘請了獨立技術顧問杰夫·尼科洛夫來協助搭建框架,測試Docker Swarm和另外一個集群工具Google Kubernetes在1000個節點集群上運行30000個容器(每個節點30個容器)的性能,主要從容器啟動時間和大負載的條件下系統列舉所有運行的容器的響應時間這兩項指標進行測試。測試過程中,當集群資源占用率為10%時,即100個節點和3000個容器時,Docker Swarm容器的啟動時間是0.36秒,列舉所有運行容器的響應時間是0.32秒,50%占用率時啟動時間0.41秒,響應時間1.18秒,100%占用率時啟動時間0.59秒,響應時間18.25秒。從測試數據中可以看出,Docker擁有秒級的啟動速度,在未滿負荷運行時,系統響應時間也是在秒級范圍。圖2、圖3分別為Docker Swarm和Google Kubernetes的啟動時間、系統響應時間對比圖。

圖2 Docker Swarm和Google Kubernetes的啟動時間對比

圖3 Docker Swarm和Google Kubernetes系統響應時間對比
Docker Swarm有內部和外部兩種負載均衡,集群內服務之間的相互訪問需要做負載均衡,稱為內部負載均衡;從集群外部訪問服務的公開端口,也需要做負載均衡,稱為外部負載均衡,這里主要測試Swarm集群的外部負載均衡。
1.測試方法
(1)在集群中創建一個服務,3個副本運行,對外開放并監聽12345/udp端口,這個服務的功能就是再啟動時創建一個隨機ID,當接收到客戶端發送來的數據時,就實時給客戶端原路返回自己的ID和接收到的數據。
(2)然后在另外的計算機上運行多個客戶端,向服務端的12345端口發送數據,當接收到服務端返回的服務ID和數據時,就打印出來,通過服務ID來判斷Swarm是否通過負載均衡讓服務的不同副本來處理客戶端請求,從而達到測試目的。
2.測試平臺
本文使用2個Raspberry 3B、1個Raspberry 3B+和1一個Raspberry 4B等4個不同型號的嵌入式硬件,統一搭載linux內核的Raspbian操作系統,組成了一個Docker Swarm集群,用作負載均衡性能的測試平臺。參照官方的建議創建奇數的管理節點,故配置了3個管理節點,1個工作節點,一共4個節點。服務端軟件和客戶端軟件使用DotNet Core框架,C#語言編寫。
3.測試步驟
(1)先將服務端程序制作發布成Docker鏡像,在Docker Swarm中以服務形式創建運行3個副本,對外開放12345/udp端口,這時客戶端都可以通過集群的四個節點IP+12345端口對該服務進行訪問。
(2)在不同的計算機上打開多個客戶端軟件,客戶端只通過某一個節點IP+12345端口,主動不停地給服務端發送數據,再實時將服務端返回的ID和數據打印出來。通過觀察數據發現,即使通過同一節點IP訪問IP,不同的客戶端的打印出來的服務ID也不同,說明Docker Swarm給外部訪問做了負載均衡。圖4為客戶端打印服務端返回的ID和數據圖。

圖4 客戶端打印服務端返回的ID和數據圖
(3)同樣打開多個客戶端,隨機選擇4個節點中的一個IP訪問服務端,當正常發送接收數據后,將其中正在運行服務的Swarm節點設備斷電,這時有些客戶端雖然還在不停的往服務端發送數據,但已無法接收到斷電服務端的數據,當超過10秒鐘都無數據時,客戶端會再次隨機從剩下的3個節點中的一個繼續跟服務對接,這時客戶端會收到不同ID服務端返回的數據。通過在Swarm中查詢發現,節點斷電后,服務的3個副本只剩下2個,但是Swarm管理器也立即在另外一個節點將1個副本運行起來,又恢復3個副本正常運行。通過測試表明了當某些節點發生故障時,剩余的節點能承擔客戶端的請求,Swarm集群也會在另外的節點將服務副本運行起來,恢復正常工作。
經過上述對Docker Swarm的軟硬件兼容性、啟動和系統響應時間、負載均衡等三個技術方面可行性分析或測試,表明在全區無線發射臺站中使用docker Swarm將多個跨平臺的服務器、通用計算機、嵌入式計算機組成云化集群,自動化和遠程監控程序實現分布式化部署是可行的。且臺站當前的計算機電腦,可以直接或者更換操作系統方式,加入進集群中,不會造成資產浪費。站內自動化和遠程監控程序的計算量并不高,無需高配置的計算機和嵌入式設備,分布式系統的實施能提高整個臺站系統的資源利用率、穩定性、可靠性,也更好地保障了臺站播出安全。