全部產品
Search
文件中心

Application Configuration Management(Deprecated):利用配置中心規範構建 PaaS 服務配置

更新時間:Jul 06, 2024

Message Queue(訊息佇列)是一種常用的非同步 RPC 技術。本文以使用 ACM 對 RocketMQ 實現流量控制的情境為例,介紹如何以規範的配置命名格式來進行限流設定。

遷移到MSE Nacos

ACM進入下線狀態,所有組態管理相關的需求由MSE中的Nacos承接(ACM獨享版,更好的安全和穩定性)。您需要在ACM控制台匯出配置,然後在MSE控制台匯入之前置出的配置即可完成遷移。具體操作,請參見將應用配置從ACM遷移到MSE Nacos

配置規範問題的產生

如果是單一應用的單一屬性配置,使用以下設定檔即可完成,沒有配置規範的問題。

//配置目錄結構
--app
   |--src
      |--config
         |--application.properties
//配置內容
RCV_INTERVAL_TIME=20

但是,如果是為分布式 PaaS 服務編寫分布式規則,PaaS 服務提供者(而非應用方)在設計配置時會遇到許多問題。以 MQ 限流情境為例,可能遇到的問題有:

  • 如何區分全域配置和局部應用配置:例如,PaaS 服務方在統一管控平台提供的服務時,如何既有全域的規則配置,又能針對某個應用進行特殊配置。
  • 如何區分不同叢集 MQ 服務:例如,在保證配置命名統一的情況下,如何區分 MQ1 Cluster 和 MQ2 Cluster 的配置。
  • 如何使用同一套配置中心來隔離 Dev、Test、Staging、Prod 等不同環境。

以上 MQ 限流情境需求如圖所示。

顯然,不恰當的配置命名規範將影響以上配置的易用性。

下文詳細介紹了以規範的配置命名格式來進行限流設定的方法。為了說明配置命名規範,首先需要介紹配置中心的配置結構組織的能力。

配置中心的配置結構功能

除了集中管理配置和訂閱推送等能力,配置中心還具備配置結構化能力,能協助管理員大幅簡化各種複雜應用情境下的組態管理。

1. 配置中心的配置結構能力說明

  • 租戶隔離:配置中心根據使用者或情境對配置進行隔離。使用租戶隔離,不同的配置在不同的租戶可以重名,且具有不同的鑒權機制。
  • 最小配置集合:若干配置通過配置中心組合成一個配置集合。使用最小配置集合來更改和發布不同配置,可實現統一發布和統一處理。配置路徑的概念類似於檔案路徑或者網路網域名稱,它讓不同配置集合之間具有層級關係。
  • 具體配置的 Key-Value 形式:在配置中心中設定具體配置內容。

2. 配置中心配置結構能力產品比較

為了更直觀地說明,我們對比了幾個配置中心產品:

  • 阿里雲 ACM:阿里雲Application Configuration Manangement,前身為 Diamond,是中國最早的配置中心產品。目前在 Git 上有不同開源版本,在阿里雲上有商業版可供使用。
  • Spring Cloud Config:Spring Cloud 官方配置中心工具,主要用於 Java Spring 領域。
  • ZooKeeper:雖然具備部分配置中心能力,但是由於定位於分布式協調資訊管理,因此只適合在應用規模不大的情況下用作配置中心。鑒於其使用廣泛,此處也將其納入對比範圍。

對比詳情如下:

功能ACMSpring Cloud ConfigZooKeeper
租戶級隔離採用 Namespace 和 Group 雙重隔離,其中不同 Namespace 需要不同 AK/SK 鑒權,Group 則不需要。一個 Git 專案為一個租戶。沒有直接可用的租戶隔離技術。
最小配置集合以 DataID 為標識的配置集為最小配置集合。配置集合沒有路徑概念,但是通過合理設計結合萬用字元查詢,可以實現間接配置路徑的目標。Git 專案中的設定檔為最小配置集合,沒有配置路徑概念。Znode 為最小配置集合,有配置路徑概念。
配置 Key-ValueKV 內容由使用者在 DataID 下自由組裝,格式不限,可以是 properties、JSON、XML 等,管理頁面提供校正功能。通過 Git 專案中 properties 形式的設定檔設定 KV。通過設定 Znode 的 Value來設定 KV,內容格式無限制。

