1. 程式人生 > >dubbo容錯,負載均衡,協議

dubbo容錯,負載均衡,協議

帶來 為什麽 div 字符 廣播 cache lib 基於 調用

8.負載均衡

dubbo提供4種負載均衡方式:
  • Random,隨機,按權重配置隨機概率,調用量越大分布越均勻,默認是這種方式
  • RoundRobin,輪詢,按權重設置輪詢比例,如果存在比較慢的機器容易在這臺機器的請求阻塞較多
  • LeastActive,最少活躍調用數,不支持權重,只能根據自動識別的活躍數分配,不能靈活調配
  • ConsistentHash,一致性hash,對相同參數的請求路由到一個服務提供者上,如果有類似灰度發布需求可采用
dubbo的負載均衡機制是在客戶端調用時通過內存中的服務方信息及配置的負責均衡策略選擇,如果對自己系統沒有一個全面認知,建議先采用random方式。 協議
http://blog.csdn.net/fuyuwei2015/article/details/72848310 Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多種協議,但是Dubbo官網是推薦我們使用Dubbo協議的。下面我們就針對Dubbo的每種協議詳解講解,以便我們在實際應用中能夠正確取舍

dubbo協議

缺省協議,使用基於mina1.1.7+hessian3.2.1的tbremoting交互。
連接個數:單連接
連接方式:長連接
傳輸協議:TCP
傳輸方式:NIO異步傳輸
序列化:Hessian二進制序列化
適用範圍:傳入傳出參數數據包較小(建議小於100K),消費者比提供者個數多,單一消費者無法壓滿提供者,盡量不要用dubbo協議傳輸大文件或超大字符串。
適用場景:常規遠程服務方法調用

為什麽采用異步單一長連接?
因為服務的現狀大都是服務提供者少,通常只有幾臺機器,而服務的消費者多,可能整個網站都在訪問該服務,比如Morgan的提供者只有6臺提供者,卻有上百臺消費者,每天有1.5億次調用,如果采用常規的hessian服務,服務提供者很容易就被壓跨,通過單一連接,保證單一消費者不會壓死提供者,長連接,減少連接握手驗證等,並使用異步IO,復用線程池,防止C10K問題。

rmi協議

Java標準的遠程調用協議。
連接個數:多連接
連接方式:短連接
傳輸協議:TCP
傳輸方式:同步傳輸
序列化:Java標準二進制序列化
適用範圍:傳入傳出參數數據包大小混合,消費者與提供者個數差不多,可傳文件。
適用場景:常規遠程服務方法調用,與原生RMI服務互操作

hessian協議

基於Hessian的遠程調用協議。
連接個數:多連接
連接方式:短連接
傳輸協議:HTTP
傳輸方式:同步傳輸
序列化:表單序列化
適用範圍:傳入傳出參數數據包大小混合,提供者比消費者個數多,可用瀏覽器查看,可用表單或URL傳入參數,暫不支持傳文件。
適用場景:需同時給應用程序和瀏覽器JS使用的服務。

http協議

基於http表單的遠程調用協議。參見:[HTTP協議使用說明]
連接個數:多連接
連接方式:短連接
傳輸協議:HTTP
傳輸方式:同步傳輸
序列化:表單序列化
適用範圍:傳入傳出參數數據包大小混合,提供者比消費者個數多,可用瀏覽器查看,可用表單或URL傳入參數,暫不支持傳文件。
適用場景:需同時給應用程序和瀏覽器JS使用的服務

webservice協議

基於WebService的遠程調用協議。
連接個數:多連接
連接方式:短連接
傳輸協議:HTTP
傳輸方式:同步傳輸
序列化:SOAP文本序列化
適用場景:系統集成,跨語言調用

thrift協議

memcached協議

redis協議

容錯=============================== Dubbo提供了集群部署、路由、負載均衡等容錯機制,在客戶端引用服務時,由MockClusterInvoker封裝具體的集群策略類,默認是FailoverCluster類,具體邏輯見《4.4.2 遠程引用服務》部分

三、集群策略的種類

1)AvailableCluster: 獲取可用的調用。遍歷所有Invokers判斷Invoker.isAvalible,只要一個有為true直接調用返回,不管成功與否;

2)BroadcastCluster: 廣播調用。遍歷所有Invokers, 逐個調用每個調用catch住異常不影響其他invoker調用;

3)FailbackCluster: 失敗自動恢復, 對於invoker調用失敗, 後臺記錄失敗請求,任務定時重發, 通常用於通知;

4)FailfastCluster: 快速失敗,只發起一次調用,失敗立即保錯,通常用於非冪等性操作;

5)FailoverCluster: 失敗轉移,當出現失敗,重試其它服務器,通常用於讀操作,但重試會帶來更長延遲;

dubbo容錯,負載均衡,協議