1. 程式人生 > >zookeeper和dubbo的簡單使用

zookeeper和dubbo的簡單使用

一.說明

      

  • 單一應用架構
    • 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
    • 此時,用於簡化增刪改查工作量的 資料訪問框架(ORM) 是關鍵。
  • 垂直應用架構
    • 當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
    • 此時,用於加速前端頁面開發的 Web框架(MVC) 是關鍵。
  • 分散式服務架構
    • 當垂直應用越來越多,應用之間互動不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
    • 此時,用於提高業務複用及整合的 分散式服務框架(RPC) 是關鍵。
  • 流動計算架構
    • 當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率。
    • 此時,用於提高機器利用率的 資源排程和治理中心(SOA) 是關鍵。

Dubbo就是資源排程和治理中心的】工具。

節點角色說明:

  • Provider: 暴露服務的服務提供方。
  • Consumer: 呼叫遠端服務的服務消費方。
  • Registry: 服務註冊與發現的註冊中心。
  • Monitor:
    統計服務的呼叫次調和呼叫時間的監控中心。
  • Container: 服務執行容器。

呼叫關係說明:

  • 0. 服務容器負責啟動,載入,執行服務提供者。
  • 1. 服務提供者在啟動時,向註冊中心註冊自己提供的服務。
  • 2. 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
  • 3. 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。
  • 4. 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。
  • 5. 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。

二.zookeeper

官方推薦使用zookeeper註冊中心。

註冊中心負責服務地址的註冊與查詢,相當於目錄服務,服務提供者和消費者只在啟動時與註冊中心互動,註冊中心不轉發請求,壓力較小。使用dubbo-2.3.3以上版本,建議使用zookeeper註冊中心。

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

Zookeeper:

  1. 可以作為叢集的管理工具使用。
  2. 可以集中管理配置檔案。
     

zookeeper的安裝

Zookeeper是java開發的可以執行在windows、linux環境。需要先安裝jdk。

安裝步驟:

第一步:安裝jdk

第二步:把zookeeper的壓縮包上傳到linux系統。

第三步:解壓縮壓縮包

tar -zxvf zookeeper-3.4.6.tar.gz

第四步:進入zookeeper-3.4.6目錄,建立data資料夾。

第五步:把zoo_sample.cfg改名為zoo.cfg

[[email protected] conf]# mv zoo_sample.cfg zoo.cfg

第六步:修改data屬性:dataDir=/root/zookeeper-3.4.6/data

第七步:啟動zookeeper

[[email protected] bin]# ./zkServer.sh start

關閉:[[email protected] bin]# ./zkServer.sh stop

檢視狀態:[[email protected] bin]# ./zkServer.sh status(狀態為standalone單擊模式)

zookeeper叢集搭建參見https://www.cnblogs.com/tangwan/p/5860569.html

對於maven工程來說:服務消費者在配置spring的相關包除外,還需要配置dubbo和zookeeper的包如下

<!-- dubbo相關 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.jboss.netty</groupId>
					<artifactId>netty</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>

提供者: 

<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.jboss.netty</groupId>
					<artifactId>netty</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>

三.部署監控中心

因為我們的dubbo是java工程,所以需要安裝tomcat

需要安裝tomcat,然後部署監控中心即可。

 

1、部署監控中心:

[[email protected] ~]# cp dubbo-admin-2.5.4.war apache-tomcat-7.0.47/webapps/dubbo-admin.war

 

  1. 啟動tomcat

 

  1. 訪問http://192.168.25.167:8080/dubbo-admin/

使用者名稱:root

密碼:root

 

如果監控中心和註冊中心在同一臺伺服器上,可以不需要任何配置。

如果不在同一臺伺服器,需要修改配置檔案:

/root/apache-tomcat-7.0.47/webapps/dubbo-admin/WEB-INF/dubbo.properties(執行一次tomcat後,tomcat自動解壓後就有了)

   四.消費者與服務提供者

<!-- 使用dubbo釋出服務 -->
	<!-- 提供方應用資訊,用於計算依賴關係 -->
	<dubbo:application name="e3-manager" />
	<dubbo:registry protocol="zookeeper"
		address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183" />
	<!-- 用dubbo協議在20880埠暴露服務 -->
	<dubbo:protocol name="dubbo" port="20880" />
	<!-- 宣告需要暴露的服務介面 -->
	<dubbo:service interface="cn.e3mall.service.ItemService" ref="itemServiceImpl" />

 

<!-- 引用dubbo服務 -->
	<dubbo:application name="e3-manager-web"/>
	<dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"/>	
	<dubbo:reference interface="cn.e3mall.service.ItemService" id="itemService" timeout="100000" />

專案架構分析:

                當我們使用分散式架構搭建伺服器的時候,我們應該先建立一個parent的pom的工程,然後建立pom的子工程如protal(首頁展示),在子工程中建立聚合工程(及模組)service(我們的服務提供者為war包)和dao(jar包),然後建立頁面端工程(消費者)