本文參考dubbo官方文檔,加上自己的了解由來: dubbo官網
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauADMwgzMwgjMwEjMzETPlRXYE52bpRXYjlmZpR2btZSM942bpNnclZXLnBnauIXZ0NXdsN2Lc9Wau8mYiVHZvw1LcpDc0RHaiojIsJye.jpg)
一、圖解 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
- 廣播所有提供者,逐一調用,任意一台報錯則報錯
- 用于通知各個提供者更新緩存或日志等本地資源
附: 叢集模式配置:
|
重試次數配置:
| |
|