北京國遙新天地信息技術股份有限公司EV-Server研發團隊一直在積極探索更好的產品交付方式和更優的服務資源管理,從而實現基于傳統的虛擬化技術到基于Docker的容器化交付轉變。
最近,該團隊結合Kubernetes(簡稱K8s)的部署運維優勢,搭建了基于K8s的GIS云平臺—EV-Server7,以便提高生產環境中對集群管理、運行效率和產品運維等方面的綜合能力。
一、容器化部署優勢

統一運行環境:
傳統GIS平臺都部署在物理機或虛擬機中,在部署和維護過程中,需要關心平臺的CPU、內存、硬盤等硬件資源。近些年,容器的出現徹底解決了資源依賴問題,使用戶能夠更好的關注GIS業務本身。
彈性能力更強:
在規模化、集群化部署時,通過使用容器方式,用戶可以無需考慮系統平臺之間的差異,從而使服務部署、啟停管理變得更加方便,節點伸縮更加容易,減少用戶運維成本。
交付時間縮短:
通過容器化部署應用,在業務發生增加或變化時,用戶可以動態添加和維護已有業務服務,而不影響終端用戶應用,實現服務滾動更新迭代,優化產品交付時間。
容錯能力強:
EV-Server 7將服務容器化后,可通過K8s實現動態伸縮,有效避免服務單點故障。
鑒于容器化的上述優勢,EV-Server 7已經對服務全部進行了微服務化改造,以適應容器化應用。
二、EV-Server7基于K8s的部署架構

EV-Server7基于K8s的部署架構圖
自上而下,EV-Server7將各個業務功能解耦為獨立的微服務。在K8s中,每一個微服務運行在獨立的容器中,并且每個微服務都可以部署在單個或多個容器中以提高在高負載情況下的服務可用性。同時,由于不同容器之間不共享資源,容器運行時不會相互影響,大大提高了服務可靠性。在EV-Server7中,通過注冊中心和服務網關可以快速聚合各個微服務和自定義插件的API,最終實現服務接口統一對外提供。
三、快速搭建高可用GIS云平臺
進行微服務改造的目的是為了更好的容器化,這樣可以借助K8s進行容器編排。如圖所示,在EV-Server7部署完成后,每一個服務都是一個單獨的容器,服務之間環境隔離,運行時互不影響。當對某個服務進行升級更新時,只需單獨更新某一個鏡像即可。

部署集群時相比在虛擬機或物理機部署要容易很多,通過K8s部署集群基本不用考慮物理環境。每個服務分配在哪個物理節點都是由K8s完成,在K8s中每個服務都會有一個服務名(如下圖的ev-rasterserver),服務之間的通訊通過服務名進行,這樣服務可以自動發現、自動修復。如果某個服務因為某種原因掛掉,服務會被迅速拉起,進行故障遷移,保證線上環境能夠不間斷運行。

當線上業務量增加時,可以動態增加服務實例的數量,比如當業務需要大量訪問影像時,可以啟動多個影像服務。EV-Server7集群內部會根據負載均衡策略,啟動相應的影像服務來應對突出其來的訪問壓力。當業務高峰過后,亦可將多余的服務實例回收,節約集群資源。

四、可擴展、快速交付
集群插件開發和EV-Server7單機插件開發一樣,只需將原本的插件打包為一個docker鏡像,之后將docker鏡像推送到鏡像倉庫。下面展示具體的插件部署流程,以下步驟只在首次部署時完成即可,以后只需從倉庫拉取鏡像,大大加快了交付流程。
在Kuboard中創建對應的插件容器,首先配置鏡像的名稱和描述等信息。

之后配置容器的鏡像倉庫信息和容器的啟動命令,參數中的配置必須進行添加,將插件添加到注冊中心,由服務網關進行統一調用。配置完成后,點擊保存則會開始創建對應的鏡像容器。

鏡像啟動完成后如下圖所示。

當前,云GIS已經越來越多的應用于各行各業,EV-Server7結合K8s實現了GIS支撐環境的快速構建和硬件資源的有效管理,從而為更好地服務于各行業提供有效保障。