一、什么叫Dubbo服務集群
指把同一個服務部署到多台機器,然后通過Dubbo服務集群的容錯配置實現一台機器的服務掛掉之后自動切換到另外的一台機器
二、Dubbo服務集群容錯配置——集群容錯模式
標簽:<dubbo:service>、<dubbo:reference>、<dubbo:consumer>、<dubbo:provider>
屬性:cluster
類型:string
是否必填:可選
缺省值:failover
作用:性能調優
集群方式:可選:failover/failfast/failsafe/failback/forking
兼容性:2.0.5以上版本
1、Failover Cluster(dubbo缺省配置)
失敗自動切換,當出現失敗,重試其它服務器(缺省)。通常用於讀操作,但重試會帶來更長延遲。可通過retries="2"來設置重試次數(不含第一次),retries的值是根據你的服務部署了多少台機器來設置的,比如你的同一個服務在三台機器上都部署了,那么retries的值就設置為2.
1.1 可以在服務提供方配置,不配置時也是默認的如下配置
<dubbo:service cluster="failover" retries="2" />
1.2 可以在服務消費方配置,不配置時也是默認的如下配置
<dubbo:reference cluster="failover" retries="2" />
1.3 可以在消費方指定調用某個方法失敗時的重試調用次數
<dubbo:reference>
<dubbo:method name="findFoo" retries="2" />
</dubbo:reference>
2、Failfast Cluster
快速失敗,只發起一次調用,失敗立即報錯。通常用於非冪等性的寫操作,比如新增記錄。
2.1 可以在服務提供方配置
<dubbo:service cluster="failfast" />
2.2 可以在服務消費方配置
<dubbo:reference cluster="failfast" />
3、Failsafe Cluster
失敗安全,出現異常時,直接忽略。通常用於寫入審計日志等操作。
3.1 可以在服務提供方配置
<dubbo:service cluster=""failsafe"" />
3.2 可以在服務消費方配置
<dubbo:reference cluster=""failsafe"" />
4、Failback Cluster
失敗自動恢復,后台記錄失敗請求,定時重發。通常用於消息通知操作。
4.1 可以在服務提供方配置
<dubbo:service cluster="failback" />
4.2 可以在服務消費方配置
<dubbo:reference cluster="failback" />
5、Forking Cluster
並行調用多個服務器,只要一個成功即返回。通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。可通過forks="2"來設置最大並行數。
5.1 可以在服務提供方配置
<dubbo:service cluster="forking" />
5.2 可以在服務消費方配置
<dubbo:reference cluster="forking" />
三、集群容錯配置的選擇
一般情況下failover(讀操作)和failfast(寫操作)就可以滿足需求;failover集群容錯的retries的屬性值改為"0"時等價於failfast
四、服務啟動依賴檢查
1. 啟動依賴檢查的作用
Dubbo 缺省會在啟動時檢查依賴的服務是否可用,不可用時會拋出異常,阻止 Spring 初始化完成,以便上線時,能及早發現問題,默認 check="true"。
2. 可以通過 check="false" 關閉檢查,那么什么時候不需要啟動依賴檢查呢
2.1 測試時,有些服務不關心,或者出現了循環依賴,必須有一方先啟動。
2.2 如果你的 Spring 容器是懶加載的,或者通過 API 編程延遲引用服務,請關閉 check,否則服務臨時不可用時,會拋出異常,拿到 null 引用,如果 check="false",總是會返回引用,當服務恢復時,能自動連上。
3. 通過 spring 配置依賴檢查
3.1 關閉某個服務的啟動時檢查 (沒有提供者時報錯):
<dubbo:reference interface="com.foo.BarService" check="false" />
3.2 關閉所有服務的啟動時檢查 (沒有提供者時報錯):
<dubbo:consumer check="false" />
3.3 關閉注冊中心啟動時檢查 (注冊訂閱失敗時報錯,一般不關閉):
<dubbo:registry check="false" />
4. 通過 dubbo.properties
dubbo.reference.com.foo.BarService.check=false
dubbo.reference.check=false
dubbo.consumer.check=false
dubbo.registry.check=false
說明:
dubbo.reference.check=false,強制改變所有 reference 的 check 值,就算配置中有聲明,也會被覆蓋。
dubbo.consumer.check=false,是設置 check 的缺省值,如果配置中有顯式的聲明,如:<dubbo:reference check="true"/>,不會受影響。
dubbo.registry.check=false,前面兩個都是指訂閱成功,但提供者列表是否為空是否報錯,如果注冊訂閱失敗時,也允許啟動,需使用此選項,將在后台定時重試。
