W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
集群調(diào)用失敗時,Dubbo 提供的容錯方案
在集群調(diào)用失敗時,Dubbo 提供了多種容錯方案,缺省為 failover 重試。
各節(jié)點關系:
Invoker
?是 ?Provider
?的一個可調(diào)用 ?Service
?的抽象,?Invoker
?封裝了 ?Provider
?地址及 ?Service
?接口信息Directory
?代表多個 ?Invoker
?,可以把它看成 ?List<Invoker>
? ,但與 ?List
?不同的是,它的值可能是動態(tài)變化的,比如注冊中心推送變更Cluster
?將 ?Directory
?中的多個 ?Invoker
?偽裝成一個 ?Invoker
?,對上層透明,偽裝過程包含了容錯邏輯,調(diào)用失敗后,重試另一個Router
?負責從多個 ?Invoker
?中按路由規(guī)則選出子集,比如讀寫分離,應用隔離等LoadBalance
?負責從多個 ?Invoker
?中選出具體的一個用于本次調(diào)用,選的過程包含了負載均衡算法,調(diào)用失敗后,需要重選可以自行擴展集群容錯策略,參見:集群擴展
失敗自動切換,當出現(xiàn)失敗,重試其它服務器。通常用于讀操作,但重試會帶來更長延遲。可通過? retries="2"
?來設置重試次數(shù)(不含第一次)。
重試次數(shù)配置如下:
<dubbo:service retries="2" />
或
<dubbo:reference retries="2" />
或
<dubbo:reference>
<dubbo:method name="findFoo" retries="2" />
</dubbo:reference>
提示
該配置為缺省配置
快速失敗,只發(fā)起一次調(diào)用,失敗立即報錯。通常用于非冪等性的寫操作,比如新增記錄。
失敗安全,出現(xiàn)異常時,直接忽略。通常用于寫入審計日志等操作。
失敗自動恢復,后臺記錄失敗請求,定時重發(fā)。通常用于消息通知操作。
并行調(diào)用多個服務器,只要一個成功即返回。通常用于實時性要求較高的讀操作,但需要浪費更多服務資源??赏ㄟ^ ?forks="2"
?來設置最大并行數(shù)。
廣播調(diào)用所有提供者,逐個調(diào)用,任意一臺報錯則報錯。通常用于通知所有提供者更新緩存或日志等本地資源信息。
現(xiàn)在廣播調(diào)用中,可以通過 broadcast.fail.percent 配置節(jié)點調(diào)用失敗的比例,當達到這個比例后,BroadcastClusterInvoker 將不再調(diào)用其他節(jié)點,直接拋出異常。 broadcast.fail.percent 取值在 0~100 范圍內(nèi)。默認情況下當全部調(diào)用失敗后,才會拋出異常。 broadcast.fail.percent 只是控制的當失敗后是否繼續(xù)調(diào)用其他節(jié)點,并不改變結果(任意一臺報錯則報錯)。broadcast.fail.percent 參數(shù) 在 dubbo2.7.10 及以上版本生效。
Broadcast Cluster 配置 broadcast.fail.percent。
broadcast.fail.percent=20 代表了當 20% 的節(jié)點調(diào)用失敗就拋出異常,不再調(diào)用其他節(jié)點。
@reference(cluster = "broadcast", parameters = {"broadcast.fail.percent", "20"})
提示
?2.1.0
?開始支持
調(diào)用目前可用的實例(只調(diào)用一個),如果當前沒有可用的實例,則拋出異常。通常用于不需要負載均衡的場景。
將集群中的調(diào)用結果聚合起來返回結果,通常和group一起配合使用。通過分組對結果進行聚合并返回聚合后的結果,比如菜單服務,用group區(qū)分同一接口的多種實現(xiàn),現(xiàn)在消費方需從每種group中調(diào)用一次并返回結果,對結果進行合并之后返回,這樣就可以實現(xiàn)聚合菜單項。
多注冊中心訂閱的場景,注冊中心集群間的負載均衡。對于多注冊中心間的選址策略有如下四種
preferred="true"
?注冊中心的地址將被優(yōu)先選擇<dubbo:registry address="zookeeper://127.0.0.1:2181" preferred="true" />
<dubbo:registry address="zookeeper://127.0.0.1:2181" zone="beijing" />
<dubbo:registry id="beijing" address="zookeeper://127.0.0.1:2181" weight="100" />
<dubbo:registry id="shanghai" address="zookeeper://127.0.0.1:2182" weight="10" />
按照以下示例在服務提供方和消費方配置集群模式
<dubbo:service cluster="failsafe" />
或
<dubbo:reference cluster="failsafe" />
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: