天天看點

dubbo——叢集容錯

本文參考dubbo官方文檔,加上自己的了解由來: dubbo官網

dubbo——叢集容錯

一、圖解 1.左側invoker為抽象的可調用Service,它内部封裝了Provider位址和Service接口資訊。 2.Directory:各種invoker,值在動态變化的。 3.Cluster:根據所選擇的模式在2中将那麼多invoker僞裝成1,若失敗,可重試另外一個invoker。 4.Router: 根據不同的路由規則(條件路由或腳本路由)篩選invoker,例如讀寫分離、應用隔離。——詳細看  路由規則 5.LoadBalance:在4篩選後,根據負載均衡算法選出實際的一個具體invoker調用,若失敗,則重新選擇。——詳細看 負載均衡

綜合上述: 1.調用方: Cluster(根據調用模式)->Invoker(内部篩選,到具體一個Invoker)->調通服務 2.内部篩選邏輯: Directory(原本總的invoker)->Router(路由一次篩選)->LoadBalance(負載均衡選)->Invoker(實際上被調用的Invoker)

二、容錯模式: 1.Faukiver Cluster(預設預設):

  • 失敗就自動切換,重試其他伺服器.
  • 用于讀操作,可重試會帶來延遲
  • 通過retries=“2”來設定重試次數(不含第一次)

2.Failfast Cluster

  • 快速失敗,隻發起一次調用,失敗立刻報錯。——報錯最好捕獲,友善自身後續分析
  • 用于非幂等性的寫操作,比如新增記錄

3.Failsafe Cluster

  • 失敗自動回複,背景記錄失敗請求,定時重發。——避免陷入伺服器當機,不斷失敗,不斷定時重發
  • 通常用作消息通知操作

4.Forking Cluster

  • 并行調用多個伺服器,成功一個即傳回
  • 用于實時性高的讀操作,但需要浪費更多服務資源。—— 典型的 性能和硬體 之争,協調好二者,本人還是比較推薦這個模式的。
  • 可通過forks=“2”設定最大的并行數

5.Broadcast Cluster

  • 廣播所有提供者,逐一調用,任意一台報錯則報錯
  • 用于通知各個提供者更新緩存或日志等本地資源

附: 叢集模式配置:

<

dubbo:service

cluster

=

"failsafe"

/> 或

<

dubbo:reference

cluster

=

"failsafe"

/>

重試次數配置:

<

dubbo:service

retries

=

"2"

/>

<dubbo:reference retries="2" />

<

dubbo:reference

>

<

dubbo:method

name

=

"findFoo"

retries

=

"2"

/>

</

dubbo:reference

>

繼續閱讀