1. 程式人生 > >阿里雲ACM:雲原生配置管理利器

阿里雲ACM:雲原生配置管理利器

摘要: 在傳統架構中,如果配置資訊有變更,通常是登陸伺服器手動修改配置來使配置生效。在微服務架構中,應用數和節點數由於微服務化數量激增,導致釋出次數增加,配置變更難度加大,通常是將應用配置抽象出來放置在外部的配置中心裡,從而實現配置變更的自動化,但這類原生方案會存在依賴嚴重、釋出延時高的問題。

在傳統架構中,如果配置資訊有變更,通常是登陸伺服器手動修改配置來使配置生效。在微服務架構中,應用數和節點數由於微服務化數量激增,導致釋出次數增加,配置變更難度加大,通常是將應用配置抽象出來放置在外部的配置中心裡,從而實現配置變更的自動化,但這類原生方案會存在依賴嚴重、釋出延時高的問題。

Spring Cloud中的標準配置管理方法和存在的問題
以Spring Cloud為例,其提供了Spring Cloud Config元件來預設對配置進行管理。

關於Spring Cloud Config的工作原理,如下圖所示:

阿里雲ACM:雲原生配置管理利器

和傳統人肉到生產伺服器上一臺臺手動修改配置的思路不同,在Spring Cloud中,當用戶配置發生變化時,使用者可以在Git中修改配置,再通過Spring Cloud Config Server動態下發配置,從而在各個機器上動態生效。其整個流程大概如下:

使用者在Git中update和commit配置;
Spring Cloud Config Server通過回掉,獲取更新配置;
使用者在其中任一一臺機器上執行配置重新整理操作 (圖中為 "post /bus/refresh")
目標機 (App A)在Config Server中拉取最新配置,併發送訊息到訊息匯流排中,通知其他機器配置被變更;
所有其他機器通過訊息匯流排獲知配置重新整理後,在Config Server中拉取最新配置。
至此,配置修改完成。

Spring Cloud Config元件成功的以配置中心思路解決了靜態配置繁瑣的運維問題,但是Spring Cloud Config仍存在以下問題:

標準方案依賴Git。雖然提供其他儲存支援,但是標準的Git方案飽受爭議,畢竟Git運維在業界算是小眾領域,在關鍵的生產環境中使用得並不多(開發測試環境除外);
配置變更依賴Cloud Bus,架構複雜的同時,存在配置的一致性問題;
整個配置的時效性較低。由於釋出路徑長,中間存在多個非同步操作,因此從釋出到最後所有配置生效,延時可能會是分鐘級別。
阿里雲ACM為spring cloud帶來的配置管理優化
阿里雲應用配置管理服務ACM,作為Nacos的雲上實現,可以將以上的配置管理問題進行優化,配置修改將變得異常簡單和高效,如下圖所示。

阿里雲ACM:雲原生配置管理利器

整個操作流程分為兩步:

使用者在ACM中修改配置內容;
ACM動態推送到所有應用中。
ACM全面相容Spring框架介面,包括Spring Framework、Spring Boot和Spring Cloud,其為 Spring Cloud編寫的應用配置管理,和Spring Cloud Config對比,由於極簡的架構,帶來了眾多的好處:

配置變更推送效能高,根據阿里巴巴內部的效能統計來看,絕大多數情況下,配置推送0.5秒生效,99.9%場景下,3秒以內能推送到上千臺機器;
運維簡單,不需要額外的Git儲存或Cloud Bus元件,單應用介面即可完成所有配置中心功能;
遵循開源精神,ACM作為Nacos的雲上實現,使用者無需額外付費即可使用全部功能。
Spring Cloud使用者可以基於Spring Cloud Config提供的介面將Spring Cloud應用的配置管理無縫遷移到ACM上,大幅度提升基於Spring Cloud框架的微服務應用的配置管理敏捷性。此外,相比於Spring Cloud Config,ACM還擁有多項實用功能,例如,雲上配置安全合規,配置灰度釋出和回滾等。

如何快速部署ACM
使用Spring Cloud的使用者在阿里雲上如果要從Spring Cloud Config切換成ACM方案,在程式業務層程式碼無需任何改動,原生@Value標籤直接有效。使用者僅僅需要改動Spring Cloud應用的兩個編譯配置檔案即可。

1、修改配置檔案

在 bootstrap.properties中新增ACM的連線地址和認證資訊,示例如下。其中,endpoint、namesspace、accessKey和secretKey等引數在ACM控制檯上可以直接獲取。

阿里雲ACM:雲原生配置管理利器

指定spring.application.name和spring.coud.nacos.config.file以後,將決定ACM控制檯上配置名,如上例中,配置名為com.alibaba.nacos.example.properties。

2、在 pom 中新增相關的nacos starter依賴

如下圖所示。

阿里雲ACM:雲原生配置管理利器

以上兩處修改完成之後,重新打包編譯Spring Cloud程式,即可將配置管理轉為ACM託管。

Spring Cloud 程式碼和配置變更例項
以Spring Cloud程式碼示例為例,/echo 介面將返回動態配置引數 configValue 的值。

阿里雲ACM:雲原生配置管理利器

將以下程式碼片段示例打包執行,並在對應ACM控制檯上新增配置,設定對應配置名DataID (本例中為com.alibaba.nacos.example.properties),並點擊發布。

阿里雲ACM:雲原生配置管理利器

最後在本地執行curl命令,假設http監控埠為8080:

阿里雲ACM:雲原生配置管理利器

則將返回:

阿里雲ACM:雲原生配置管理利器

返回true值後,即配置成功。詳細的程式例項,可參照[ACM官方文件]()。