Dubbo示例——叢集容錯

_sanjun發表於2019-04-21

在叢集呼叫失敗時,Dubbo 提供了多種容錯方案,預設為 failover 重試。

Dubbo示例——叢集容錯
各節點關係:

  • 這裡的 Invoker 是 Provider 的一個可呼叫 Service 的抽象,Invoker 封裝了 Provider 地址及 Service 介面資訊
  • Directory 代表多個 Invoker,可以把它看成 List ,但與 List 不同的是,它的值可能是動態變化的,比如註冊中心推送變更
  • Cluster 將 Directory 中的多個 Invoker 偽裝成一個 Invoker,對上層透明,偽裝過程包含了容錯邏輯,呼叫失敗後,重試另一個
  • Router 負責從多個 Invoker 中按路由規則選出子集,比如讀寫分離,應用隔離等
  • LoadBalance 負責從多個 Invoker 中選出具體的一個用於本次呼叫,選的過程包含了負載均衡演算法,呼叫失敗後,需要重選

叢集容錯模式

Failover Cluster

  • 失敗自動切換,當出現失敗,重試其它伺服器 [1]。通常用於讀操作,但重試會帶來更長延遲。可通過 retries="2" 來設定重試次數(不含第一次)。

重試次數配置如下:

<dubbo:service retries="2" />
複製程式碼

<dubbo:reference retries="2" />
複製程式碼

<dubbo:reference>
    <dubbo:method name="findFoo" retries="2" />
</dubbo:reference>
複製程式碼

Failfast Cluster

  • 快速失敗,只發起一次呼叫,失敗立即報錯。通常用於非冪等性的寫操作,比如新增記錄。

Failfast Cluster

  • 快速失敗,只發起一次呼叫,失敗立即報錯。通常用於非冪等性的寫操作,比如新增記錄。

Failsafe Cluster

  • 失敗安全,出現異常時,直接忽略。通常用於寫入審計日誌等操作。

Failback Cluster

  • 失敗自動恢復,後臺記錄失敗請求,定時重發。通常用於訊息通知操作。

Forking Cluster

  • 並行呼叫多個伺服器,只要一個成功即返回。通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。可通過 forks="2" 來設定最大並行數。

Broadcast Cluster

  • 廣播呼叫所有提供者,逐個呼叫,任意一臺報錯則報錯 [2]。通常用於通知所有提供者更新快取或日誌等本地資源資訊。

叢集模式配置

按照以下示例在服務提供方和消費方配置叢集模式

<dubbo:service cluster="failsafe" />
複製程式碼

<dubbo:reference cluster="failsafe" />
複製程式碼

相關文章