微服務架構是這幾年IT領域的一個高頻詞彙,越來越多的專案和應用正在以微服務的思想進行重構。相比於單體應用和SOA架構,微服務優勢也逐漸凸顯,被廣大架構師和技術人員引入和推崇。當然,單體應用、SOA、微服務等各有優勢和不足。
單體架構在早期的企業內部資訊化或者搭建中小型專案時很常見,簡單說就是將應用程式的所有功能都打包成一個獨立的單元,可以是JAR、WAR、EAR或其它歸檔格式。一般單體應用使用通用的IDE即可開發除錯,專案便於共享、易於部署和測試。但是單體架構的應用不夠靈活,任何修改都需要重新構建和部署,而且應用可能較大,不利於持續的迭代和交付。此類應用容易受到技術棧的限制,一旦先期設計出現問題,後期的技術債務會加重負擔。
微服務架構模式有點像SOA,它們都由多個服務構成。SOA架構將多服務整合在一起,但其和服務匯流排ESB過於緊密的聯絡以及其複雜性,也使得其在網際網路應用中的部分場景裡不太適用。微服務架構模式不包含ESB服務,微服務應用樂於採用簡單輕量級協議,比如REST或者RPC來實現。
常見的微服務呼叫拓撲結構如下,此示例是基於Spring Cloud的微服務呼叫。完整的微服務解決方案應該包括服務註冊治理中心、API閘道器、服務的降級熔斷以及分散式配置等機制。
在業務邏輯體現上,其呼叫關係可能如下:
微服務架構下有很多優勢,這裡不做具體擴充套件,可簡單羅列如下:
1:獨立微服務複雜度可控制;
2:可靈活水平擴充套件;
3:可獨立部署運維;
4:開發針對性強、支援小團隊敏捷開發;
5:提高系統的可組合性和可替代性;
但是,在解決服務拆分問題、水平擴充套件問題的同時,其使用也衍生出了一系列問題,如分散式應用部署自動化問題、資料一致性、配置檔案管理、服務的註冊、服務的治理等。當然,也有一系列的方案來處理解決上述問題,如基於DevOps的自動化運維工具(用友雲運維平臺)、配置中心、最終一致性方案、服務註冊治理中心與統一的服務閘道器等。
本文主要討論下在微服務和分散式架構下,配置檔案如何更好的管理。
每個微服務都維護著相對獨立的業務,服務之間通過RPC或者REST API的方式相互呼叫,聚合成整體。每個微服務一般有自己的資料庫和支撐環境,每一個微服務例項也會擁有自己的執行環境或者說是獨立的程式,也就相應的需要維護一份自身環境的配置檔案,如Spring的配置檔案、屬性檔案、業務的XML檔案、AccessKey認證檔案等等。
一個完整的業務通常由多個微服務組成,每個微服務在開發環境、測試環境、預釋出環境和生產環境對應著不同的配置資訊,需要針對不同環境維護多份。開發者在開發測試以及聯調的時候需要對應不同的環境資訊,頻繁的修改和調整配置資訊,帶來了很大麻煩。大量的配置檔案的維護給運維人員帶來相當大的困擾。
痛點一:配置檔案太多,如果開發規範不嚴格,各個元件整合在一起時配置檔案整合麻煩;
痛點二:一個服務一般對應開發、測試、預釋出、生產等多組環境,多套環境下配置檔案手動管理也很複雜;
痛點三:執行中的環境對應的配置項需要變化調整時,調整配置檔案需要重啟環境;
上述問題的出現,迫切需要一個統一的配置檔案管理、維護的服務出現,此服務需能統一管理多個微服務的配置檔案,還能根據開發、測試、預釋出、生產等環境進行區分隔離,並且能記錄配置檔案的多個版本。我們通常將這類服務定義為分散式配置管理或者配置中心。
在配置中心的管理下,運維管理員只構建一份程式碼,即可釋出到不同的環境,應用從配置中心拉取不同環境的配置,各個應用可以定義多個配置檔案,運維管理員在配置中心統一維護各個服務的配置資訊。
配置中心具有的如下幾大基礎功能:
1:配置檔案和配置項的統一管理、支援多套環境;
2:提供統一SDK,獲取不同的配置;
3:統一的資訊監控和統計;
4:實時或近實時推動變化資訊到客戶端;
同時,配置中心本還要考慮安全和加密等問題,其自身也是叢集應用,應該具有高可用、支援高併發等特性。
業界常用的配置中心開源產品如百度的disconf和阿里的diamond以及攜程的Apollo等,幾種產品各有所長,這裡也不統一展開。用友雲配置中心(以下簡稱配置中心)在對比開源產品提供功能的基礎上,提供基於自身技術特色的配置中心服務,更加適用用友雲體系的雲產品,其示意圖如下:
配置中心優勢:
優勢1:配置中心服務端許可權控制,統一管理介面;
通過配置中心的服務端,管理員可以進行應用管理、配置管理、檔案上傳、線上修改、檢視客戶端連線狀態等操作;可以通過超級管理員登入,也可以統一在開發者中心進行登入。管理員可以配置通知郵箱,在配置檔案變化後以郵件方式通知對應的關注人。
優勢2:支援配置的多環境、多應用、多版本;
業務應用可能同時有多個版本線上,也可能有測試、預釋出、生產等多個環境同時執行。配置中心包含應用、環境、版本等概念,可以維護多個應用,針對每個應用的不同環境,管理多個版本的配置檔案,保證不同版本業務應用的執行環境對應不同版本的配置檔案的需要。
優勢3:支援SaaS應用的多租戶隔離、應用隔離管理;
基於用友雲平臺,已經發展起了很多SaaS應用,各個SaaS應用在資料庫隔離、檔案儲存隔離、快取隔離等做了大量的工作。配置中心也支援將各個租戶的配置檔案資料隔離管理,更好的適配了SaaS應用對於資料隔離的需求。
優勢4:SDK、動態屬性注入、回撥機制;
和配置中心管理服務端配和使用的,是Client端的SDK。利用SDK,開發者可以整合配置中心的拉取配置、監聽變化等功能,其使用配置和註解的方式讓整合過程簡單快捷且侵入較小。
優勢5:實時監控連線狀態;
配置中心的管理員可以下開發者中心的控制檯,監控到各個版本的配置檔案被客戶端的拉去和連線的狀態,令管理員可以全域性監控各個客戶端的狀態。
優勢6:多種連線方式,短輪詢和長輪詢機制支援近實時推送;
整合與使用篇
用友雲的配置中心的整合和使用相當簡單,可以通過SDK的方式單獨使用,也可以通過開發者中心應用管理中的配置提取和下載方式使用。
使用方式一:SDK方式
步驟1:配置檔案統一管理,通過介面操作配置檔案的上傳和修改;
步驟2:屬性檔案、XML檔案SDK拉取;
步驟3:配置變化動態通知、屬性注入和回撥機制支援,註解支援;
可以看到,無需編寫複雜的程式碼,只需要進行Spring的配置修改和少量的Annotation的編寫即可,大大簡化了開發者的整合過程。
使用方式二:開發者中心結合配置中心使用(用友雲配置中心和開發者中心結合,相得益彰!)
用友雲開發者中心簡介:用友雲開發者中心為開者提供了資源管理、持續整合、持續交付、容器服務、映象倉庫等應用基礎服務,同時為應用的微服務架構落地提供完備的支撐,結合DevOps的理念,通過提供自動化運維、日誌管理、中介軟體服務等功能,幫助開發及運維人員降低產品研發迭代過程中的負擔。詳情請參考http://iuap.yonyou.com/product/dcenter.html和https://developer.yonyoucloud.com。
(1)與配置中心的結合,在開發者中心的應用釋出的過程中進行配置檔案提取,並使用golang版本工具拉取配置;
(2)配置中心將各個租戶間資料進行隔離並加入了許可權控制,使得其對多租戶的支援更加完善;
除此之外,配置中心和訊息匯流排結合,可以完美支援微服務間解耦!
- 配置中心是邏輯解耦,物理不解耦的微服務的利器。它可以解決配置導致的系統耦合,架構反向依賴的問題,配置中心的演進過程,配置私藏到全域性配置檔案,到配置中心。
- 非同步訊息是邏輯上解耦,物理上也解耦的微服務架構利器。它非常適合資料驅動的任務依賴,呼叫方不關注處理結果,或者呼叫方關注處理結果,但是回撥的時間很長的場景。
引用《架構師之路》 的一篇文章,http://mp.weixin.qq.com/s/MUDqLzdnITeTsZv5uEaUYA,這裡不再擴充討論。簡言之,利用配置中心和非同步訊息機制結合,可以充分解決微服務架構時的部分關鍵問題。
綜上所述,利用用友雲配置中心,可以集中管理微服務架構下應用的配置檔案,並且其支援多套環境、多個版本,提供完善的SDK,可利用註解的方式簡便的拉取指定的配置。而且,用友雲配置中心以服務的方式提供統一的管理介面,結合用友雲的認證中心可以提供可靠的安全保障。