在集羣調用失敗時,Dubbo 提供了多種容錯方案,缺省爲 failover 重試。算法
各節點關係:
- 這裏的 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" />
複製代碼
或bash
<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" />
複製代碼