Dubbo學習筆記(四)叢集容錯與負載均衡
叢集容錯
在叢集呼叫失敗時,Dubbo 提供了多種容錯方案,預設為 failover 重試。
Failover Cluster
失敗自動切換,當出現失敗,重試其它伺服器 1。通常用於讀操作,但重試會帶來更長延遲。可通過 retries=”2” 來設定重試次數(不含第一次)。
重試次數配置如下,三種選擇一種:
<dubbo:service retries="2" />
<dubbo:reference retries="2" />
<dubbo:reference>
<dubbo:method name="findFoo" retries="2" />
</dubbo:reference>
Failfast Cluster
快速失敗,只發起一次呼叫,失敗立即報錯。通常用於非冪等性的寫操作,比如新增記錄。
Failsafe Cluster
失敗安全,出現異常時,直接忽略。通常用於寫入審計日誌等操作
Failback Cluster
失敗自動恢復,後臺記錄失敗請求,定時重發。通常用於訊息通知操作。
Forking Cluster
並行呼叫多個伺服器,只要一個成功即返回。通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。可通過 forks=”2” 來設定最大並行數。
Broadcast Cluster
廣播呼叫所有提供者,逐個呼叫,任意一臺報錯則報錯 2。通常用於通知所有提供者更新快取或日誌等本地資源資訊。
舉例
叢集模式配置
按照以下示例在服務提供方和消費方配置叢集模式
<dubbo:service cluster="failsafe" />
<dubbo:reference cluster="failsafe" />
負載均衡
在叢集負載均衡時,Dubbo 提供了多種均衡策略,預設為 random 隨機呼叫
Random LoadBalance
隨機,按權重設定隨機概率。
在一個截面上碰撞的概率高,但呼叫量越大分佈越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。
RoundRobin LoadBalance
輪循,按公約後的權重設定輪循比率。
存在慢的提供者累積請求的問題,比如:第二臺機器很慢,但沒掛,當請求調到第二臺時就卡在那,久而久之,所有請求都卡在調到第二臺上。
LeastActive LoadBalance
最少活躍呼叫數,相同活躍數的隨機,活躍數指呼叫前後計數差。
使慢的提供者收到更少請求,因為越慢的提供者的呼叫前後計數差會越大。
ConsistentHash LoadBalance
一致性 Hash,相同引數的請求總是發到同一提供者。
當某一臺提供者掛時,原本發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引起劇烈變動。
演算法參見:http://en.wikipedia.org/wiki/Consistent_hashing
預設只對第一個引數 Hash,如果要修改,請配置
<dubbo:parameter key="hash.arguments" value="0,1" />
預設用 160 份虛擬節點,如果要修改,請配置
<dubbo:parameter key="hash.nodes" value="320" />
配置舉例
<!-- 服務端服務級別-->
<dubbo:service interface="..." loadbalance="roundrobin" />
<!-- 客戶端服務級別-->
<dubbo:reference interface="..." loadbalance="roundrobin" />
<!-- 服務端方法級別-->
<dubbo:service interface="...">
<dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>
<!-- 客戶端方法級別-->
<dubbo:reference interface="...">
<dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:reference>
可以指定某個方法的策略,也可以是服務級別的策略. 一般就是服務級別的策略. 目前沒想到方法級別策略何用,本人理解的這個一般由客戶端來決定.
相關文章
- Java程式設計解密-Dubbo負載均衡與叢集容錯機制Java程式設計解密負載
- dubbo叢集和負載均衡負載
- dubbo容錯機制和負載均衡負載
- 負載均衡叢集負載
- Dubbo剖析-叢集容錯
- Dubbo示例——叢集容錯
- 叢集,lvs負載均衡的四種工作模式負載模式
- SpringCloud學習筆記:負載均衡Ribbon(3)SpringGCCloud筆記負載
- kubernetes叢集內排程與負載均衡負載
- RabbitMQ(四):使用Docker構建RabbitMQ高可用負載均衡叢集MQDocker負載
- haproxy(單機)+mysql叢集負載均衡MySql負載
- orleans叢集及負載均衡實現負載
- Dubbo原始碼分析(四)Dubbo呼叫鏈-消費端(叢集容錯機制)原始碼
- 叢集、負載均衡、分散式的區別與聯絡負載分散式
- 四. SpringCloud負載均衡與呼叫SpringGCCloud負載
- 負載均衡 - MQTT Broker 叢集詳解(一)負載MQQT
- Haproxy+Keepalived高可用負載均衡叢集負載
- 阿里雲負載均衡筆記阿里負載筆記
- Dubbo原始碼分析-叢集容錯之Router原始碼
- Dubbo原始碼分析(八)叢集容錯機制原始碼
- mariadb叢集與nginx負載均衡配置–centos7版本Nginx負載CentOS
- Mysql學習筆記---MySQL叢集架構之擴容方案MySql筆記架構
- nginx學習之負載均衡Nginx負載
- dubbo原始碼解析之負載均衡原始碼負載
- dubbo(三):負載均衡實現解析負載
- Linux環境搭建Nginx+Tomcat負載均衡叢集LinuxNginxTomcat負載
- docker初體驗:docker部署nginx負載均衡叢集DockerNginx負載
- LVS+Keepalive 實現負載均衡高可用叢集負載
- dubbo原始碼解析-叢集容錯架構設計原始碼架構
- 淺談達夢DSC叢集以及負載均衡實現與驗證負載
- Redis學習筆記(十八) 叢集(下)Redis筆記
- Redis學習筆記(十七) 叢集(上)Redis筆記
- ZooKeeper學習筆記一:叢集搭建筆記
- Redis學習筆記八:叢集模式Redis筆記模式
- Dubbo學習筆記筆記
- Dubbo 學習筆記筆記
- Nginx 學習系列(二) ————- 負載均衡Nginx負載
- Nginx 學習系列(二) ------------- 負載均衡Nginx負載