全部產品
Search
文件中心

Microservices Engine:MSE註冊配置中心高可用最佳實務

更新時間:Sep 26, 2024

通過MSE註冊配置中心提供的高可用能力,可以有效提升應用應對風險的能力。根據高可用的範圍,可以將具體實踐分為註冊配置中心執行個體高可用、服務發現高可用以及組態管理高可用。本文以MSE註冊配置中心專業版為例進行闡述。

版本推薦

  • spring-cloud-alibaba:推薦使用2.2.6.RELEASE及以上版本。

  • dubbo:推薦使用2.7.12及以上版本。

  • spring-boot:推薦使用2.3.x及以下版本,2.4.x版本存在相容問題,不推薦使用。

註冊配置中心執行個體高可用

  • 高可用架構

    沒有任何服務百分百可用,如果您的業務有更高的高可靠性和資料安全需求,建議選擇不少於3個節點進行執行個體部署。當其中某個執行個體故障時,節點間秒級完成切換,故障節點自動離群。

    專業版註冊配置中心基於Nacos 2.0新架構基礎之上,在高可用方面降低了對底層基礎設施的依賴,進一步提升了容災能力。相關內容,請參見執行個體及版本選型

  • 多可用性區域

    MSE每個地區都包含多個可用性區域。處於同一個地區中不同可用性區域的應用相互之間網路延遲很小(3 ms以內),同時提供了故障隔離。多可用性區域執行個體將物理伺服器部署在不同的可用性區域,當可用性區域A出現故障時,流量會在短時間內切換到另一個可用性區域B。整個過程您無需感知,應用代碼無需變更。您只需配置多個節點部署,MSE自動部署到多個可用性區域。

    圖 1. MSE三節點同城雙活架構圖MSE三節點同城雙活架構圖

    圖 2. 多級容災架構多級容災架構

服務發現高可用實踐

服務發現包含服務消費者(Consumer)服務提供者(Provider)。其中服務消費者(Consumer)提供推空保護能力,服務提供者(Provider)提供容災保護能力。

服務消費者(Consumer)

服務消費者(Consumer)會從註冊中心上訂閱服務提供者(Provider)的執行個體列表。沒有任何服務百分百可用,註冊中心在進行變更(變更配置、升降級)或遇到突發情況(例如,可用性區域斷網斷電)時,都有可能導致訂閱異常,影響服務消費者(Consumer)的可用性。

為了應對不可預知的情況下訂閱列表異常,可以在Consumer側配置推空保護。服務調用方推空保護

  • 無推空保護時:Consumer訂閱到空列表,業務中斷報錯。

  • 開啟推空保護:Consumer訂閱到空列表,推空保護生效,丟棄變更,保障商務服務可用。

配置方式

說明

目前僅支援nacos-java-client 1.4.1及以上版本,關於Spring Cloud和Dubbo應用的版本,請參見版本推薦

  • Spring Cloud應用

    在配置中增加如下配置:

    spring.cloud.nacos.discovery.namingPushEmptyProtection=true
  • Dubbo應用

    registry.url裡添加以下參數:

    namingPushEmptyProtection=true

持久化緩衝

用戶端的推空保護生效後,如果您使用容器進行部署,當容器重啟後,可能會丟失緩衝目錄。因此需要將推送緩衝的目錄進行持久化(掛載Volume)。

緩衝目錄為:${user.home}/nacos/naming/${namespaceId}

服務提供者(Provider)

服務提供者(Provider)容災保護主要用於避免叢集在異常流量下出現雪崩。

說明

nacos-java-client 2.x版本註冊的Provider暫時不支援Provider側的容災。

  • 無容災保護

    無容災保護

    當來自Consumer端的請求量突然增加時,如果Provider容量水位較高,會導致個別Provider發生故障:

    1. 註冊中心會將故障節點摘除,全量流量會給剩餘節點。

    2. 剩餘Provider節點負載變高,大機率也會發生故障。

    3. 最終所有Provider節點故障,100%無法提供服務。

  • 有容災保護

    開啟容災保護

    當來自Consumer端的請求量突然增加時,如果Provider容量水位較高,導致個別Provider發生故障:

    1. 註冊中心會將故障節點摘除,全量流量會給剩餘節點。

    2. 故障節點數達到保護閾值,流量平攤給所有執行個體。

    3. 最終保障50%節點能夠提供服務。

開啟容災保護

  • 支援的執行個體範圍

    • 持久化執行個體:完全支援。

    • 非持久化執行個體:

      • nacos-java-client 1.x版本:預設30秒會刪除不健康的執行個體,被刪除的執行個體將不會參與閾值的計算,導致容災策略失效。

      • nacos-java-client 2.x版本:無效。長串連斷開後會立即下線執行個體,容災策略無法生效。

  • 通過命令列配置

    • 調整指定服務的閾值

      curl -X PUT "${nacos.address}/nacos/v1/ns/service?namespaceId=public&serviceName=my-provider&protectThreshold=0.6"
      • ${nacos.address}:註冊中心地址。

      • namespaceId:命名空間(預設值:public)。

      • serviceName:Spring Cloud應用服務名或Dubbo應用介面名。

    • 查詢閾值配置

      curl -X GET "${nacos.address}/nacos/v1/ns/service?namespaceId=public&serviceName=my-provider"
    • 返回結果

      {"namespaceId":"public","groupName":"DEFAULT_GROUP","name":"my-provider","protectThreshold":0.7,"metadata":{},"selector":{"type":"none"},"clusters":[]}

服務治理高可用配置

通過服務治理功能,開啟服務無損上下線、離群執行個體摘除、佈建服務降級等功能,也能夠提高應用可用性。

組態管理高可用實踐

組態管理的高可用能力主要有以下兩個方面,一方面是組態管理用戶端的緩衝目錄及容災目錄,另外一方面是配置中心多維度限流能力。

說明

以下組態管理高可用能力在註冊配置中心專業版中預設開啟,您無需操作。

組態管理

  • 用戶端

    • 緩衝目錄:每次用戶端和配置中心進行資料互動後,會儲存最新的配置內容至本機快取目錄中,當服務端不可用狀態下,會使用本機快取目錄中內容。

    • 容災目錄:當服務端不可用時,可以在本地的容災目錄中手動更新配置內容,用戶端會優先載入容災目錄下的內容,類比服務端變更推送的效果。

  • 配置中心

    配置中心的高可用能力,除了基礎營運層面的高可用外,服務應用程式層部署了多維度限流能力,包括針對串連的單機最大串連限流,單用戶端IP的串連限流能力。發布配置的秒級、分鐘級數量限流,精確到配置維度秒級、分鐘級流量限流等,以降低非正常流量下的服務端宕機風險。