Dubbo集羣容錯和負載均衡

  • 0、基礎知識

Dubbo是什麼?

Dubbo是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。緩存

其核心部分包含:安全

  • 遠程通信: 提供對多種基於長鏈接的NIO框架抽象封裝,包括多種線程模型,序列化,以及「請求-響應」模式的信息交換方式。
  • 集羣容錯: 提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集羣支持。
  • 自動發現: 基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方能夠平滑增長或減小機器。

Dubbo能作什麼?

  • 透明化的遠程方法調用,就像調用本地方法同樣調用遠程方法,只需簡單配置,沒有任何API侵入。
  • 軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,下降成本,減小單點。
  • 服務自動註冊與發現,再也不須要寫死服務提供方地址,註冊中心基於接口名查詢服務提供者的IP地址,而且可以平滑添加或刪除服務提供者。

Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置便可,Dubbo基於Spring的Schema擴展進行加載。服務器

主要核心部件網絡

Remoting: 網絡通訊框架,實現了sync-over-async 和 request-response 消息機制.負載均衡

RPC: 一個遠程過程調用的抽象,支持負載均衡、容災和集羣功能框架

Registry: 服務目錄框架用於服務的註冊和服務事件發佈和訂閱。dom

 

  • 一、集羣容錯模式:

   Failover Clusterasync

釋義:失敗自動切換,當出現失敗,重試其它服務器。(缺省)分佈式

應用場景:一般用於讀操做,但重試會帶來更長延遲。性能

設置方法:可經過retries="2"來設置重試次數(不含第一次)。

  Failfast Cluster

釋義:快速失敗,只發起一次調用,失敗當即報錯。

應用場景:一般用於非冪等性的寫操做,好比新增記錄。

  Failsafe Cluster

釋義:失敗安全,出現異常時,直接忽略。

應用場景:一般用於寫入審計日誌等操做。

  Failback Cluster

釋義:失敗自動恢復,後臺記錄失敗請求,定時重發。

應用場景:一般用於消息通知操做。

  Forking Cluster

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

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

設置方法:可經過forks="2"來設置最大並行數。

  Broadcast Cluster

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

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

設置方法:重試次數配置如:(failover集羣模式生效)

<dubbo:serviceretries="2"/>

或:

<dubbo:referenceretries="2"/>

或:

<dubbo:reference>

   <dubbo:methodname="findFoo"retries="2"/>

</dubbo:reference>
  • 二、集羣模式配置如:
<dubbo:servicecluster="failsafe"/>

或:

<dubbo:referencecluster="failsafe"/>

-------------------------------------------------------------------------------------------------------------

  • 三、 負載均衡策略

以上是Dubbo集羣的容錯方式,接下來是在集羣負載均衡時,Dubbo提供了多種均衡策略,缺省爲random隨機調用。

    Random LoadBalance

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

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

    RoundRobin LoadBalance

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

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

    LeastActive LoadBalance

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

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

   ConsistentHash LoadBalance

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

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

四、總結

       Dubbo的集羣容錯和負載均衡一樣也是Dubbo自己的高級特性.正如咱們在說自定義擴展的時候同樣,這兩個特徵一樣也能夠進行自定義擴展,用戶能夠根據本身實際的需求來擴展他們從而知足項目的實際需求.

相關文章
相關標籤/搜索