說明:大概是3年前在一個Saas平臺中接觸到dubbo,此博文是複習筆記,分享給需要的讀者。學習dubbo要有一定的java和maven基礎,因爲此演示系統全程都離不開maven。此演示側重Registry(Zookeeper)筆者稱其爲”Dubbo第一炮”。 (很久沒玩dubbo了,博文用於複習與交流)
此演示主要內容
- Dubbo簡述
(i) 什麼是dubbo,它是用來幹嘛的?
官方定義:
Apache Dubbo™ (incubating) is a high-performance, java based open source RPC framework。
民間定義:高性能的分佈式框架或微服務框架。
說明:關於dubbo的發音,筆者喜歡叫它”打波”,有的人叫它“丟波”,呵呵……
(ii) Dubbo工作原理圖
-
zookeeper簡介和原理
(i)簡介:
zookeeper是一個開源的分佈式協調服務,由雅虎創建,是 Google Chubby 的開源實現。
分佈式應用程序可以基於 ZooKeeper 實現諸如數據發佈/訂閱、負載均衡、命名服務、分佈式協調/通知、集羣管理、Master 選舉、配置維護,名字服務、分佈式同步、分佈式鎖和分佈式隊列、隊列管理、組服務等功能。(ii) zookeeper原理
zookeeper是以Fast Paxos算法爲基礎的,Paxos 算法存在活鎖的問題,即當有多個proposer交錯提交時,
有可能互相排斥導致沒有一個proposer能提交成功,而Fast Paxos作了一些優化,通過選舉產生一個leader (領導者),
只有leader才能提交proposer,具體算法可見Fast Paxos。因此,要想弄懂ZooKeeper首先得對Fast Paxos有所瞭解。ZooKeeper的基本運轉流程:
1、選舉Leader。
2、同步數據。
3、選舉Leader過程中算法有很多,但要達到的選舉標準是一致的。
4、Leader要具有最高的執行ID,類似root權限。
5、集羣中大多數的機器得到響應並接受選出的Leader
3.zookeeper實戰(dubbo環境搭建)
Dubbo原理圖中看到註冊中心一職,其實就是由zookeeper來擔當的。當然還有其它的工具也能擔當,比如: Multicast, Simple等。
3.1 zookeeper下載安裝
首先需要安裝JdK,從Oracle的Java網站下載,安裝很簡單,就不再詳述。
其中zookeeper的下載地址是:
http://www.apache.org/dyn/closer.cgi/zookeeper/ (這裏的壓縮包不用安裝,直接解壓即可)
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/(筆者下載的是這個
zookeeper-3.4.12.tar.gz版本)
3.2 創建zookeeper啓動時加載的配置文件
在 “zookeeper安裝目錄”\conf目錄下,拷貝zoo_sample.cfg並重命令爲zoo.cfg,因爲 Zookeeper 在啓動時會加載此名稱的文件作爲默認配置文件。
此配置文件屬性項說明:
(1)tickTime: Zookeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,單位毫秒
(2) initLimit: Zookeeper 集羣時leader與follower服務器之間初始化連接時,維持心跳的時間長度,
超過這個時間服務器之間的連接則失敗,單位毫秒(多臺zookeeper服務器集羣時選舉一臺作爲
leader其它的作爲follower)
(3) syncLimit: Leader 與 Follower 之間發送消息,請求和應答時間長度。
(4)dataDir:存儲快照的目錄。不要將/tmp用於存儲數據目錄. 默認情況下,
Zookeeper 將寫數據的日誌文件也保存在這個目錄裏。
(5) dataLogDir:日誌文件存放目錄
(6)clientPort:這個端口就是客戶端連接 Zookeeper 服務器的端口,
Zookeeper 會監聽這個端口,接受客戶端的訪問請求
3.3 啓動Zookeeper
(i)在zookeeper安裝目錄\bin目錄下的雙週zkServer.cmd,成功啓動後會看到以下輸出信息:
[myid:] - INFO [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181
(ii)開一個新的cmd窗口,輸入jps,看到以下信息,說明zookeeper訪問成功
C:\Users\Administrator.FV>jps
6500 QuorumPeerMain
6260
2656 Jps
(iii)Ctrl + c 或直接關閉彈出來的cmd窗口來關閉zookeeper
注意:這是一種獨佔式的程序運行方式(與後臺進程不一樣,獨佔式運行的程序不能關閉,關閉了窗口程序也就關閉了,那麼zookeeper提供的服務也沒了)
4.dubbo-admin管理平臺安裝
(i) 簡介:
Where is dubbo-admin?
dubbo-admin has been moved from core repository to
https://github.com/apache/incubator-dubbo-ops since 2.6.1
dubbo與jdk版本匹配,Currently, dubbo keeps 3 versions evolve in parallel:
2.7.x (master): requires Java 1.8, major feature branch.
2.6.x: requires Java 1.6, minor feature & bugfix branch, GA, production ready.
2.5.x: requires Java 1.6, maintenance branch, only accept security vulnerability
and critical bugfix, expected to be EOL soon.
(ii) dubbo-admin的作用
對服務提供者、服務消費者、訪問量、負載均衡等功能的管理和維護
(iii) 下載和打包dubbo-admin源碼成dubbo-admin.war
環境說明:設置好jdk,maven環境後,在cmd中輸入命令:mvn -v命令得到的信息
包括jdk,maven,platform encoding,OS如下:
Apache Maven 3.0.5
Maven home: D:\maven\apache-maven-3.0.5
Java version: 1.8.0_31, vendor: Oracle Corporation
Java home: D:\Program Files\Java\jdk1.8.0_31\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "x86", family: "dos"
dubbo的資源下載地址:
https://github.com/alibaba/dubbo(下面的操作需要讀者有一定的maven基礎,並且保持網絡暢通)
選擇Branch:2.5.x–>Clone or download–>Download Zip,成功下載後爲incubator-dubbo-2.5.x.zip ,並解壓
發現裏面有dubbo-admin源碼,發現裏面有pom.xml文件(那麼它是一個maven工程)
如果使用的是linux git clone url來下載,那url這樣獲取:選擇Branch:2.5.x–>Clone or download–>點擊"像格式刷一樣的圖標"就複製上url了, 例如:https://github.com/apache/incubator-dubbo.git
用maven工具將dubbo-admin打成war包(dubbo-admin.war)用於部署到tomcat服務器上,運行這個war項目。(這步是關鍵,很多人敗在此處,只要你懂maven一切都easy)
如果你不想打自己打dubbo-admin.war,可以下載筆者在百度網盤提供的分享:
dubbo-admin.war鏈接:
https://pan.baidu.com/s/1MlmNQSoX7U5bpKkBpBD2ow 提取碼:6c79 (@author:拈花爲何不一笑)
方式一 ,手工操作:
1。安裝和設置jdk和maven的環境變量(注意jdk版本要與dubbo相匹配)
2.maven 打成war包,修改dubbo-admin目錄中的pom.xml文件-->找到packaging內容-->修改成這樣"<packaging>war</packaging>"
3。打開cmd,利用cd命令進入incubator-dubbo-2.5.x.zip解壓後的目錄的dubbo-admin目錄中,
比如筆者的爲:E:\java\JavaEE框架\duboo框架\dubbo源碼_版本2.5.x\incubator-dubbo-2.5.x\dubbo-admin,則輸入命令:
cd E:\2.java\1.java學習體系(路線)\5.JavaEE框架\7 duboo框架\dubbo源碼_版本2.5.x\incubator-dubbo-2.5.x\dubbo-admin
e:
E:\2.java\1.java學習體系(路線)\5.JavaEE框架\7 duboo框架\dubbo源碼_版本2.5.x\incubator-dubbo-2.5.x\dubbo-admin>mvn package -Dmaven.test.skip=true
遇到問題:
[ERROR] 錯誤: 讀取F:\java\maven\repository\org\springframework\spring-context\3.2.16.RELEASE\spring-context-3.2.16.RELEASE.jar
時出錯; invalid LOC header (bad signature),基本上都是這樣的10多個,說明下載的jar包有問題,按照路徑刪除,重新運行mvn package -Dmaven.test.skip=true
會自動進行下載,並打包
遇到上面錯誤後,先執行命令:mvn clean,再執行mvn package -Dmaven.test.skip=true即可。
上面命令執行成功後,到dubbo-admin\target\下找到dubbo-admin.war包
方式二,利用Eclipse/idea工具先導入maven工程dubbo-admin,在Eclipse/idea中間接調用maven來
給dubbo-admin打成war包,原理跟方式一相同,這個會遇到環境不兼容的問題,要自己去解決。
報錯build path 時不兼容,換成相應的jdk版本,再右鍵項目--> maven-->update project...
即可解決。
方式三,前兩種方式都是在window系統中進行的,而第三種,我們來linux下玩一玩, 原理其實還是跟方式一是相同的。
1、安裝jdk (如何在linux 中安裝軟件在此不細述,可參考筆者的其它博文)
2、安裝maven
3、安裝tomcat(可省略,tomcat部署在windows上)
4、安裝zookeeper
5、打包dubbo-admin(利用maven工具)
git clone https://github.com/apache/incubator-dubbo.git #從github中下載dubbo
tar -zxvf incubator-dubbo-2.5.x.zip #解壓
cd /usr/local/incubator-dubbo-2.5.x/dubbo-admin/ #進入到dubbo-admin目錄中
mvn package -Dmaven.test.skip=true #打包dubbo-admin成dubbo.war包,同理可以使用vim工具來修改pom.xml中打包方式設置成war即可
5.項目部署和管理
(i) 首先,啓動Zookeeper(參照上面的3.3)
(ii) 然後,部署dubbo-admin.war和啓動tomcat服務器
a) 部署dubbo-admin.war到tomcat安裝目錄下的webapps中,
b) 接着,啓動tomcat服務器,例如筆者的爲D:\apache\apache-tomcat-5.5.23\webapps\ ,
c) 再然後進入D:\apache\apache-tomcat-5.5.23\bin目錄中雙擊startup.bat 那麼tomcat服務器就啓
動了,啓動時我們來看看輸出信息,找到了dubbo-admin-2.5.10.war的信息,成功被部署了。
說明:在windwos環境下當環境變量CATALINA_HOME指定哪個tomcat服務器安裝目錄(當安裝了多個版本號的tomcat服務器時),startup.bat就運行那個tomcat服務器, 筆者實踐驗證過。
(iii) 最後,訪問和管理
訪問dubbo-admin應用,瀏覽器中輸入http://localhost:8080/dubbo-admin-2.5.10/
彈出一個框要求輸入用戶/密碼(位於部署在tomcat webapps目錄中的
dubbo-admin-2.5.10/WEB-INF/dubbo.properties文件中,裏面的密碼跟用戶名相同,有兩個密碼root和guest),輸入用戶名和密碼時來看看tomcat服務器輸出的信息
瀏覽器中彈出對話框信息,正確輸入用戶名和密碼後,進入dubbo-admin管理系統
那麼一個簡單的dubbo-zookeeper-admin環境體驗體驗就OK了