分布式RPC框架Apache Dubbo
1. 軟體架構的演程序序
軟體架構的發展經歷了由單體架構、垂直架構、SOA架構到微服務架構的演程序序,下面我們分別了解一下這幾個架構,
1.1 單體架構


1.2 垂直架構


1.3 SOA架構
SOA全稱為Service-Oriented Architecture,即面向服務的架構,它可以根據需求通過網路對松散耦合的粗粒度應用組件(服務)進行分布式部署、組合和使用,一個服務通常以獨立的形式存在于作業系統行程中,
站在功能的角度,把業務邏輯抽象成可復用的服務,通過服務的編排實作業務的快速再生,目的:把原先固有的業務功能轉變為通用的業務服務,實作業務邏輯的快速復用,


1.4 微服務架構


2. Apache Dubbo概述
2.1 Dubbo簡介
Apache Dubbo是一款高性能的Java RPC框架,其前身是阿里巴巴公司開源的、輕量級的開源Java RPC框架,可以和Spring框架無縫集成,2018年阿里巴巴把這個框架捐獻給了apache基金會,
什么是RPC?

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

節點角色說明:

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

3. 服務注冊中心Zookeeper
通過前面的Dubbo架構圖可以看到,Registry(服務注冊中心)在其中起著至關重要的作用,Dubbo官方推薦使用Zookeeper作為服務注冊中心,
3.1 Zookeeper介紹
Zookeeper 是 Apache Hadoop 的子專案,是一個樹型的目錄服務,支持變更推送,適合作為 Dubbo服務的注冊中心,工業強度較高,可用于生產環境,并推薦使用 ,為了便于理解Zookeeper的樹型目錄服務,我們先來看一下我們電腦的檔案系統(也是一個樹型目錄結構):

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


3.2 安裝Zookeeper
下載地址:http://archive.apache.org/dist/zookeeper/
本課程使用的Zookeeper版本為3.4.6,下載完成后可以獲得名稱為zookeeper-3.4.6.tar.gz的壓縮檔案,
安裝步驟:
第一步:安裝 jdk(略) 第二步:把 zookeeper 的壓縮包(zookeeper-3.4.6.tar.gz)上傳到 linux 系 統 第三步:解壓縮壓縮包 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr 第四步:進入zookeeper-3.4.6目錄,創建data目錄 mkdir data 第五步:進入conf目錄 ,把zoo_sample.cfg 改名為zoo.cfg cd confmv zoo_sample.cfg zoo.cfg 第六步:打開zoo.cfg檔案, 修改data屬性:dataDir=/usr/zookeeper-3.4.6/data
3.3 啟動、停止Zookeeper

4. Dubbo快速入門
Dubbo作為一個RPC框架,其最核心的功能就是要實作跨網路的遠程呼叫,本小節就是要創建兩個應用,一個作為服務的提供方,一個作為服務的消費方,通過Dubbo來實作服務消費方遠程呼叫服務提供方的方法,
4.1 服務提供方開發
開發步驟:
(1)創建maven工程(打包方式為war)dubbodemo_provider,在pom.xml檔案中匯入
(2)配置web.xml檔案
(3)創建服務介面
(4)創建服務實作類
注意:服務實作類上使用的Service注解是Dubbo提供的,用于對外發布服務
(5)在src/main/resources下創建applicationContext-service.xml
(6)啟動服務
tomcat7:run
4.2 服務消費方開發
開發步驟:
(1)創建maven工程(打包方式為war)dubbodemo_consumer,pom.xml配置和上面服務提供者
相同,只需要將Tomcat插件的埠號改為8082即可
(2)配置web.xml檔案
(3)將服務提供者工程中的HelloService介面復制到當前工程
(4)撰寫Controller
注意:Controller中注入HelloService使用的是Dubbo提供的@Reference注解
(5)在src/main/resources下創建applicationContext-web.xml
(6)運行測驗
tomcat7:run啟動
在瀏覽器輸入http://localhost:8082/demo/hello.do?name=Jack,查看瀏覽器輸出結果
思考一:上面的Dubbo入門案例中我們是將HelloService介面從服務提供者工程
(dubbodemo_provider)復制到服務消費者工程(dubbodemo_consumer)中,這種做法是否合適?還有沒有更好的方式?
答:這種做法顯然是不好的,同一個介面被復制了兩份,不利于后期維護,更好的方式是單獨創建個
maven工程,將此介面創建在這個maven工程中,需要依賴此介面的工程只需要在自己工程的pom.xml檔案中引入maven坐標即可,
思考二:在服務消費者工程(dubbodemo_consumer)中只是參考了HelloService介面,并沒有提供現類,Dubbo是如何做到遠程呼叫的?
答:Dubbo底層是基于代理技術為HelloService介面創建代理物件,遠程呼叫是通過此代理物件完成的,可以通過開發工具的debug功能查看此代理物件的內部結構,另外,Dubbo實作網路傳輸底層是基于Netty框架完成的,
思考三:上面的Dubbo入門案例中我們使用Zookeeper作為服務注冊中心,服務提供者需要將自己的服務資訊注冊到Zookeeper,服務消費者需要從Zookeeper訂閱自己所需要的服務,此時Zookeeper服務就變得非常重要了,那如何防止Zookeeper單點故障呢?
答:Zookeeper其實是支持集群模式的,可以配置Zookeeper集群來達到Zookeeper服務的高可用,防止出現單點故障,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289216.html
標籤:其他
上一篇:今天不發技術文,發點粉絲福利
