作者:阿裡雲 MVP郦強
1、主流微服務配置中心對比Spring Cloud Config、阿裡雲ACM、Nacos
說到配置,記得很早用SSH或SSM架構開發項目的時候都是xml的配置檔案,内容很多,很容易寫錯,稍微有一個地方出錯了,整個項目就啟動不了,現在技術不斷日新月異,更新換代很快,而且開源項目架構很多,層出不窮,目前一般都是用微服務的架構,項目基本都用注解方式了,當然除了項目的配置外,還有其他的一些配置檔案,比如:開發(dev)、測試(test)、釋出(pro)的配置、redis的配置、rabbitMQ的配置、定時任務配置、微服務的路由配置等等,是以用一款好的配置管理工具能事半功倍。
目前主流的一些配置管理中心有Spring Cloud Config Server、Zookeeper、阿裡雲ACM、Nacos等,這裡介紹阿裡雲ACM,主要是阿裡雲MSE的微服務引擎支援的Nacos暫時還沒有配置這塊,是以這裡做一個介紹。公司之前有個項目也用了ACM産品,還是不錯的,如果後期MSE支援Nacos的配置中心,那我一定強烈推薦大家使用這個MSE産品了。
1)Spring Cloud Config Server
為服務端和用戶端提供了分布式系統的外部配置支援,配置伺服器為各應用的所有環境提供了一個中心化的外部配置。Spring Cloud 配置伺服器預設采用 Git 來存儲配置資訊,其配置存儲、版本管理、釋出等功能都基于 Git 或其他外圍系統來實作。

SpringCloud Config 配置git
支援Profile的方式隔離多個環境,通過在Git上配置多個Profile的配置檔案,用戶端啟動時指定Profile就可以通路對應的配置檔案。單獨建立一個配置檔案的項目,在config server的git中配置即可。
單獨建立的配置檔案項目,在Spring Cloud Config中指定
Spring Cloud Config原生不支援配置的實時推送,需要依賴Git的WebHook、Spring Cloud Bus和用戶端/bus/refresh端點:
a)基于Git的WebHook,配置變更觸發server端refresh
b)Server端接收到請求并發送給Spring Cloud Bus
c)Spring Cloud Bus接到消息并通知給用戶端
d)用戶端接收到通知,請求Server端擷取最新配置
2)阿裡雲ACM(Application Configuration Management)
應用配置管理 ACM 是一款在分布式架構環境中對應用配置進行集中管理和推送的産品。利用 ACM,可以在微服務、DevOps、大資料等場景下極大減輕配置管理的工作量,并增強配置管理的服務能力。這個是官網的介紹,的确功能強大,公司之前的項目也用這個配置過。
應用配置管理 ACM(Application Configuration Management)前身為淘寶内部配置中心 Diamond,現已作為 Nacos 的配置中心子產品開源。
關于ACM的使用場景,大家可以點選這個連結檢視:
https://help.aliyun.com/document_detail/59972.html?spm=a2c4g.11186623.6.546.5a623733KW3wIe好處很多,我就結合公司的自身項目,說說兩個應用場景:
a)微服務應用架構下的配置管理
使用微服務架構的人都知道,随着應用和機器數目的增多,配置管理的工作會變得很繁瑣。單個應用下多個機器的配置分發,應用對應用的配置依賴,都将是很麻煩的事情。在傳統架構的應用釋出過程中,修改一個應用配置就需要将整個應用重新打包釋出,整個過程非常繁瑣,不僅增加了運維的工作量,而且容易出錯。
使用了ACM配置管理中心後,新的配置釋出并不依賴配置打包,在新版本的配置釋出後,所有應用立即生效,動态更新,這個很友善,下面展示兩張ACM的圖
傳統方式,配置更改需要重新打包
ACM配置方式,動态更新,無需重新打包
b)應用業務場景動态推送
這個場景也是經常要用到的,公司有個奶酪生活的項目,就是淘寶、京東、拼多多返利模式,這個項目營運經理經常要搞活動,展示營運頁面,比如618,雙十一,馬上又要到雙十二了,是以營運活動頁面經常要變,層出不窮,吸引消費者來使用。如何讓前端頁面快速響應營運活動、降低開發成本、提高營運效率,也是 ACM 的使用場景之一。
通過在前端 Javascript 埋入 ACM 的配置内容(如三方庫版本号,靜态資源 URL 等),在營運活動釋出時,營運人員可以通過營運工具修改 ACM 配置規則,直接讓前端 Javascript 的展示生效。
動态推送網頁配置資訊,更新更加便捷
3)Nacos
Nacos是阿裡開源的,Nacos 支援基于 DNS 和基于 RPC 的服務發現。在Spring Cloud中使用Nacos,隻需要先下載下傳 Nacos 并啟動 Nacos server,Nacos隻需要簡單的配置就可以完成服務的注冊發現。
Nacos除了服務的注冊發現之外,還支援動态配置服務。動态配置服務可以讓您以中心化、外部化和動态化的方式管理所有環境的應用配置和服務配置。動态配置消除了配置變更時重新部署應用和服務的需要,讓配置管理變得更加高效和靈活。配置中心化管理讓實作無狀态服務變得更簡單,讓服務按需彈性擴充變得更容易。
一句話概括就是Nacos = MSE + ACM。
另外配置中心還有Apollo,Zookeeper等,不過項目中實際沒使用過,是以這裡就不提了。
2、總結:
個人還是非常偏好Nacos的,一來開源,現在也有穩定的release版本了,二來支援多種語言,現在運維部署用的是k8s,Nacos對docker,k8s都支援很好,最好的一點,可以把之前Consul(公司前一個項目用的)上的配置通過Nacos Sync同步過來,而且遷移到Nacos上相當的友善。下一篇文章,我們将對主流微服務注冊中心産品進行比較 Eureka、Consul、Nacos
本文參考連結:
1、
https://help.aliyun.com/document_detail/59957.html?spm=a2c4g.11174283.6.545.48d7613624gxGu首發于簡書。