楊 鷗 張 羿 耿貞偉
(云南電網有限責任公司,云南 昆明 650011)
微服務架構在容器云中的應用實踐
楊 鷗 張 羿 耿貞偉
(云南電網有限責任公司,云南 昆明 650011)
隨著信息化建設的迅速發展,電網傳統業務應用面臨資源不能高效動態伸縮、高效遷移部署等方面的問題,亟需在開發平臺中引入微服務架構。以Docker為代表的容器技術則為微服務理念提供了匹配的實現機制,本文從什么是微服務切入,詳細介紹了微服務架構的優勢,從電網容器云平臺自身實踐出發,給出了微服務架構的云端應用實踐。
微服務;容器持續集成;單體應用
多年以來,電網公司的IT建設者門一直在尋找更好的方法來構建業務系統,從而提高資源的利用率和開發運維效率,從傳統服務器管理模式、采用虛擬化搭建的云計算管理平臺模式到基于容器構建云PaaS平臺方式均取得了良好的經濟效益。而隨著這些基礎平臺的變化,使用傳統整體式架構應用開發系統越來越難以滿足企業不斷變化的需求,難以滿足快速開發、交互、運維的需要。
近年來,微服務和容器技術的不斷發展,為企業解決這些問題提供了一種新的模式,很多組織發現細粒度的微服務架構可以幫助他們更快地交付軟件,并且有更多機會嘗試新技術。微服務在技術決策上給了我們極大的自由度,使我們能夠更快地響應新的變化。
微服務是一種架構風格,其概念源于Martin Fowler在2014年3月所寫的一篇文章“Microservices”,微服務提倡將應用系統按照一定的原則將大系統拆分成一系列細小的服務,每個服務只需要專注于一個單一的業務功能即可,并且服務之間可以互相獨立運行,采用輕量級API進行通信,來滿足業務和用戶的需求。
在傳統經典分層架構模式下(例如表現層、業務層、數據層),業務雖然在邏輯劃分有模塊和組件,但常作為一個整體進行編譯、打包、部署、運維,因此在物理部署層面依然是一個“單塊”。圍繞這種架構模式,我們可以看到很多常用的IDE集成開發環境和編程框架(如eclipse、spring等),它們為開發者提供便捷的開發、調試、測試、部署等體驗,讓開發人員可以通過工具、框架快速生成應用原型而不必花大量精力在服務分解和分布式設計上。但是伴隨者業務和功能的累積擴張,應用體積也隨機迅速擴大,單塊架構難以適應這種快速變化的需求,并且面臨開發效率低、交付周期長、技術轉型難等一系列的挑戰。
微服務架構則是從架構層面出發,將應用系統按照一定的邊界分解成一系列的獨立微服務,每個微服務與傳統應用中的邏輯模塊或組件相當,但是可以獨立地進行編譯、部署、運行,具有獨立部署、復雜度可控、技術選型靈活和高擴展性的優點。

圖1 微服務參考架構
微服務架構的特點為:
(1)業務粒度微小
由于體積小、復雜度低,每個微服務可由一個小規模開發團隊完全掌控,易于保持高可維護性和開發效率。
(2)職責單一
每個服務只做一件事情,并通過定義良好的接口清晰表述服務邊界。
(3)隔離性好
每個微服務都可以獨立部署,互相隔離互不影響,一個服務宕機不會影響其它服務。
(4)管理容易
每個服務可以獨立地進行開發部署,可以針對業務特點使用不同的開發語言。
當然像任何其它技術一樣,微服務架構也有不足,帶來的挑戰包括:
(1)通信成本高:在單體應用中的一個函數或進程調用在微服務架構下可能變成了一個http遠程調用,網絡延遲會帶來更長的耗時,造成更高的通信成本。
(2)數據一致性問題:在單體應用中數據通常存儲在一個數據庫中,保證數據的一致性很容易,而在微服務架構下,通常不同的微服務有不同的數據庫,但往往一個操作可能會涉及多個微服務的互相調用,當服務很多時整個調用鏈路變長,調用失敗的風險高,在這種分布式架構下更難保證數據的一致性和可靠性。
(3)服務依賴:不同服務之間的依賴問題,導致復雜度增加。
(4)部署復雜:微服務化后服務實例變多,造成更多需要部署、配置和監控的部分,此外一個應用的改變可能會波及多個服務,擴展和監控難度更大。
微服務架構雖然給企業開發者們帶來了諸多優勢,但同時也讓構建、部署和維護這些分布式的微服務系統帶來不少難題。近年來基于輕量級虛擬化技術、面向應用虛擬化運行環境的容器云為微服務提供了理想的載體,利用容器化技術簡化微服務創建、集成、部署、運維的整個流程,推動微服務在云端的大規模實踐,下面以電網容器云平臺為例,說明各個流程的實踐:

