dubbo用戶指南閱讀筆記(一)

微服務是SOA的一種昇華,而dubbo是SOA的一種最佳實現(暫時這麼理解)node

需求的變化帶動架構的演進:算法

隨着服務增多,1) URL配置管理變得困難,F5硬件負載均衡單點壓力越來越大。2) 服務間的依賴關係變得錯綜複雜。3) 服務的容量問題,服務須要多少機器支撐?何時該加機器?緩存

這時候咱們須要,1) 服務註冊中心,動態註冊和發現服務。2) 自動畫出服務依賴關係圖。3) 統計服務調用量和響應時間,動態調整權重。安全

dubbo服務治理應運而生!服務器

1、架構

0. 服務容器負責啓動,加載,運行服務提供者。架構

1. 服務提供者在啓動時,向註冊中心註冊本身提供的服務。負載均衡

2. 服務消費者在啓動時,向註冊中心訂閱本身所需的服務。dom

3. 註冊中心返回服務提供者地址列表給消費者,若是有變動,註冊中心將基於長鏈接推送變動數據給消費者。ide

4. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,若是調用失敗,選另外一臺調用。微服務

5. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

2、用法

本地服務轉遠程服務:

1. 服務定義部分放在服務提供方remote-provider.xml, 服務引用部分放在服務消費方remote-consumer.xml

2. 並在提供方增長暴露服務配置<dubbo:service>,在消費方增長引用服務配置<dubbo:reference>

3、集羣容錯

在集羣調用失敗時,Dubbo提供多種容錯方案,缺省爲failover重試。

 

這裏的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

並行調用多個服務器,只要一個成功即返回。

一般用於實時性要求較高的讀操做,但須要浪費更多服務資源。

可經過fork="2"來設置最大並行數。

Broadcast Cluster

廣播調用全部提供者,逐個調用,任意一臺報錯則報錯。(2.1.0開始支持)

一般用於通知全部提供者更新緩存或日誌等本地資源信息。

重試次數配置:

<dubbo:service retries="2"/>

或<dubbo:reference retries="2"/>

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

集羣模式配置:

<dubbo:service cluster="failsafe"/>

或<dubbo:reference cluster="failsafe"/>

4、負載均衡

缺省爲random隨機調用

Random LoadBalance

隨機,按權重設置隨機機率。

在一個截面上碰撞的機率高,但調用量越大分佈越均勻,並且按機率使用權重後也比較均勻,有利於動態調整提供者權重。

RoundRobin LoadBalance

輪詢,按公約後的權重設置輪詢比率。

存在慢的提供者累計請求問題,好比:第二臺機器很慢,但沒掛,當請求到第二臺時就卡在那,長此以往,全部請求都卡在調到第二臺上。

LeastActive LoadBalance

最少活躍調用數,相同活躍數的隨機,活躍數指調用先後計數差。

使慢的提供者收到更少的請求,由於越慢的提供者的掉用先後計數差會越大。

ConsistenceHash LoadBalance

一致性Hash, 相同參數的請求老是發到同一提供者。

當某一臺提供者掛時,本來發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引發劇烈變更。

缺省只對第一個參數Hash,若是要修改,請配置<dubbo:parameter key="hash.arguments" value="0,1"/>

缺省使用160份虛擬節點,若是要修改,請配置<dubbo:parameter key="hash.nodes" value="320"/>

5、線程模型

這裏好像優勢複雜,還沒理解。。

相關文章
相關標籤/搜索