1. 程式人生 > >dubbo 學習(4) 叢集容錯模式和負載均衡模式

dubbo 學習(4) 叢集容錯模式和負載均衡模式

一、叢集模式

呼叫服務提供者的時候,dubbo提供了各種容錯模式。保證獲取到可用的服務。

各節點關係:

  • 這裡的Invoker是Provider的一個可呼叫Service的抽象,Invoker封裝了Provider地址及Service介面資訊。
  • Directory代表多個Invoker,可以把它看成List<Invoker>,但與List不同的是,它的值可能是動態變化的,比如註冊中心推送變更。
  • Cluster將Directory中的多個Invoker偽裝成一個Invoker,對上層透明,偽裝過程包含了容錯邏輯,呼叫失敗後,重試另一個。
  • Router負責從多個Invoker中按路由規則選出子集,比如讀寫分離,應用隔離等。
  • LoadBalance負責從多個Invoker中選出具體的一個用於本次呼叫,選的過程包含了負載均衡演算法,呼叫失敗後,需要重選。

主要容錯叢集模式可以分為:

Failover Cluster
  • 失敗自動切換,當出現失敗,重試其它伺服器。(預設)
  • 通常用於讀操作,但重試會帶來更長延遲。
  • 可通過retries="2"來設定重試次數(不含第一次)。
Failfast Cluster
  • 快速失敗,只發起一次呼叫,失敗立即報錯。
  • 通常用於非冪等性的寫操作,比如新增記錄。
Failsafe Cluster
  • 失敗安全,出現異常時,直接忽略。
  • 通常用於寫入審計日誌等操作。
Failback Cluster
  • 失敗自動恢復,後臺記錄失敗請求,定時重發。
  • 通常用於訊息通知操作。
Forking Cluster
  • 並行呼叫多個伺服器,只要一個成功即返回。
  • 通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。
  • 可通過forks="2"來設定最大並行數。
Broadcast Cluster
  • 廣播呼叫所有提供者,逐個呼叫,任意一臺報錯則報錯。(2.1.0開始支援)
  • 通常用於通知所有提供者更新快取或日誌等本地資源資訊。

Fallover 模式,可以配置重連次數:

  <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService"  check="true" retries="2"/>

<dubbo:reference>
    <dubbo:method name="findFoo" retries="2" />
</dubbo:reference>

更換為其他叢集模式,配置如下:
 <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService"  check="true" retries="2" cluster="failsafe" />
<dubbo:reference cluster="failsafe" />

二、負載均衡模式

負載均衡選擇一個服務的演算法,和我們平常的所用的演算法類似,包括輪詢,hash選擇,隨機權重選擇

以自行擴充套件負載均衡策略,參見:負載均衡擴充套件

Random LoadBalance
  • 隨機,按權重設定隨機概率。該模式為dubbo的預設模式
  • 在一個截面上碰撞的概率高,但呼叫量越大分佈越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。
RoundRobin LoadBalance
  • 輪循,按公約後的權重設定輪循比率。
  • 存在慢的提供者累積請求問題,比如:第二臺機器很慢,但沒掛,當請求調到第二臺時就卡在那,久而久之,所有請求都卡在調到第二臺上。
LeastActive LoadBalance
  • 最少活躍呼叫數,相同活躍數的隨機,活躍數指呼叫前後計數差。
  • 使慢的提供者收到更少請求,因為越慢的提供者的呼叫前後計數差會越大。
ConsistentHash LoadBalance
  • 一致性Hash,相同引數的請求總是發到同一提供者。
  • 當某一臺提供者掛時,原本發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引起劇烈變動。
  • 預設只對第一個引數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>

相關推薦

dubbo 學習4 叢集容錯模式負載均衡模式

一、叢集模式 呼叫服務提供者的時候,dubbo提供了各種容錯模式。保證獲取到可用的服務。 各節點關係: 這裡的Invoker是Provider的一個可呼叫Service的抽象,Invoker封裝了Provider地址及Service介面資訊。Directory代表多個

設計模式學習--4抽象工廠模式

抽象工廠模式 –產品族的建立 抽線工廠模式的定義:提供一個建立一系列相關或相互依賴物件的介面,而無須指定他們具體的類。抽象工廠模式又稱為Kit模式,它是一種物件建立型模式。和工廠方法模式不同的地方在於抽象工廠模式是提供了建立一系列類的例項的工廠方法。 還是拿

構建之法學習4

控制 重要 protect 運算 包裝 二義性 lin c++ 基類 本周學習的內容是兩人合作 計算機只關心編譯生成的機器碼,你的程序采用哪種縮進風格,變量名有無統一的規範等,與機器碼的執行無關。但是,做一個有商業價值的項目,或者在團隊裏工作,代碼規範相當重要。“代碼規

基於Qt的OpenGL可編程管線學習4- 使用Subroutine繪制不同光照的模型

qt opengl shader subroutine 使用Subroutine在shader中封裝不同的函數,在CPU端選擇調用那個函數效果如下圖所示左側:環境光中間:環境光 + 漫反射右側:環境光 + 漫反射 + 高光1、Subroutine 在shader中的內容subroutine v

