高性能 RPC 框架 Dubbo-服務註冊中心搭建

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

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

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

2.1 ZooKeeper基本原理

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

高性能 RPC 框架 Dubbo-服務註冊中心搭建

下面結合上圖介紹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的搭建。

  • 首先你需要到 http://zookeeper.apache.org/releases.html 下載一個 zk 的包,本文作者使用的是 zookeeper-3.4.11 這個版本,如下圖:

  • 然後修改 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 已經不在線了:

  • 最後在 zookeeper-3.4.11/bin 下運行 sh zkServer.sh start-foreground 就會啟動 zk,會有下面輸出:

高性能 RPC 框架 Dubbo-服務註冊中心搭建

  • 解壓該包後,如下圖:

高性能 RPC 框架 Dubbo-服務註冊中心搭建

高性能 RPC 框架 Dubbo-服務註冊中心搭建

高性能 RPC 框架 Dubbo-服務註冊中心搭建

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

2.3 ZooKeeper的使用

服務提供方和調用方需要引入zkclient的jar包才能使用訪問zk服務器,需要在pom裡面添加下面依賴、

  
com.101tec zkclient 0.10

Zookeeper的單機配置:指定一個zk的ip作為服務註冊中心

or

其中zookeeper指明使用zookeeper作為服務註冊中心,12.22.123.101:2181是zk的服務器地址和服務監聽端口號。

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

or

另外你還可以在同一個zk服務器上劃分多個分組,例如下面:

oup="registry1" />

up="registry2" />

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


分享到:


相關文章: