Dubbo高階特性應用之叢集容錯

概述

為了避免單點故障,我們的服務通常至少會部署在兩臺伺服器上,特別是一些網際網路應用的服務或負載較高的服務。此時,將會出現多個服務提供者,也就是服務叢集。對於叢集架構,容錯能力是一項很基本的要求。Dubbo框架提供了叢集容錯的支援,在消費者呼叫提供者叢集失敗時,Dubbo提供了多種容錯方案,透過叢集屬性cluster及其附隨屬性進行配置,為我們的服務叢集提供容錯能力。

容錯策略

Dubbo目前提供了6種叢集容錯策略,預設為failover重試。6種叢集容錯策略包括:

failover

失敗自動切換策略。當消費者呼叫提供者叢集中的某個伺服器失敗時,其會自動嘗試著呼叫其它伺服器。該策略通常用於讀操作,例如,消費者要透過提供者從資料庫中讀取某些資料。但重試會帶來服務延遲。重試次數可透過retries屬性指定,預設為2次。注意,設定的重試次數不包括呼叫失敗的第1次。

failfast

快速失敗策略。消費者端只發起一次呼叫,若失敗則立即報錯。通常用於非冪等性的寫操作,比如新增一條記錄。

failsafe

失敗安全策略。所謂的失敗安全是指,當呼叫過程中出現異常時,Dubbo僅會列印異常,而不會丟擲異常。而當消費者呼叫提供者出現異常時,直接忽略本次呼叫。該策略通常用於執行相對不太重要的服務,例如,寫入審計日誌等操作。

failback

失敗自動恢復策略。如果呼叫失敗,Dubbo後臺將記錄本次失敗請求,定時重發,可以透過retries屬性指定重發次數。該策略通常用於實時性要求不太高的服務,比如訊息通知操作。

forking

並行呼叫策略,即並行呼叫多個服務提供者。消費者對於同一服務並行呼叫多個提供者伺服器,只要一個成功即呼叫結束並返回結果。通常用於實時性要求較高的讀操作,但其會浪費較多伺服器資源。可以透過設定forks屬性來指定可以並行呼叫的服務提供者數量。

broadcast

廣播策略。廣播呼叫所有提供者,逐個呼叫,任意一臺報錯則報錯。通常用於通知所有提供者更新快取或日誌等本地資源資訊。

配置叢集容錯策略

容錯策略可以設定在消費者端,也可以設定在提供者端,最小粒度可以設定到方法級別。若消費者與提供者均做了設定,則消費者端的優先順序更高。

在配置叢集方式時,如果cluster屬性設定為failover或failback,可以自定義retries重試次數或使用預設值;如果cluster屬性設定為forking,可以設定forks屬性的大小控制併發呼叫服務的數量;其它的叢集方式,直接設定cluster屬性為對應的值即可。

比如訂單服務,設定為失敗自動切換策略failover,其中get方法重試次數為3,其它方法使用預設重試次數即2次,在服務提供者端進行配置

總結

叢集容錯對於Dubbo框架來說,是很重要的邏輯。對於服務消費者來說,叢集可向其遮蔽服務提供者叢集的情況,使服務消費者可以專心業務邏輯的實現。除此之外,叢集也是效能最佳化很重要的部分。想要對Dubbo有比較深的理解,叢集容錯是必須要掌握的。

Dubbo高階特性應用之叢集容錯

dubbo的叢集容錯策略