1. 程式人生 > 其它 >分散式RPC框架Apache Dubbo

分散式RPC框架Apache Dubbo

1. 軟體架構的演進過程

軟體架構的發展經歷了由單體架構、垂直架構、SOA架構到微服務架構的演進過程,下面我們分別瞭解 一下這幾個架構。

1.1 單體架構

架構說明:

全部功能集中在一個專案內(All in one)。

架構缺點:

全部功能整合在一個工程中,對於大型專案不易開發、擴充套件和維護。

技術棧受限,只能使用一種語言開發。

系統性能擴充套件只能通過擴充套件叢集節點,成本高。

1.2 垂直架構

架構說明:

按照業務進行切割,形成小的單體專案。

架構優點:

技術棧可擴充套件(不同的系統可以用不同的程式語言編寫)。

架構缺點:

功能集中在一個專案中,不利於開發、擴充套件、維護。

系統擴張只能通過叢集的方式。 專案之間功能冗餘、資料冗餘、耦合性強。

1.3 SOA架構

SOA全稱為Service-Oriented Architecture,即面向服務的架構。它可以根據需求通過網路對鬆散耦合 的粗粒度應用元件(服務)進行分散式部署、組合和使用。一個服務通常以獨立的形式存在於作業系統進 程中。

站在功能的角度,把業務邏輯抽象成可複用的服務,通過服務的編排實現業務的快速再生,目的:把原 先固有的業務功能轉變為通用的業務服務,實現業務邏輯的快速複用。

架構說明:

將重複功能或模組抽取成元件的形式,對外提供服務,在專案與服務之間使用ESB(企業服務匯流排)的 形式作為通訊的橋樑。

架構優點:

重複功能或模組抽取為服務,提高開發效率。

可重用性高。

可維護性高。

架構缺點:

各系統之間業務不同,很難確認功能或模組是重複的。

抽取服務的粒度大。

系統和服務之間耦合度高。

1.4 微服務架構

架構說明:

將系統服務層完全獨立出來,抽取為一個一個的微服務。 抽取的粒度更細,遵循單一原則。 採用輕量級框架協議傳輸。

架構優點:

服務拆分粒度更細,有利於提高開發效率。 可以針對不同服務制定對應的優化方案。 適用於網際網路時代,產品迭代週期更短。

架構缺點:

粒度太細導致服務太多,維護成本高。 分散式系統開發的技術成本高,對團隊的挑戰大。

2. Apache Dubbo概述

2.1 Dubbo簡介

Apache Dubbo是一款高效能的Java RPC框架。其前身是阿里巴巴公司開源的、輕量級的開源Java RPC 框架,可以和Spring框架無縫整合,2018年阿里巴巴把這個框架捐獻給了apache基金會

什麼是RPC?

RPC全稱為remote procedure call,即遠端過程呼叫。比如兩臺伺服器A和B,A伺服器上部署一個應 用,B伺服器上部署一個應用,A伺服器上的應用想呼叫B伺服器上的應用提供的方法,由於兩個應用不 在一個記憶體空間,不能直接呼叫,所以需要通過網路來表達呼叫的語義和傳達呼叫的資料。

需要注意的是RPC並不是一個具體的技術,而是指整個網路遠端呼叫過程。

RPC是一個泛化的概念,嚴格來說一切遠端過程呼叫手段都屬於RPC範疇。各種開發語言都有自己的 RPC框架。Java中的RPC框架比較多,廣泛使用的有RMI、Hessian、Dubbo等。

Dubbo官網地址:http://dubbo.apache.org

Dubbo提供了三大核心能力:面向介面的遠端方法呼叫,智慧容錯和負載均衡,以及服務自動註冊和發現。

2.2 Dubbo架構

Dubbo架構圖(Dubbo官方提供)如下:

節點角色說明:

虛線都是非同步訪問,實線都是同步訪問 藍色虛線:在啟動時完成的功能 紅色虛線(實線)都是程式執行過 程中執行的功能

呼叫關係說明:

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

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

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

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

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

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

3. 服務註冊中心Zookeeper

通過前面的Dubbo架構圖可以看到,Registry(服務註冊中心)在其中起著至關重要的作用。Dubbo官 方推薦使用Zookeeper作為服務註冊中心。

3.1 Zookeeper介紹

Zookeeper 是 Apache Hadoop 的子專案,是一個樹型的目錄服務,支援變更推送,適合作為 Dubbo 服務的註冊中心,工業強度較高,可用於生產環境,並推薦使用 。

為了便於理解Zookeeper的樹型目錄服務,我們先來看一下我們電腦的檔案系統(也是一個樹型目錄結 構):

我的電腦可以分為多個碟符(例如C、D、E等),每個碟符下可以建立多個目錄,每個目錄下面可以創 建檔案,也可以建立子目錄,最終構成了一個樹型結構。通過這種樹型結構的目錄,我們可以將檔案分 門別類的進行存放,方便我們後期查詢。而且磁碟上的每個檔案都有一個唯一的訪問路徑,例如: C:\Windows\kkb\hello.txt。 Zookeeper樹型目錄服務:

流程說明:

服務提供者(Provider)啟動時: 向 /dubbo/com.foo.BarService/providers 目錄下寫入自己的 URL 地址

服務消費者(Consumer)啟動時: 訂閱 /dubbo/com.foo.BarService/providers 目錄下的提供者 URL 地址。並向 /dubbo/com.foo.BarService/consumers 目錄下寫入自己的 URL 地址

監控中心(Monitor)啟動時: 訂閱 /dubbo/com.foo.BarService 目錄下的所有提供者和消費者 URL 地址