- Failover Cluster模式
這種模式是Dubbo集群容錯默認(rèn)的模式選擇,調(diào)用失敗時尘执,會自動切換草姻,重新嘗試調(diào)用其他節(jié)點(diǎn)上可用的服務(wù)。對于一些冪等性操作可以使用該模式氛改,如讀操作帐萎,因?yàn)槊看握{(diào)用的副作用是相同的,所以可以選擇自動切換并重試調(diào)用胜卤,對調(diào)用者完全透明疆导。可以看到葛躏,如果重試調(diào)用必然會帶來響應(yīng)端的延遲澈段,如果出現(xiàn)大量的重試調(diào)用,可能說明我們的服務(wù)提供方發(fā)布的服務(wù)有問題舰攒,如網(wǎng)絡(luò)延遲嚴(yán)重败富、硬件設(shè)備需要升級、程序算法非常耗時摩窃,等等兽叮,這就需要仔細(xì)檢測排查了。
例如偶芍,可以這樣顯式指定Failover模式充择,或者不配置則默認(rèn)開啟Failover模式,配置示例如下:
<dubbo:service interface="org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService" version="1.0.0"
cluster="failover" retries="2" timeout="100" ref="chatRoomOnlineUserCounterService" protocol="dubbo" >
<dubbo:method name="queryRoomUserCount" timeout="80" retries="2" />
</dubbo:service>
上述配置使用Failover Cluster模式匪蟀,如果調(diào)用失敗一次椎麦,可以再次重試2次調(diào)用,服務(wù)級別調(diào)用超時時間為100ms材彪,調(diào)用方法queryRoomUserCount的超時時間為80ms观挎,允許重試2次琴儿,最壞情況調(diào)用花費(fèi)時間160ms。如果該服務(wù)接口org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService還有其他的方法可供調(diào)用嘁捷,則其他方法沒有顯式配置則會繼承使用dubbo:service配置的屬性值造成。
- Failfast Cluster模式
這種模式稱為快速失敗模式,調(diào)用只執(zhí)行一次雄嚣,失敗則立即報錯晒屎。這種模式適用于非冪等性操作,每次調(diào)用的副作用是不同的缓升,如寫操作鼓鲁,比如交易系統(tǒng)我們要下訂單,如果一次失敗就應(yīng)該讓它失敗港谊,通常由服務(wù)消費(fèi)方控制是否重新發(fā)起下訂單操作請求(另一個新的訂單)骇吭。
-Failsafe Cluster模式
失敗安全模式,如果調(diào)用失敗歧寺, 則直接忽略失敗的調(diào)用燥狰,而是要記錄下失敗的調(diào)用到日志文件,以便后續(xù)審計斜筐。 - Failback Cluster模式
失敗自動恢復(fù)龙致,后臺記錄失敗請求,定時重發(fā)奴艾。通常用于消息通知操作净当。 - Forking Cluster模式
并行調(diào)用多個服務(wù)器内斯,只要一個成功即返回蕴潦。通常用于實(shí)時性要求較高的讀操作,但需要浪費(fèi)更多服務(wù)資源俘闯。
Broadcast Cluster模式
廣播調(diào)用所有提供者潭苞,逐個調(diào)用,任意一臺報錯則報錯(2.1.0開始支持)真朗。通常用于通知所有提供者更新緩存或日志等本地資源信息此疹。