溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Dubbo的架構及用法

發(fā)布時間:2020-06-19 07:22:10 來源:網絡 閱讀:437 作者:wx5d30212829a35 欄目:編程語言

1.?介紹

Dubbo |?d?b??| 是阿里下的一個分布式、高性能、透明化的RPC服務框架,提供服務自動注冊、自動發(fā)現等高效服務治理方案的開源框架。

1.1.?RPC需要解決的問題

1.1.1.?通訊問題

主要是通過在客戶端和服務器之間建立TCP連接,遠程過程調用的所有交換的數據都在這個連接里傳輸。連接可以是按需連接,調用結束后就斷掉,也可以是長連接,多個遠程過程調用共享同一個連接。

1.1.2.?尋址問題

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

1.1.3.?序列化與反序列化

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

同理,B服務器接收參數要將參數反序列化。B服務器應用調用自己的方法處理后返回的結果也要序列化給A服務器,A服務器接收也要經過反序列化的過程。

2.?Dubbo架構

Dubbo的架構及用法


2.2.?Dubbo注冊中心

? Multicast注冊中心

??Zookeeper注冊中心

? Redis注冊中心

? Simple注冊中心

2.3.?協議

Dubbo缺省協議采用單一長連接和NIO異步通訊,適合于小數據量大并發(fā)的服務調用,以及服務消費者機器數遠大于服務提供者機器數的情況。

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

URL格式:

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

3.?Dubbo優(yōu)點

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

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

? 服務自動注冊與發(fā)現,不再需要寫死服務提供方地址,注冊中心基于接口名查詢服務提供者的IP地址,并且能夠平滑添加或刪除服務提供者。

? 服務接口監(jiān)控與治理

Dubbo-admin與Dubbo-monitor提供了完善的服務接口管理與監(jiān)控功能,針對不同應用的不同接口,可以進行 多版本,多協議,多注冊中心管理。

4.?推薦用法

4.1.?在Provider上盡量多配置Consumer端屬性

? timeout 方法調用超時

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

? loadbalance 負載均衡算法(有多個Provider時,如何挑選Provider調用),缺省是隨機(random)。還可以有輪詢(roundrobin)、最不活躍優(yōu)先(leastactive,指從Consumer端并發(fā)調用最好的Provider,可以減少的反應慢的Provider的調用,因為反應更容易累積并發(fā)的調用)

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

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

? threads 服務線程池大小

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

4.3.?配置上Dubbo緩存文件

提供者列表緩存文件

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

4.4.?配置優(yōu)先級

? 方法級優(yōu)先,接口級次之,全局配置再次之。

? 如果級別一樣,則消費方優(yōu)先,提供方次之。

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"/>

<!-- 設置服務方統(tǒng)一參數 -->

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

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

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

</beans>

5.?Dubbo服務劃分

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

2、接口應以業(yè)務為單位,業(yè)務相近的進行抽象,避免接口數量爆炸

3、參數先做校驗,在傳入接口。

4、要做到在設計接口時,已經確定這個接口職責、預測調用頻率

6.?Dubbo服務高級特性

1、啟動檢查

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

2、負載均衡

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

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

3、線程模型:threadpool threads

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

4、只訂閱

只訂閱服務,自己不注冊,例如該服務正在測試,先不能向zk中注冊避免其他服務調用它報錯

5、只注冊

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


讀者福利

加微信:haolagui521備注51CTO領取附送學習進階架構資料、PDF書籍文檔、面試資料

Dubbo的架構及用法

Dubbo的架構及用法


Dubbo的架構及用法Dubbo的架構及用法


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI