Dubbo的架構及用法

1. 介紹

Dubbo |ˈdʌbəʊ| 是阿里下的一個分佈式、高性能、透明化的RPC服務框架,提供服務自動註冊、自動發現等高效服務治理方案的開源框架。算法

1.1. RPC須要解決的問題spring

1.1.1. 通信問題api

主要是經過在客戶端和服務器之間創建TCP鏈接,遠程過程調用的全部交換的數據都在這個鏈接裏傳輸。鏈接能夠是按需鏈接,調用結束後就斷掉,也能夠是長鏈接,多個遠程過程調用共享同一個鏈接。緩存

1.1.2. 尋址問題服務器

A服務器上的應用怎麼告訴底層的RPC框架,如何鏈接到B服務器(如主機或IP地址)以及特定的端口,方法的名稱是什麼,這樣才能完成調用。好比基於Web服務協議棧的RPC,就要提供一個endpoint URI,或者是從UDDI服務上查找。若是是RMI調用的話,還須要一個RMI Registry來註冊服務的地址。網絡

1.1.3. 序列化與反序列化架構

當A服務器上的應用發起遠程過程調用時,方法的參數須要經過底層的網絡協議如TCP傳遞到B服務器,因爲網絡協議是基於二進制的,內存中的參數的值要序列化成二進制的形式,也就是序列化(Serialize)或編組(marshal),經過尋址和傳輸將序列化的二進制發送給B服務器。併發

同理,B服務器接收參數要將參數反序列化。B服務器應用調用本身的方法處理後返回的結果也要序列化給A服務器,A服務器接收也要通過反序列化的過程。app

2. Dubbo架構

Dubbo的架構及用法


2.2. Dubbo註冊中心負載均衡

Ø Multicast註冊中心

Ø Zookeeper註冊中心

Ø Redis註冊中心

Ø Simple註冊中心

2.3. 協議

Dubbo缺省協議採用單一長鏈接和NIO異步通信,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的狀況。

<dubbo:protocol name="dubbo" port="20880" />

URL格式:

dubbo://username:password@host:port/path?key=value&key=value

3. Dubbo優勢

Ø 透明化的遠程方法調用,就像調用本地方法同樣調用遠程方法,只需簡單配置,沒有任何API侵入。

Ø 軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,下降成本,減小單點。

Ø 服務自動註冊與發現,再也不須要寫死服務提供方地址,註冊中心基於接口名查詢服務提供者的IP地址,而且可以平滑添加或刪除服務提供者。

Ø 服務接口監控與治理

Dubbo-admin與Dubbo-monitor提供了完善的服務接口管理與監控功能,針對不一樣應用的不一樣接口,能夠進行 多版本,多協議,多註冊中心管理。

4. 推薦用法

4.1. 在Provider上儘可能多配置Consumer端屬性

Ø timeout 方法調用超時

Ø retries 失敗重試次數,缺省是2(表示加上第一次調用,會調用3次)

Ø loadbalance 負載均衡算法(有多個Provider時,如何挑選Provider調用),缺省是隨機(random)。還能夠有輪詢(roundrobin)、最不活躍優先(leastactive,指從Consumer端併發調用最好的Provider,能夠減小的反應慢的Provider的調用,由於反應更容易累積併發的調用)

Ø actives 消費者端,最大併發調用限制,即當Consumer對一個服務的併發調用到上限後,新調用會Wait直到超時。 在方法上配置(dubbo:method)則併發限制針對方法,在接口上配置(dubbo:service),則併發限制針對服務。

4.2. Provider上配置合理的Provider端屬性

Ø threads 服務線程池大小

Ø executes 一個服務提供者並行執行請求上限,即當Provider對一個服務的併發調用到上限後,新調用會Wait(Consumer可能到超時)。在方法上配置(dubbo:method )則併發限制針對方法,在接口上配置(dubbo:service),則併發限制針對服務。

4.3. 配置上Dubbo緩存文件

提供者列表緩存文件

<dubbo:registry file=」${user.home}/output/dubbo.cache」 />

4.4. 配置優先級

Ø 方法級優先,接口級次之,全局配置再次之。

Ø 若是級別同樣,則消費方優先,提供方次之。

4.5. 推薦XML配置

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

<!-- 提供方應用信息,用於計算依賴關係 -->

<dubbo:application name="ops-provider"/>

<!-- 使用zookeeper註冊中心暴露服務地址 -->

<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>

<!-- 用dubbo協議在20880端口暴露服務 -->

<dubbo:protocol name="dubbo" port="20880"/>

<!-- 設置服務方統一參數 -->

<dubbo:provider timeout="60000" retries="0" accesslog="true"/>

<!-- 聲明須要暴露的服務接口 -->

<dubbo:service interface="com.**.api.UserInfoService" ref="userInfoService"/>

</beans>

5. Dubbo服務劃分

一、接口儘量大粒度,接口中的方法不要以業務流程來,這個流程儘可能在方法邏輯中調用,接口應表明一個完整的功能對外提供;

二、接口應以業務爲單位,業務相近的進行抽象,避免接口數量爆炸

三、參數先作校驗,在傳入接口。

四、要作到在設計接口時,已經肯定這個接口職責、預測調用頻率

6. Dubbo服務高級特性

一、啓動檢查

在啓動某服務時,先檢查該服務所依賴的服務是否可用,不可用則拋出異常,以便上線時,能及早發現問題,默認check=「true」;

二、負載均衡

針對某一方法在db管控臺進行配置

負載算法:隨機(Random LoadBalance)、輪循(RoundRobin)、最少活躍調用數(LeastActive ,越活躍接收請求的機率越大)、一致性hash(ConsistentHash )

三、線程模型:threadpool threads

最大線程數計算方式 ulimit -u命令計算服務器可執行最大線程數

四、只訂閱

只訂閱服務,本身不註冊,例如該服務正在測試,先不能向zk中註冊避免其餘服務調用它報錯

五、只註冊

只註冊服務,不訂閱;應用在集羣中該服務器上無該服務須要調用的服務,就讓他只註冊,指定調用其它服務器上的可用服務

相關文章
相關標籤/搜索