Java學習4:統計一個文件中的英文,中文,數字,其他字符以及字符總數

port let args str reader 文件路徑 要求 cnblogs pub 要求:統計一個文件中的英文,中文,數字,其他字符以及字符總數(此隨筆以txt文件為例) import java.io.BufferedReader; import java.io.F

Vue深度學習4-方法與事件處理器

() 一個 span 修飾 語句 特殊變量 方法 left stop 方法處理器 可以用 v-on 指令監聽 DOM 事件: <div id="app"> <button v-on:click = "greet">Greet<

maven--學習4--創建java項目

system key maven 要求 導入項目 一段 ring following start 1. 從 Maven 模板創建一個項目 在終端(* UNIX或Mac)或命令提示符(Windows)中,瀏覽到要創建 Java 項目的文件夾。鍵入以下命令: mvn arche

perl學習4正則表達式處理文本

接收 沒有 per tdi 自動 int con class 開頭 一:  進行本章學習前的一些知識儲備 1:  Perl最喜歡用的默認變量:$_(摘於perl語言入門78頁)    假如在foreach循環開頭省略空置變量,Perl就會用它最喜歡的默認變量$_。

Spring框架學習4spring整合hibernate

location host mage too 自動 exception 4.0 數據庫連接 find 內容源自:spring整合hibernate spring整合註解形式的hibernate 這裏和上一部分學習一樣用了模板模式, 將hibernate開發流程封裝在O

caffe的python接口學習4mnist實例手寫數字識別

數字 interval with lac EDA 變化 mode 指數 lB 以下主要是摘抄denny博文的內容,更多內容大家去看原作者吧   一 數據準備   準備訓練集和測試集圖片的列表清單;   二 導入caffe庫,設定文件路徑    # -*- coding: u

Spring學習4IOC容器配置bean:定義與實例化

dimp 工廠類 def 流程 行為 更多 多個 scrip 編譯報錯 一. IOC容器配置   1. 一些概念   (1)IOC容器:   定義:具有管理對象和管理對象之間的依賴關系的容器。   作用:應用程序無需自己創建對象,對象由IOC容器創建並組裝。BeanFac

python學習4

相等 append 求值 4.3 urn erro utf read pri 按位運算 按位 & | ^ ~ >> 3&33>> 3&11>> 2|13 異或^相同為0,不用為1 Is判斷兩個對象是否相等,兩個

Linux基礎學習4

在一起 src info 鏈接 常用 auto ali 分享圖片 ls -l 第四章——Linux常用命令 一.文件處理命令 1.命令格式與目錄處理命令ls: (1)命令格式:命令 [-選項] [參數] 例:ls -la /etc

區塊鏈學習4交易

圖靈 比特幣 生成 入棧 部分 pub png 組合 數字 上次大致講了比特幣的交易模式。接著講講比特幣的交易。比特幣的交易驗證引擎依賴於兩類腳本來驗證比特幣交易:一個鎖定腳本和一個解鎖腳本。 鎖定腳本鎖定了一個輸出值,同時它明確了今後花費這筆輸出的條件。鎖定腳本往往含有一

python學習4--字符串格式化之format()方法

light 網站 pytho com date 其中 格式化字符串 ont python 一、格式化字符串的函數 str.format()增強了字符串格式化的功能。通過 {} 和 : 來代替以前的 % 。 其中format 函數可以接受不限個參數,位置可以不按順序。 st

Arduino學習4

本文介紹使用紅外遙控器向Arduino傳送訊號。 庫檔案: IRremote 下載之後放到D:\Program Files (x86)\Arduino\libraries\RobotIRremote\src目錄下即可(替換為自己安裝Arduino IDE的路徑),如果IRremote

spring學習4

    在spring容器內拼湊bean叫做裝配。裝配bean的時候,需要告訴容器哪些bean以及容器如何使用依賴注入將它們配合在一起。 上下文定義檔案的根元素是<beans>,<beans>中有很多<bean> id不能重複,class要寫全。

robotframework 學習4 :介面測試,返回json資料的獲取驗證

一、前言         上一篇部落格寫了怎麼從excel文件中獲取資料和傳參到介面當中,這一篇文章就記錄一下,獲取到介面返回的引數後的怎麼解析json資料。 二、具體步驟         1、之前看到其

struts2學習4

Struts2攔截器概述 1 Struts2是框架,封裝了很多功能,struts2裡面封裝的概念都是在攔截器裡面 2 Struts2裡面封裝了很多的概念,有很多攔截器,不是每次這些攔截器都執行,每次執行預設的攔截器 3 Struts2裡面預設攔截器位置 攔截器示例程式碼: <i

Mysql資料庫學習4階段性完結

-- 倒序輸出全部使用者的許可權資訊 SELECT * from users order by powers  desc -- 統計女生人數,靈活使用count,看題目要求,你要計算的是什麼? SELECT  COUNT(sid) FROM `student` WHERE sse