Dubbo介紹
當服務越來越多時,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需要增加一個調度中心基於訪問壓力實時管理集羣容量,提供集羣利用率。其中,用於提高機器利用率的資源調度和治理中心是關鍵。
Dubbo 是阿里巴巴開源項目的一個分佈式服務框架。致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,Dubbo就是個服務框架,如果沒有分佈式的需求,其實是不需要用的,只有在分佈式的時候,纔有Dubbo這樣的分佈式服務框架的需求,並且本質上是個服務調用的東西,說白了就是個遠程服務調用的分佈式框架(告別Web Service模式中的WSDL,以服務者與消費者的方式在Dubbo上註冊)。
名詞解釋:
-
WSDL:Web Services Description Language,網絡服務描述語言
-
RPC:Remote Procedure Call Protocol,遠程過程調用協議
- SOA:Service-Oriented Architecture,面向服務的體系結構
Dubbo工作原理:
調用關係說明:
1) 服務容器啓動、加載和運行服務提供者;
2) 服務提供者在啓動時,向註冊中心註冊自己提供的服務;
3) 服務消費者在啓動時,向註冊中心訂閱自己所需的服務;
4) 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更給消費者;
5) 服務消費者從地址列表中,基於軟負載均衡算法選一臺服務提供者進行調用,如果調用失敗再選另一臺;
6) 服務消費者和服務提供者在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。
Zookeeper的作用:
Zookeeper 作爲一個分佈式的服務框架,主要用來解決分佈式集羣中應用系統的一致性問題,它能提供基於類似於文件系統的目錄節點樹方式的數據存儲,但是 Zookeeper 並不是用來專門存儲數據的,它的作用主要是用來維護和監控你存儲的數據的狀態變化。通過監控這些數據狀態的變化,從而可以達到基於數據的集羣管理。
Dubbo和zookeeper啥關係?
簡單來說打個比方:Dubbo就是動物園的動物,zookeeper是動物園。如果遊客想看動物的話那麼就去動物園看。比如你要看老虎,那麼動物園有你才能看到。換句話說我們把很多不同的Dubbo(動物)放到zookeeper(動物園中)提供給我們遊客進行觀賞。這個過程中三個關鍵:場所、供給者、消費者。
再說一個分佈式的項目,server(消費)層與 service(供給)層被拆分了開來, 部署在不同的tomcat中, 我在server層需要調用 service層的接口,但是兩個運行在不同tomcat下的服務無法直接互調接口,那麼就可以通過zookeeper和Dubbo實現。就好比把動物放到動物園,我們要看了直接去動物園就行。而不能直接到動物生活的地方去看,會有性命安全之憂(比如你去看老虎)。
我們通過Dubbo 建立service這個服務,並且到zookeeper上面註冊,填寫對應的zookeeper服務所在 的IP及端口號。
環境準備
JDK-1.8
Maven-3.5.3
Zookeeper-3.4.12
Tomcat-9——8月8日改:由於Dubbo-Admin替換爲SpringBoot的新版本,不在需要依賴Tomcat運行,可以跳過安裝
Dubbo-Admin——8月8日改:新版本的編譯和執行,補充在末尾
一、安裝Java
(可選) 卸載已有的open jdk
# rpm -qa | grep jdk
java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.i686
# yum -y remove java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.i686
remove java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.i686
安裝步驟, 請見 http://qiangsh.blog.51cto.com/3510397/1771748
第二步:安裝Maven
Maven的下載地址是:http://maven.apache.org/download.cgi
下載最新版本的Maven-3.5.4.tar.gz
1. 安裝Maven-3.5.4
#下載maven
cd /data/packages
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
#創建maven的工作路徑
mkdir -p /usr/local/maven
tar -zvxf apache-maven-3.5.4-bin.tar.gz -C /usr/local/maven/
#做一個軟鏈接,方便以後升級:
ln -s /usr/local/maven/apache-maven-3.5.4 /usr/local/maven/maven3
2. 修改系統環境變量
# vim /etc/profile
#在適當的位置添加
export M2_HOME=/usr/local/maven/maven3
export PATH=$M2_HOME/bin:$PATH
#執行以下命令,使修改生效:
# source /etc/profile
3. 驗證安裝
# mvn -v
4. 創建本地資源倉庫
#在本地創建一個資源文件的下載目錄:
mkdir -p /data/maven/local-Repository
#修改Maven配置文件:
vim /usr/local/maven/maven3/conf/settings.xml
#個人配置如下:
<localRepository>/data/maven/local-Repository</localRepository>
<mirror>
<id>alimaven</id>
<name>aliyun-maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>repo2</id>
<name>Maven Repository2</name>
<url>http://repo2.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
第三步:搭建Zookeeper單機環境
Zookeeper下載地址:
https://www.apache.org/dyn/closer.cgi/zookeeper/
1. 安裝Zookeeper
tar -zxvf zookeeper-3.4.13.tar.gz -C /usr/local/
mv /usr/local/zookeeper-3.4.13 /usr/local/zookeeper
2. 創建Zookeeper項目目錄
mkdir /data/zookeeper #項目目錄
mkdir /data/zookeeper/zkdata #存放快照日誌
mkdir /data/zookeeper/zkdatalog #存放事物日誌
3. 修改配置文件
#進入 /usr/local/zookeeper/conf目錄,複製zoo_sample.cfg文件並改名爲zoo.cfg。
cp zoo_sample.cfg zoo.cfg
#修改zoo.cfg文件,需要修改以下幾個地方:
# vim zoo.cfg
-----
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/zkdata
dataLogDir=/data/zookeeper/zkdatalog
clientPort=12181
server.1=127.0.0.1:12888:13888
4. 配置zookeeper的環境變量
# vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
# source /etc/profile
5. 啓動Zookeeper
#進入bin目錄
cd /usr/local/zookeeper/bin
# 啓動zookeeper服務
./zkServer.sh start
# 啓動完成後,查看服務狀態:
./zkServer.sh status
6. 配置 zookeeper 開機啓動
echo '/usr/local/zookeeper/bin/zkServer.sh start' >>/etc/rc.local
第四步:安裝Dubbo-Admin
爲了更好的調試、發現問題、解決問題,因此引入dubbo-admin。通過dubbo-admin可以對消費者和提供者進行管理。
1. 下載Dubbo-Admin
#下載
cd /opt
git clone https://github.com/apache/incubator-Dubbo-ops
2. 修改配置信息
cd /opt/incubator-Dubbo-ops/dubbo-admin/src/main/resources
vim application.properties
需要注意的地方是:
- 默認的訪問端口爲7001;
- Zookeeper的地址,如果zkServer和Dubbo-Admin不在同一臺機器上,需要修改成zkServer所在的IP地址;
- 用戶root、guest的密碼酌情修改。
3: 編譯
cd /opt/incubator-Dubbo-ops/
mvn package
完成後,編譯獲得dubbo-admin-0.0.1-SNAPSHOT.jar,可以直接運行,不需要依賴Tomcat。
ls /opt/incubator-Dubbo-ops/dubbo-admin/target
classes generated-sources maven-status
dubbo-admin-0.0.1-SNAPSHOT.jar generated-test-sources surefire-reports
dubbo-admin-0.0.1-SNAPSHOT.jar.original maven-archiver test-classes
4: 啓動
#將這個jar包複製到合適的路徑下,如/usr/local/dubbo-admin/
mkdir /usr/local/dubbo-admin
cp /opt/incubator-Dubbo-ops/dubbo-admin/target/dubbo-admin-0.0.1-SNAPSHOT.jar /usr/local/dubbo-admin/
#然後啓動服務
java -jar /usr/local/dubbo-admin/dubbo-admin-0.0.1-SNAPSHOT.jar &
#加入開機自啓:
echo 'java -jar /usr/local/dubbo-admin/dubbo-admin-0.0.1-SNAPSHOT.jar &' >>/etc/rc.local
在啓動run-DubboAdmin.sh之前我們需要先把Zookeeper啓動起來,之後我們就可以訪問Dubbo-admin了。
會生成日誌文件:dubbo-governance.log,記錄啓動和訪問的記錄。
確認關閉了防火牆,或者允許7001端口的通訊。