基於springboot2 Dobbo+zookeeper實戰

Dubbo+Zookeeper技術

1. Paxos演算法 到 ZooKeeper 分散式一致性原理與實踐

ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。

ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

ZooKeeper包含一個簡單的原語集,提供Java和C的介面。

ZooKeeper程式碼版本中,提供了分散式獨享鎖、選舉、佇列的介面,程式碼在$zookeeper_home\src\recipes。其中分佈鎖和佇列有Java和C兩個版本,選舉只有Java版本。

基於springboot2 Dobbo+zookeeper實戰

1.1 環境安裝

ZooKeeper可以執行在多種系統平臺上面,表1展示了zk支援的系統平臺,以及在該平臺上是否支援開發環境或者生產環境,內部帶cmd和sh啟動指令碼檔案。zookeeper下載映象地址(注:ZooKeeper是用Java編寫的,執行在Java環境上,因此,在部署zk的機器上需要安裝Java執行環境。為了正常執行zk,我們需要JRE1。6或者以上的版本。)

基於springboot2 Dobbo+zookeeper實戰

1.2 配置整合

單機模式

conf目錄下預設是zoo_sample。cfg檔案需要調整成zoo。cfg檔案,Windows直接重新命名,centos和Linux下執行命令修改檔案

mv 。。/zoo_sample。cfg 。。/zoo。cfg

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored。# do not use /tmp for storage, /tmp here is just # example sakes。dataDir=C:\\zookeeper-3。4。5\\datadataLogDir=C:\\zookeeper-3。4。5\\log# the port at which the clients will connectclientPort=2181## Be sure to read the maintenance section of the # administrator guide before turning on autopurge。## http://zookeeper。apache。org/doc/current/zookeeperAdmin。html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge。snapRetainCount=3# Purge task interval in hours# Set to “0” to disable auto purge feature#autopurge。purgeInterval=1

初始化配置資訊說明

dataDir資料路徑地址

dataLogDir日誌資料路徑地址

tickTime:這個時間是作為 Zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。

clientPort:這個埠就是客戶端連線 Zookeeper 伺服器的埠,Zookeeper 會監聽這個埠,接受客戶端的訪問請求

配置修改完成後啟動服務windows下,直接雙擊zkServer。cmd,Linux或Centos下啟動

# 直接後臺啟動。/zkServer。sh start# 直接前臺啟動,檢視日誌。/zkServer。sh start-foreground

服務啟動檢查-Linux

基於springboot2 Dobbo+zookeeper實戰

基於springboot2 Dobbo+zookeeper實戰

服務啟動檢查-Windows

基於springboot2 Dobbo+zookeeper實戰

叢集模式

Zookeeper 不僅可以單機提供服務,同時也支援多機組成叢集來提供服務。實際上 Zookeeper 還支援另外一種偽叢集的方式,也就是可以在一臺物理機上執行多個 Zookeeper 例項,下面將介紹叢集模式的安裝和配置。

Zookeeper 的叢集模式的安裝和配置也不是很複雜,所要做的就是增加幾個配置項。叢集模式除了上面的三個配置項還要增加下面幾個配置項:

initLimit=5  syncLimit=2  server。1=192。168。211。1:2888:3888  server。2=192。168。211。2:2888:3888

initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這裡所說的客戶端不是使用者連線 Zookeeper 伺服器的客戶端,而是 Zookeeper 伺服器叢集中連線到 Leader 的 Follower 伺服器)初始化連線時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度後 Zookeeper 伺服器還沒有收到客戶端的返回資訊,那麼表明這個客戶端連線失敗。總的時間長度就是 5*2000=10 秒

syncLimit:這個配置項標識 Leader 與 Follower 之間傳送訊息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 2*2000=4 秒

server。A=B:C:D:其中 A 是一個數字,表示這個是第幾號伺服器;B 是這個伺服器的 ip 地址;C 表示的是這個伺服器與叢集中的 Leader 伺服器交換資訊的埠;D 表示的是萬一叢集中的 Leader 伺服器掛了,需要一個埠來重新進行選舉,選出一個新的 Leader,而這個埠就是用來執行選舉時伺服器相互通訊的埠。如果是偽叢集的配置方式,由於 B 都是一樣,所以不同的 Zookeeper 例項通訊埠號不能一樣,所以要給它們分配不同的埠號。

除了修改 zoo。cfg 配置檔案,叢集模式下還要配置一個檔案 myid,這個檔案在 dataDir 目錄下,這個檔案裡面就有一個數據就是 A 的值,Zookeeper 啟動時會讀取這個檔案,拿到裡面的資料與 zoo。cfg 裡面的配置資訊比較從而判斷到底是那個 server。

基於springboot2 Dobbo+zookeeper實戰

1.3 輔助工具

Intelij IDEA中新增zookeeper外掛

基於springboot2 Dobbo+zookeeper實戰

基於springboot2 Dobbo+zookeeper實戰

基於springboot2 Dobbo+zookeeper實戰

1.4 命令支援

1.5 注意事項

執行bin/zkServer。cmd提示錯誤,注意埠是否已經使用,檢查程序中java程式在執行

zookeeper會使用到

8080

2181

埠,注意埠檢查,命令:netstat -ano

1.6 視覺化工具

Linux、Centos

zkui

Windows

ZooInspector下載後進入目錄ZooInspector\build, 開啟命令符視窗,執行一下命令,彈出視覺化介面

java -jar zookeeper-dev-ZooInspector。jar

基於springboot2 Dobbo+zookeeper實戰

2. Dubbo

Dubbo(讀音[ˈdʌbəʊ])是阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可透過高效能的 RPC 實現服務的輸出和輸入功能,可以和 [1] Spring框架無縫整合。

Dubbo是一款高效能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向介面的遠端方法呼叫,智慧容錯和負載均衡,以及服務自動註冊和發現。

Remoting:

網路通訊框架,實現了 sync-over-async和 request-response 訊息機制。

RPC:

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

Registry:

服務目錄框架用於服務的註冊和服務事件釋出和訂閱

2.1 環境安裝

基於springboot2 Dobbo+zookeeper實戰

2.2 配置

消費者

spring。application。name=dubboconsumer#避免和監控中心埠衝突,設為8082埠訪問server。port=8081#自定義屬性demo。service。version=1。0。0dubbo。application。name=dubboconsumerdubbo。registry。address=zookeeper://127。0。0。1:2181#dubbo。monitor。protocol=registrydubbo。protocol。port=20881

生產者

spring。application。name=providerserver。port=8081#指定當前應用/服務名字,相同的服務應同名dubbo。application。name=provider#自定義屬性demo。service。version=1。0。0dubbo。protocol。name=dubbodubbo。protocol。port=20880dubbo。registry。address=zookeeper://127。0。0。1:2181#provider配置dubbo。provider。timeout=10000

2.3 springboot2整合 程式碼片段

@EnableDubbo@SpringBootApplicationpublic class comsumerapplication {   public static void main(String[] args) {       SpringApplication。run(comsumerapplication。class, args);  }}

@Reference(version = “${demo。service。version}”)UserService userService;@Overridepublic String getOrderName(String name) {   return userService。getUserName(name);}

2.4 輔助工具

zooInspector

2.5 命令支援

java -jar XXXX

2.6 釋出部署

釋出Jar包 釋出War包