阿里雲ACM:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來

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

Spring Cloud中的標準配置管理方法和存在的問題

以Spring Cloud爲例,其提供了Spring Cloud Config組件來默認對配置進行管理。

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

阿里雲ACM:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來

和傳統人肉到生產服務器上一臺臺手動修改配置的思路不同,在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:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來

整個操作流程分爲兩步:

  • 用戶在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 Cloud應用配置管理舞動起來

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

2、在 pom 中添加相關的nacos starter依賴

如下圖所示。

阿里雲ACM:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來

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

Spring Cloud 代碼和配置變更實例

以Spring Cloud代碼示例爲例,/echo 接口將返回動態配置參數 configValue 的值。

阿里雲ACM:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來

將以下代碼片段示例打包運行,並在對應ACM控制檯上添加配置,設置對應配置名DataID (本例中爲com.alibaba.nacos.example.properties),並點擊發布。

阿里雲ACM:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來

最後在本地運行curl命令,假設http監控端口爲8080:

阿里雲ACM:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來

則將返回:

阿里雲ACM:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來

返回true值後,即配置成功。詳細的程序實例,可參照ACM官方文檔


歡迎關注“阿里巴巴中間件官方微博” ※一個集乾貨與前衛的技術號

阿里雲ACM:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來

歡迎關注“阿里巴巴中間件”官方公衆號,與技術同行。

阿里雲ACM:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章