1. 程式人生 > >高效能 RPC 框架 Dubbo 從入門到深入-服務註冊中心搭建(詳細)

高效能 RPC 框架 Dubbo 從入門到深入-服務註冊中心搭建(詳細)

一、前言

整體來說,一個公司業務系統的演進流程基本都是從單體應用到多應用。在單體應用時,不同業務模組相互呼叫直接在本地 JVM 程序內就可以完成,而變為多個應用時,相互之間進行通訊的方式就不能簡單的進行本地呼叫了,因為不同業務模組部署到了不同的 JVM 程序裡面,更常見的是部署到了不同的機器,這時候一個高效、穩定的 RPC 遠端呼叫框架就變得非常重要。

Dubbo 是阿里巴巴開發的一個開源的高效能的遠端服務呼叫框架,致力於提供高效能和透明化的 RPC 遠端呼叫服務解決方案。作為阿里巴巴 SOA 服務化治理方案的核心框架,目前它已進入 Apache 卵化器專案,其前景可謂無限光明。

二、使用ZooKeeper搭建服務註冊中心

2.1 ZooKeeper基本原理

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

image.png

下面結合上圖介紹Zookeeper在服務註冊與發現裡面的應用:

  • 如上圖整體zk的樹根Root是dubbo,說明建立的zk分組為dubbo,樹的第二層為Service層用來表示具體的介面服務這裡為com.test.UserServiceBo介面服務,樹的第三層為Type層用來區分是服務提供者、還是服務消費者、還是路由規則等,樹的第四層URl是具體服務提供者或者消費者對應的機器列表或者具體的路由規則。
  • 假設服務提供者對外提供com.test.UserServiceBo的實現類的服務,那麼當服務提供者啟動時候,Provider會通過zkclient在zk服務端的/dubbo/com.test.UserServiceBo/providers目錄下寫入自己的URL地址,如果服務提供者有多個,那麼providers下就會有多個地址,這裡需要注意的是這裡的樹形目錄不一定是二叉樹,假如服務提供者有100個機器,那麼providers下就會有100個節點的。
  • 假設服務消費者需要使用com.test.UserServiceBo介面的服務,那麼當服務消費者啟動時候,Consumer會通過zkclient訂閱zk服務端的/dubbo/com.test.UserServiceBo/providers目錄下提供的服務提供方的URL地址列表。並且在/dubbo/com.test.UserServiceBo/consumers目錄下寫下自己的url地址,這裡要記錄服務消費者的地址是為了當服務提供者地址列表變化時候(比如新增了機器,減少了機器)時候zk可以通知訂閱該服務的訂閱者。
  • 監控中心和管理控制檯在啟動時候會通過zkclient訂閱zk服務端的/dubbo/com.test.UserServiceBo/目錄下的內容,並通過providers和consumers子目錄區分哪些是服務提供者列表,哪些是服務消費者列表,另外管理控制檯還可以寫入路由規則到/dubbo/com.test.UserServiceBo/routers目錄,這些路由規則也會被推送到服務消費端。

當服務提供者叢集中有一臺機器掛了後,zk能及時通過長鏈斷開發現該機器掛了,並會從zk註冊中心服務提供者的providers目錄下刪除該機器,然後會通知服務消費者更新可用的服務提供者的地址列表 由於zk支援持久化儲存,所以當zk重啟後,可以自動恢復服務註冊資訊。

2.2 ZooKeeper的安裝

本文我們講解使用 Apache ZooKeeper 作為服務註冊中心時候ZooKeeper的搭建。

  • 然後修改 zookeeper-3.4.11/conf 資料夾裡面的 zoo.cfg 檔案。
    設定配置項 dataDir 為一個存在的以 data 結尾的目錄;
    設定 zk 的監聽埠 clientPort=2181;
    設定 zk 心跳檢查間隔 tickTime = 2000;
    設定 Follower 伺服器啟動時候從 Leader 同步完畢資料能忍受多少個心跳時間間隔數 initLimit=5。
    設定執行過程中 Leader 同步資料到 Follower 後,Follower 回覆資訊到 Leader 的超時時間 syncLimit=2,如果 Leader 超過 syncLimit 個 tickTime 的時間長度,還沒有收到 Follower 響應,那麼就認為這個 Follower 已經不線上了:
    image.png
  • 最後在 zookeeper-3.4.11/bin 下執行 sh zkServer.sh start-foreground 就會啟動 zk,會有下面輸出:
    image.png

可知 zk 在埠 2181 進行監聽,至此服務註冊中心搭建完畢。

2.3 ZooKeeper的使用

服務提供方和呼叫方需要引入zkclient的jar包才能使用訪問zk伺服器,需要在pom裡面新增下面依賴、

<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

Zookeeper的單機配置:指定一個zk的ip作為服務註冊中心
<dubbo:registry address="zookeeper://12.22.123.101:2181" /> or
<dubbo:registry protocol="zookeeper" address="12.22.123.101:2181" />
其中zookeeper指明使用zookeeper作為服務註冊中心,12.22.123.101:2181是zk的伺服器地址和服務監聽埠號。

Zookeeper 叢集配置:指定多個ip作為服務註冊中心

<dubbo:registry address="zookeeper://11.10.13.10:2181?backup=11.20.153.111:2181,11.30.
133.112:2181" />
 or
<dubbo:registry protocol="zookeeper" address="11.10.13.10:2181,11.20.153.111:2181,11.30.
133.112:2181" />

另外你還可以在同一個zk伺服器上劃分多個分組,例如下面:
<dubbo:registry id="registry1" protocol="zookeeper" address="10.20.153.10:2181" gr
oup="registry1" />
<dubbo:registry id="registry2" protocol="zookeeper" address="10.20.153.10:2181" gro
up="registry2" />

如上程式碼,在同一個zk伺服器上劃分了兩個分組,也就是會有兩顆樹目錄,樹根分別為registry1和registry2.

三、更多

image.png


加多

加多

高階 Java 攻城獅 at 阿里巴巴加多,目前就職於阿里巴巴,熱衷併發程式設計、ClassLoader,Spring等開源框架,分散式RPC框架dubbo,springcloud等;愛好音樂,運動。微信公眾號:技術原始積累。知識星球賬號:技術原始積累