在集羣調用失敗時,Dubbo 提供了多種容錯方案,缺省爲 failover 重試。
各節點關係:算法
Invoker
是Provider
的一個可調用Service
的抽象,Invoker
封裝了Provider
地址及Service
接口信息Directory
表明多個Invoker
,能夠把它當作List<Invoker>
,但與List
不一樣的是,它的值多是動態變化的,好比註冊中心推送變動Cluster
將Directory
中的多個Invoker
假裝成一個Invoker
,對上層透明,假裝過程包含了容錯邏輯,調用失敗後,重試另外一個Router
負責從多個Invoker
中按路由規則選出子集,好比讀寫分離,應用隔離等LoadBalance
負責從多個Invoker
中選出具體的一個用於本次調用,選的過程包含了負載均衡算法,調用失敗後,須要重選失敗自動切換,當出現失敗,自動切換其餘服務器。一般用於讀操做,但重試會帶來更長延遲。可經過 retries="2" 來設置重試次數(不含第一次)。緩存
快速失敗,只發起一次調用,失敗當即報錯。一般用於非冪等性的寫操做,好比新增記錄。安全
失敗安全,出現異常時,直接忽略。一般用於寫入審計日誌等操做。服務器
失敗自動恢復,後臺記錄失敗請求,定時重發。一般用於消息通知操做。負載均衡
並行調用多個服務器,只要一個成功即返回。一般用於實時性要求較高的讀操做,但須要浪費更多服務資源。可經過forks="2"
來設置最大並行數。ide
廣播調用全部提供者,逐個調用,任意一臺報錯則報錯。一般用於通知全部提供者更新緩存或日誌等本地資源信息。spa