綜上所述,ACM 在租戶隔離和最小配置集合方面都有較大的靈活性。下文介紹如何利用 ACM 的 Namespace、Group、DataID 等配置功能來設計一個用於執行 QoS限流策略的合理配置結構。

基於配置中心的分布式服務配置設計最佳實務

1. 配置結構

為了滿足 MQ 配置的功能需求,結合 ACM 的特點,可採用以下配置方法。

  • 以不同 Namespace 隔離不同環境的 MQ 配置。例如:

    • ProdEnv 命名空間用於生產環境,TestEnv 用於測試環境,DevEnv 用於開發環境。
    • 不同環境通過 AK/SK 天然隔離,安全性進一步加強。
  • 用 Group 來區分不同叢集提供的 MQ 服務,可以達到隔離配置和簡化訪問形式的效果。

    • 例如,對於專門為子部門的核心交易部門服務的 MQ 叢集,和為子部門的交易類目部門服務的 MQ 叢集,可通過 Group 區分不同的全域配置。這種方法使所有應用採用同一(子)公司的 AK/SK(或類似認證體系密鑰),因而簡化了部署,有效隔離了不同叢集的配置,降低了配置複雜性。

      DataID: mq.global.qos
      Group: Trading
      
      DataID: mq.global.qos
      Group: ProductCategory
  • 全域配置以全域統一 DataID 命名配置項存放。

    • 其中,配置 ID 以 mq 開頭,global 表示全域配置,QoS 表示 QoS 方面的配置,Group 可使用預設值。

      DataID: mq.global.qos
      Group: Default_Group
  • 應用局部配置以相同尾碼 .qos 來命名 ID。

    • 配置 ID 以 mq 開頭,app.[appname] 表示需要重載的 app 配置項,Group 可使用預設值。

      DataID: mq.app.app1.qos
      Group: Default_Group
      DataID: mq.app.app2.qos
      Group: Default_Group

3. 配置具體 KV 的設定

在很多配置中心產品(例如 Appolo、ACM System Manager Parameter Store)中,每個具體的配置是配置中心最小粒度的嵌入式管理單元,使用者需要在某個粒度上逐一設定配置的 KV,但是 ACM 並沒有該限制。常用做法有兩種:

  • 仿照以上配置中心,將每個 Key 存在一個獨特的 DataID上,例如:
    • mq.global.qos.RCV_INTERVAL_TIME 設定為 50
    • mq.global.qos.MAX_THREAD 設定為 20
  • 將常用配置彙總成一個 DataID,並編輯為一個設定檔(格式不限,例如 Properties、JSON、XML 等)

    • 例如 mq.global.qos 設定如下:

      //MQ 限流 QoS設定
      RCV_INTERVAL_TIME = 50
      MAX_THREAD = 20

在實踐中發現第二種方法不但具有更大的靈活性,而且支援多個配置在一次變更中同時發布,既降低了效能開銷,理論上也達到了變更批量變化的原子操作效果。

4. 配置結構示意圖

以上設計的配置結構示意圖如下:

5. 方案優點總結

  • 通過 Namespace 隔離不同環境,使 MQ 配置項在不同 Namespace 可重複。不同 Namespace 通過管理員、程式 AK/SK 等使用權限設定得到隔離保護,達到配置項統一且各個環境互不干擾的效果。

  • 通過 Group 隔離相同環境的不同叢集,既能保證不同叢集下配置的統一性(如配置名不變等),使代碼更加簡單,又能在邏輯上隔離不同的叢集配置。

  • 通過最小配置集 DataID 的規範命名設定,各 MQ 用戶端即可方便地尋找 MQ Default 全域配置和應用特殊配置。此外,在配置列表頁面上,管理員可通過在關鍵字兩端各加一個星號(*),方便地找出所有 MQ 規則。樣本如下:

參考