微服務架構是這幾年IT領域的一個高頻詞彙,愈來愈多的項目和應用正在以微服務的思想進行重構。相比於單體應用和SOA架構,微服務優點也逐漸凸顯,被廣大架構師和技術人員引入和推崇。固然,單體應用、SOA、微服務等各有優點和不足。html
單體架構在早期的企業內部信息化或者搭建中小型項目時很常見,簡單說就是將應用程序的全部功能都打包成一個獨立的單元,能夠是JAR、WAR、EAR或其它歸檔格式。通常單體應用使用通用的IDE便可開發調試,項目便於共享、易於部署和測試。可是單體架構的應用不夠靈活,任何修改都須要從新構建和部署,並且應用可能較大,不利於持續的迭代和交付。此類應用容易受到技術棧的限制,一旦先期設計出現問題,後期的技術債務會加劇負擔。golang
微服務架構模式有點像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,可利用註解的方式簡便的拉取指定的配置。並且,用友雲配置中心以服務的方式提供統一的管理界面,結合用友雲的認證中心能夠提供可靠的安全保障。