王亞軍


摘要:近年來,隨著微服務架構和容器技術的不斷成熟,在企業信息化建設過程中應用越來越廣泛。其中微服務架構解決了單體應用架構復雜度高、系統緊耦合、演化困難等痛點問題,容器技術提供了虛擬化的運行環境,為服務提供了理想的運行載體。兩者結合以后,能顯著提升企業信息化應用的水平。
關鍵詞:微服務;容器化;云平臺
中圖分類號:TP311 文獻標識碼:A 文章編號:1007-9416(2020)01-0075-02
0 引言
很多企業發展初期,核心業務非常簡單,使用傳統的MVC三層架構,往往更能提高開發效率。隨著時間的推移,上線需求越來越多,應用程序的體積變得非常龐大,儼然成為一個超級應用,但隨之而來的問題是開發、測試、部署和擴展變得越來越困難。
(1)系統復雜度高,開發效率低。以某通信運營商省公司的CRM系統為例,該系統工程龐大,存在模塊間相互依賴,職責不清、代碼混亂、程序難以理解等問題,造成改造代碼風險高和開發、上線編譯困難,開發效率低和上線周期長。(2)系統可靠性低,擴展困難。系統模塊耦合度高,部署結構無序可依,服務層均勻分布,不能對頻繁調用的服務模塊彈性伸縮及有針對性的部署,系統部署和擴展能力較差。(3)硬件資源利用率低,投資居高不下。各業務子系統豎井式建設,獨占資源,系統資源經常處于緊缺狀態,也造成資源投入黑洞。
最近幾年,隨著計算機、互聯網等技術的高速發展,微服務和容器化等技術發展迅速,為企業解決上述問題提供了一種全新的模式。在構建支持海量請求以及多變業務的軟件平臺時,微服務架構和容器化成為大多數企業的首選。
1 微服務架構及容器化概述
1.1 微服務概述
微服務是近年來業界實現云化軟件架構過程中總結出來的一種架構模式,其核心是將大型單一應用劃分成多個不重疊的獨立服務,服務之間通過輕量級通信機制實現互聯互通,通過服務之間的協調,實現復雜應用功能。在實現過程中,要求每個微服務粒度小,功能獨立,能夠獨立開發、測試和部署。業界對微服務架構的特性總結如下:(1)使大型的復雜的應用程序可以持續交付和持續部署。(2)每個服務都相對較小并容易維護。(3)服務可以獨立部署。(4)服務可以獨立擴展。(5)可以實現團隊的自治。(6)更容易實驗和采納新的技術。
1.2 容器化概述
容器是一種更先進、更輕量級的部署機制,也是一種操作系統級的虛擬化機制。容器運行時使用操作系統機制將容器彼此隔離;將作為容器鏡像打包的服務部署到生產環境中,每個服務實例都是一個容器,將服務部署為容器。容器化具有以下優點:(1)封裝技術棧,可以用容器的API實現對服務的管理。(2)服務實例是隔離的,在同一宿主機上運行的兩個容器應用互不干擾。(3)服務實例的資源受到限制,在創建容器時,預先分配內存和CPU等資源。
2 微服務架構在容器中的應用實踐
模塊化是開發大型、復雜應用程序的基礎。微服務架構作為模塊化的一種形式,大型、復雜的單體應用在向微服務架構轉型的過程中,首先要對已有系統按照一定策略進行拆分,將功能內斂,并將相互耦合的業務功能獨立出來,作為一個微服務子系統對外提供服務,如圖1所示。
企業在采用微服務架構之后,原有系統往往被拆分成數十個微服務子系統。微服務架構在給企業開發人員帶來便利的同時,由于每個微服務子系統都需要單獨構建、部署和維護,增加了部署及維護的復雜度;同時每個微服子系統部署在單獨的硬件資源上,造成了主機資源的浪費。
近幾年,隨著容器技術的發展和應用不斷成熟,容器技術提供的虛擬化運行環境為微服務提供了理想的載體,同時使得微服務創建、集成、部署和運維更簡單易行。
下面以某通信運營商省公司的容器云平臺為例,說明CRM系統微服務應用與容器云平臺結合的實踐。
該容器云平臺是基于K8S框架的容器云平臺,向微服務應用系統提供統一運營運維能力,支持應用的統一編排、調度和運維。
(1)資源編排管理:建設分布式應用的編排與托管平臺能力,以應用為中心進行統一資源管理和調度,圖形化設計、開發、測試、發布流水線管理,實現一鍵式部署。支持容器、虛機、物理機多種運行環境混合編排。(2)應用服務生命周期管理:提供第三方應用托管功能,提供從部署到運維全生命周期的管理,以及自動彈性伸縮、應用灰度升級等功能。(3)應用改造遷移:所有新增應用必須基于容器云平臺集群部署。
2.1 實現主機資源的統一管理和調度
通過容器云平臺實現資源整合后,業務系統與服務器資源實現解綁,各系統和模塊混合部署在集群內相互隔離的租戶環境下,充分共享和錯峰利用容器集群整體資源服務能力,資源需求呈幾何級下降。解決了微服務應用子系統獨占硬件資源,業務忙時資源緊張,而其余絕大部分時間內資源處于閑置浪費狀態問題,如圖2所示。
2.2 實現應用與底層資源的聯動,應用服務自動擴縮容
基于統一的容器基礎設施環境,實現容器云平臺與底層資源平臺的聯動調度;實現應用/服務對資源的按需分配和動態調整,能夠支持服務實例快速復制部署;實現應用服務能力隨流量壓力彈性伸縮。服務彈性伸縮模塊,根據標量采集結果(或健康檢查結果),可實時觸發事件處理規則,在資源配額范圍內控制服務實例數量,實現應用服務能力的彈性伸縮,如圖3所示。
在主機資源統一調度之后,利用容器云平臺提供的自動擴縮能力,流量達到一定閾值,自動對微服務應用進行擴容,輕松應對并發高峰,實現業務支撐能力的快速提升。
2.3 應用組件倉庫,建立標準化的軟件環境
大型分布式軟件系統,系統運行環境十分復雜。本文中提到CRM系統,在系統開發與發布的生命周期中,開發環境、測試環境和生產環境有細微的不同,這些差異可能是由于不同安裝包的版本和依賴關系引起的。將基礎技術組件以容器鏡像的封裝形式,通過容器云平臺制作標準化的鏡像文件和相關配置,通過組件倉庫進行管理,保持容器內部所有的配置和依賴關系保持不變,確保從開發到產品發布整個過程環境的一致性,減少因軟件環境不一致出現的各種問題。
2.4 建立發布流水線,提高系統部署效率
容器云平臺提供自助式的Docker鏡像生成功能,三個域的應用可以通過界面一鍵發布,實現了應用開發、測試、發布端到端的持續集成管理能力,為應用的持續迭代奠定了基礎,如圖4所示。
3 結語
大型單體應用系統在向微服務化架構轉型的過程,不是一蹴而就的,需要按照一定策略和方法進行。比如將新功能作為服務開發,阻止單體的無序發展;表現層和后端分離,將后端業務抽象出粗粒度的API供前端調用,實現后端業務的獨立部署;將獨立出來的微服務應用與容器技術結合,提升系統資源利用率和服務的標準化程度,實現服務橫向擴展及故障隔離等特性,充分發揮微服務架構敏捷靈活的優點。
參考文獻
[1] [美]克里斯·理查森.微服務架構設計模式[M].機械工業出版社,2019.
[2] 楊鷗,張羿耿,貞偉.微服務架構在容器云中的應用實踐[J].應用技術與研究,2017(07):79.
[3] 張輝,朱祺.微服務架構在容器云中的應用實踐研究[J].計算機工程應用技術,2018(19):57-58.