Dubbo入門和應用

2021-09-23 20:58:16 字數 3468 閱讀 7498

dubbo 是阿里巴巴公司開源的乙個高效能優秀的服務框架,使得應用可通過高效能的 rpc 實現服務的輸出和輸入功能,以及soa服務治理方案。

(1)主要核心部件:remoting: 網路通訊框架,實現了 sync-over-async 和 request-response 訊息機制.

rpc: 乙個遠端過程呼叫的抽象,支援負載均衡、容災和集群功能

registry: 服務目錄框架用於服務的註冊和服務事件發布和訂閱

(2)幾點我的理解

dubbo使用hessian協議實現,這裡的高效能的 rpc指的就是hessian協;

dubbo是乙個遠端服務呼叫在分布式系統中的乙個實現框架,不再使用以前的web service方式,而是通過服務提供者和消費者的方式呼叫;

並且通過在註冊中心註冊,消費者無需知道提供方的位址,可以通過註冊中心讀取,註冊中心作為中間層,在中間層又可以實現負載均衡等,

這樣就不需要負載均衡硬體,真正的實現大規模分布式系統的遠端服務呼叫;

同時在註冊中心宕機的情況下,支援服務提供者和消費者直接通過位址呼叫,在容錯上表現較好;

並且改變服務提供者不需要通知服務消費者,實現了平滑刪除和新增;

(1)設計結構

暴露服務方稱之為「服務提供者」。

consumer:

呼叫遠端服務方稱之為「服務消費者」。

registry:

服務註冊與發現的中心目錄服務稱之為「服務註冊中心」。

monitor:

統計服務的呼叫次調和呼叫時間的日誌服務稱之為「服務監控中心」。

container:

服務執行容器。

(2)呼叫過程

服務容器負責啟動,載入,執行服務提供者。

服務提供者在啟動時,向註冊中心註冊自己提供的服務。

服務消費者在啟動時,向註冊中心訂閱自己所需的服務。

註冊中心返回服務提供者位址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。

服務消費者,從提供者位址列表中,基於軟負載均衡演算法,選一台提供者進行呼叫,如果呼叫失敗,再選另一台呼叫。

服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。

(3)dubbo的特性

連通性:

健狀性:

伸縮性:

當服務呼叫失敗時(比如響應超時),根據我們的業務不同,可以使用不同的策略來應對這種失敗。

比如我們呼叫的服務是乙個查詢服務,不會修改資料庫,那麼可以給該服務設定容錯方式為failover , 當呼叫失敗時,自動切換到其他服務提供者去呼叫,當失敗次數超過指定重試次數,那麼就丟擲錯誤;

如果服務是更新資料的服務,那就不能使用失敗重試的方式了, 因為這樣可能產生資料重複修改的問題,比如呼叫提供者a的插入使用者方法,但是該方法業務邏輯複雜,執行過程很慢,導致響應超時, 那麼此時如果再去呼叫另外乙個服務提供者的插入使用者方法,將會又重複插入同乙個使用者。 對於這種型別的服務,可以使用容錯方式為failfast,如果第一次呼叫失敗,立即報錯,不需要重試;

另外還有下面幾種容錯型別:

failsafe 出現錯誤,直接忽略,不重試也不報錯

failback 失敗後不報錯,會將該失敗請求,定時重發,適合訊息通知型別的服務

forking 並行呼叫多個伺服器,只要在某一台提供者上面成功,那麼方法返回, 適合實時性要求較高的查詢服務, 但是要犧牲效能。因為每台伺服器會做同乙個操作

broadcast 廣播呼叫所有服務提供者,逐個呼叫,任意一台報錯則報錯。 適合與更新每台提供者上面的快取這種型別的服務。

dubbo提供了多種協議給使用者選擇, 如dubbo、hessian、rmi 。 並可為每個服務指定不同的傳輸協議,粒度可以細化到方法, 不同服務在效能上適用不同協議進行傳輸,比如大資料用短連線協議,小資料大併發用長連線協議。

hessian、spring httpinvoke等。

相比其他同類元件,dubbo有自己的一些優勢:

(1)服務註冊中心

相比hessian類rpc框架,dubbo有自己的服務中心, 寫好的服務可以註冊到服務中心, 客戶端從服務中心尋找服務,然後再到相應的服務提供者機器獲取服務

通過服務中心可以實現集群、負載均衡、高可用(容錯) 等重要功能。

服務中心一般使用zookeeper實現, 也有redis和其他一些方式 。 以使用zookeeper作為服務中心為例, 服務提供者啟動後會在zookeeper的 /dubbo節點下建立提供的服務節點,包含服務提供者ip、port等資訊。 服務提供者關閉時會從zookeeper中移除對應的服務。

服務使用者會從註冊中心zookeeper中尋找服務,同乙個服務可能會有多個提供者, dubbo會幫我們找到合適的服務提供者,也就是針對服務提供者的負載均衡。

(2)負載均衡

當同乙個服務有多個提供者在提供服務時, 客戶端如何正確的選擇提供者實現負載均衡dubbo也給我們提供了幾種方案:

random 隨機選提供者,並可以給提供者設定權重

roundrobin 輪詢選擇提供者

leastactive 最少活躍呼叫數,相同活躍數的隨機,活躍數指呼叫前後計數差。使慢的提供者收到更少請求,因為越慢的提供者的呼叫前後計數差會越大。

consistenthash 一致性hash,相同引數的請求發到同一臺機器上

(3)簡化測試,允許直連提供者

在開發階段為了方便測試,通常系統客戶端能指定呼叫某個服務提供者,那麼可以在引用服務時加乙個url引數去指定服務提供者

1

2

id="***service"inte***ce="com.alibaba.***.***service"url="dubbo://localhost:20890"/>

(4)服務版本,服務分組

在dubbo配置檔案中可以通過制定版本實現連線制定提供者,

也就是通過服務版本可以控**務的不相容公升級;

當同乙個服務有多種實現時,可以使用服務分組進行區分。

dubbo 原理和入門實踐

一。dubbo 遠端服務呼叫的分布式框架 其核心部分包含 1.遠端通訊 提供對多種基於長連線的nio框架抽象封裝,包括多種執行緒模型,序列化,以及 請求 響應 模式的資訊交換方式。2.集群容錯 提供基於介面方法的透明遠端過程呼叫,包括多協議支援,以及軟負載均衡,失敗容錯,位址路由,動態配置等集群支援...

dubbo 入門例子(dubbo一)

registry註冊中心 provider服務中心 consumer消費中心 專案搭建過程 dubbo demo dubbo order dubbo order api dubbo order provider dubbo user dubbo user api dubbo user provide...

Dubbo系列之 Dubbo入門介紹

分布式soa服務治理框架dubbo 背景 隨著網際網路的發展,應用的規模不斷擴大,常規的垂直應用架構已無法應對,分布式服務架構以及流動計算架構勢在必行,亟需乙個治理系統確保架構有條不紊的演進。比較常用的分布式服務治理框架也有很多,比如著名的spring cloud dubbo等 spring clo...