ACM 産品介紹
應用配置管理 ACM(Application Configuration
Management)前身為淘寶内部配置中心
Diamond,是一款在分布式架構環境中對應用配置進行“集中管理”和“動态推送”的配置中心産品。利用
ACM,您可以在微服務、DevOps、大資料等場景下極大減輕配置管理的工作量,并增強配置管理的服務能力。
核心功能

- 統一管控 :您可以在 ACM 的控制台統一管理所有應用的配置,而不再像傳統配置那樣,分散在各處。
- 動态推送 :當你在 ACM 控制台修改了配置, ACM 能夠實時将修改後的配置推送到接入 ACM 服務的應用程序中。
- 版本管理 :ACM 控制台保留配置變更各個曆史版本,目前你發現誤修改配置後,能夠快速得復原,降低影響面。
- 灰階釋出 :有一些配置是相對比較重要,一旦變更,可能會帶來很大的影響。通過灰階釋出功能,您可以讓新配置在少數的幾台機器上生效,待觀察服務到達預期,并對業務沒有負面的影響,之後,再将配置全量釋出。
- 推送軌迹 :通過推送軌迹,您可以查到到那些 IP 在什麼時間點來拿過配置。當您釋出配置後,想看看有哪些機器已經來擷取最新配置了,就可以通過它來檢視。
ACM 應用場景
場景 1:微服務應用架構下的配置管理
在微服務架構下,随着應用和機器數目的增多,配置(如
DB_URL 通路資訊、服務連接配接池、服務内部緩存大小等)管理的工作會變得很繁瑣。單個應用下多個機器的配置分發,應用對應用的配置依賴,都将成為挑戰。在傳統架構的應用釋出過程中,修改一個應用配置就需要将整個應用重新打包釋出,整個過程非常繁瑣,且容易出錯。
在基于 ACM 的微服務場景下,應用的重要配置資訊被釋出到 ACM 中。新的配置釋出并不依賴配置打包。在新版本的配置釋出後,所有應用立即生效。
在微服務應用架構下使用 ACM 帶來的好處:
- 所有配置中心化,在應用衆多的情況下配置管理變得更加友善。
- 所有配置不依賴版本釋出,使得配置變更更加靈活。
- ACM 天生支援灰階釋出和復原,使得配置的變更釋出在微服務架構下變得更加安全。
場景 2:分布式架構下的服務治理
在各類分布式架構下,基于某類 RPC 架構(RESTful,HSF,Dubbo 等)做好服務治理是非常關鍵的。其中,服務治理的服務路由、服務限流、服務降級、服務鑒權等功能,均可通過配置中心實作。
以限流降級為例,在阿裡巴巴雙11,每一次服務限流降級相關操作都要求秒級響應,此需求就通過
ACM 來實作。其中,每個 RPC 的服務端都會通過 ACM 注冊監聽對應服務的流控管理資訊。
當應用需要流控時,管理者在服務治理控制台做出限流操作,服務治理系統就會通過
ACM 将流控資訊推送到對應的目标應用服務端,讓應用服務端對應配置采取相應的限流動作。
在分布式架構下使用 ACM 帶來的好處:
- 性能良好,通過采用配置推送的方式來監聽服務治理資訊,對性能幾乎無影響。
- 響應時間迅速,相關的服務治理資訊可以被秒級推送。
- 安全性高,當限流降級錯推以後還可以通過秒級配置復原來恢複狀态
場景 3:企業級網際網路架構下的異地多活場景
異地多活是企業級網際網路架構中的一種進階容災架構。相對于傳統容災架構,有業務恢複時間短,容量需求低,運維快捷簡單等特點。目前異地多活架構被阿裡巴巴和餓了麼等公司廣泛采用。
在阿裡巴巴内部,容災多活架構的核心算法、ID 分片和對應的的路由規則均采用 ACM 來動态推送。其中,相應的用戶端和服務端,如 RPC,MQ,DB 都植入了路由路徑。當容災演練或者真實災難發生時,管理者隻需要動态地推送規則,相應的規則會影響到所有架構元件。
采用 ACM 為異地多活場景中的應用帶來以下好處:
- 基礎架構和容災邏輯解耦,具體的路由邏輯由容災規則切換決定。
- 生效快,理論上容災的切換規則可以秒級推送到十萬級别機器。
ACM 與 Nacos 的關系
Nacos 是阿裡中間件今年 7 月開源的産品,包括配置管理、服務管理、動态 DNS 服務、服務中繼資料管理等功能,其中的 Nacos 配置管理子產品是跟 ACM 完全對等的,是以 Nacos 的用戶端,包括 nacos-client、 nacos-spring-context 等,隻需設定了連接配接 ACM 服務所需的 endpoint、namespace、access key、secret key,就可以直接通路 ACM 的服務。
兩者對比如下:
ACM 如何支援 Spring
如上所述,Nacos 的用戶端可以直接通路 ACM 服務,ACM 支援 Spring 也就是通過
nacos-spring-context來支援的。
Nacos Spring 提供的一些注解如下:
除了注解外,Nacos Spring 還提供了一些事件,在配置釋出、删除等操作時能傳播事件出來,友善使用者做日志或者審計相關的工作,如下:
示例
- ACM Spring 示例一:配置變更動态更新、依賴注入 ConfigService @EnableNacosConfig + @NacosPropertySource + @NacosValue + @NacosInjected
- ACM Spring 示例二:設定配置變更後的回調方法 @EnableNacosConfig + @NacosConfigListener
- ACM Spring 示例三:xml 方式,資料庫連接配接池 Druid、配合 MyBatis nacos:annotation-driven + nacos:global-properties + nacos:property-source
- ACM Spring 示例四:多個配置,将應用配置、資料庫連接配接配置、Redis 配置都存放到 ACM 中,示範如何動态從查資料庫降級為查緩存 @EnableNacosConfig + @NacosPropertySources + @NacosValue
- ACM Spring 示例五:将配置直接轉化為一個 POJO @EnableNacosConfig + @NacosConfigurationProperties
ACM 如何支援 Spring Boot
Nacos Spring Boot 底下是封裝了 Nacos Spring ,是以,上面描述的 Nacos Spring 的注解、功能都可以在引入
Nacos Spring Boot 的依賴之後直接使用。
另外,Nacos Spring Boot 在 Nacos Spring 的基礎上做了 Spring Boot Actuator 服務監控和管理相關的 Endpoint 和 Health Check。
- ACM Spring Boot 示例:配置變更動态更新、Endpoint、Health Check @NacosPropertySource + @NacosValue
ACM 如何支援 Spring Cloud
Nacos Spring Cloud 是屬于
Spring Cloud Alibaba中的一個子子產品,支援從 Spring Cloud Config 平滑遷移過來,相對于 Spring Cloud Config,有更多的優勢:
- ACM Spring Cloud 示例一:配置變更動态更新、依賴注入 ConfigService bootstrap.properties + @RefreshScope + @Value
- ACM Spring Cloud 示例二:多個配置,将應用配置、資料庫連接配接配置、Redis 配置都存放到 ACM 中,示範如何動态從查資料庫降級為查緩存 bootstrap.properties (多個配置) + @RefreshScope + @Value