圖2 容器云下開發運維流程
3.1 創建
在容器云平臺,用戶可以很方便地創建微服務項目,并在項目中與代碼倉庫進行關聯,輕松選擇代碼項目進行構建。每當開發人員提交代碼時,系統可以自動將存于代碼倉庫的微服務程序快速構建成新的容器鏡像,經過持續集成自動化驗證后轉化為隨時可以部署的容器鏡像,用戶可以將這個微服務一鍵部署到容器云平臺上。
3.2 集成
在電網容器云平臺的鏡像倉庫中,不僅匯集了來自Docker官方和社區的優質鏡像,也支持加入平臺以外的任意鏡像源。用戶可以根據自己的業務需要,像搭積木一樣自由組合、復用各種容器化微服務,輕松集成應用。比如,用戶需要一個通用的MySQL數據庫或者tomcat web服務,他可以直接在鏡像中選擇適合的數據庫服務鏡像,并與其業務連接起來。
3.3 部署
在電網容器云平臺中可以快速靈活地進行部署:您可以用項目鏡像或第三方鏡像進行部署。可以一次部署多個鏡像并為每個鏡像的容器設定cpu和內存占用。從配置部署到啟動只需要幾分鐘。
此外,平臺支持升級回滾:部署有完整的版本管理,每次升級會生成一個部署版本,可以隨意選擇一個舊版本進行回滾。部署出現異常時可以指定版本恢復。
3.4 運維
在微服務架構模式下,由于獨立進程眾多,服務在部署后如何進行運維、管理成為實踐上的另一個難點。容器云通過主機管理、主機監控屏蔽用戶來屏蔽底層云主機和基礎架構運維,通過容器編排、自動修復、彈性擴展、監控日志等高級的應用服務,實現平臺上微服務的智能托管,幫助用戶降低運維成本和難度。
3.5 存儲
微服務一般分為有狀態和無狀態的服務,無狀態的服務他們通常是不用保存數據的,可以很方便地進行橫向擴展,而有狀態的服務則需要存儲數據,如存儲在數據庫或緩存服務中。在微服務架構模式下,提倡每個微服務可根據實際需求選擇最合適的數據存儲服務。
在Docker容器中,持久化保存需要通過掛載Volume來實現,因此容器云平臺將持主機上的云存儲抽象成數據卷直接掛載在容器上,容器在重啟、遷移時系統無需人工干預可以自動重新掛載。
首先,一個基本的策略是:不要大規模重寫代碼,除非是重建一套全新基于微服務的應用。重寫代碼聽起來很不錯,但實際上充滿了風險,最終可能會失敗,相反,我們應該采取逐步遷移單體式應用的策略,通過逐步生成微服務新應用,與舊的單體式應用集成。隨著時間的推移,單體式應用在整個架構中比例逐漸下降直到消失或者成為微服務架構的一部分。
第二要將前端和后端分離:減小單體式應用復雜度的策略是將表現層(響應RESTAPI請求或提供基于HTML的圖形接口)和業務邏輯(完成業務邏輯的應用核心)、數據訪問層(訪問基礎元素,例如數據庫和消息代理)分開。
此外,要抽出服務:從單體應用中抽取出某些模塊成為獨立微服務。每當抽取一個模塊變成微服務,單體應用就變得簡單一些;一旦轉換足夠多的模塊,單體應用本身已經不成為問題了,要么消失,要么簡單到成為一個服務。
構建復雜的應用確實非常困難,而微服務架構模式可以使構建復雜應用變得簡單化。微服務架構的誕生和容器技術的流行幾乎是同時發生的,是互聯網時代倒逼傳統技術和架構而產生的變革,基于容器技術的PaaS平臺給開發者提供了一個部署和管理微服務的簡單方法,它把所有這些問題都打包內置解決了。
[1]古明生,解文艷,崔焱.電網企業去系統化的IT架構研究[J].南方能源建設,2016,3(2):118-121.
[2]郭棟,王偉,曾國蓀.一種基于微服務架構的新型云件PaaS平臺[J].信息網絡安全,2015(11):15-20.
[3]楊俊偉,紀鑫,胡強新.基于微服務架構酯電力云服務平臺[J].電力信息與通信技術,2017(1):8-12.
[4]陳愷.Docker與微服務架構的最佳實踐[EB/OL].http://www. infoq.com/cn/presentations/best-practice-of-micro-service-architecture
[5]王磊.微服務架構與實踐[M].北京:電子工業出版社,2015.
[6]楊俊偉,紀鑫,胡強新.基于微服務架構的電力云服務平臺[J].電力信息與通信技術,2017(1):8-12.
[7]李蘇璇.基于微服務架構的SaaS應用構建方法研究[D].廣州:華南理工大學,2016.
[8]崔蔚,李春陽,劉迪,等.面向微服務的統一應用開發平臺[J].電力信息與通信技術,2016(9):12-17.
TheApplication of Micro ServiceArchitecture in Container Cloud
Yang Ou Zhang YiGeng Zhenwei
(Yunnan Power Grid Co.,Ltd.,Yunnan,Kunming 650011)
With the rapid development of information technology,the traditional business applications of power grid faces with many problems,such as inefficient resources,dynamic scalability,efficient migration and deployment.Therefore,it is urgent to introduce micro service architecture into the development platform.The container technology represented by Docker is a micro service concept providing the realization mechanism.From the definition of micro service,this paper introduces the advantages of micro service structure in detail,and introduces the application of micro service architecture in the cloud.
micro service;container continuous integration;single application
TP393.09;TP311.52
A
1008-6609(2017)07-0079-03
楊鷗(1987-),女,云南會澤人,本科,工程師,研究方向為信息化項目管理。