天天看點

分布式技術之dubbo

1,課程回顧

zk 應用場景 (naming注冊中心 管理配置檔案 管理叢集(java例子模拟) 分布式鎖 消息隊列…)

zk 叢集搭建 選舉原理(啟動選舉,運作時leader當機選舉 )

zk 資料類型 4種

zk ACL(access control list)節點通路控制權限 scheme : id : permission

world anyone crwda

ip ip位址/主機名稱

auth user

digest user

zk java API (對節點的CRUD 節點内容添加,修改)

zk 管理叢集(java例子模拟)

2,本章重點

dubbo的簡介,使用場景

dubbo拆分SSM項目

3,具體内容

官網:

​​​ https://dubbo.apache.org/zh/​​​ 引言:

分布式服務:不同的業務子產品部署在不同的伺服器上或者同一個業務子產品分拆多個子業務,部署在不同的伺服器上,解決高并發的問題

叢集服務:同一個業務部署在多台機器上,提高系統可用性

3.1 簡介:

Dubbo是阿裡巴巴内部的SOA(server oriented architectrue)服務化治理方案的核心架構,每天為2000+ 個服務提供3,000,000,000+ 次通路量支援,并被廣泛應用于阿裡巴巴集團的各成員站點。Dubbo自2011年開源後,已被許多非阿裡系公司使用。 Dubbo是一個分布式服務架構,以及SOA治理方案。其功能主要包括:高性能NIO通訊及多協定內建,服務動态尋址與路由,軟負載均衡與容錯,依賴分析與降級等。

3.2 開發團隊:

Dubbo共有六個開發人員參與開發和測試,每一個開發人員都是很有經驗,團隊合作很默契,開發過程也很有節奏,有完善品質保障流程。

梁飛 (開發人員/産品管理)

劉昊旻 (開發人員/過程管理)

劉超 (開發人員/使用者支援)

李鼎 (開發人員/使用者支援)

陳雷 (開發人員/品質保障)

分布式技術之dubbo

闾剛 (開發人員/開源運維)

圖檔: https://uploader.shimo.im/f/5BwJ4MhyEOdHF6Ao.png

3.3 适用場景:

1,當網站變大後,不可避免的需要拆分應用進行服務化,以提高開發效率,調優性能,節省關鍵競争資源等。

2,當服務越來越多時,服務的URL位址資訊就會爆炸式增長,配置管理變得非常困難,F5硬體負載均衡器的單點壓力也越來越大。 

 3,當進一步發展,服務間依賴關系變得錯蹤複雜,甚至分不清哪個應用要在哪個應用之前啟動,架構師都不能完整的描述應用的架構關系。 

4,服務的調用量越來越大,服務的容量問題就暴露出來,這個服務需要多少機器支撐?什麼時候該加機器?等等……       

3.4 設計思路,依賴及性能,應用情況

架構具有極高的擴充性,采用微核+插件體系,并且文檔齊全,很友善二次開發,适應性極強。Dubbo運作JDK1.5之上,預設依賴javassist、netty、spring等包,但不是必須依賴,通過配置Dubbo可不依賴任何三方庫運作。 Dubbo通過長連接配接減少握手,通過NIO及線程池在單連接配接上并發拼包處理消息,通過二進制流壓縮資料,比正常HTTP等短連接配接協定更快。在阿裡巴巴内部,每天支撐2000多個服務,30多億通路量,最大單機支撐每天近1億通路量。

在阿裡内部,除淘系以外的其它阿裡子公司,都在使用Dubbo,包括:中文主站,國際主站,AliExpress,阿裡雲,阿裡金融,阿裡學院,良無限,來往等等。       

開源後,已被:去哪兒,京東,吉利汽車,方正證劵,海爾,焦點科技,中潤四方,華新水泥,海康威視,等公司廣泛使用,并不停的有新公司加入,社群讨論及貢獻活躍,得到使用者很高的評價。

3.5 架構:

分布式技術之dubbo
分布式技術之dubbo

調用關系說明

服務容器負責啟動,加載,運作服務提供者。

服務提供者在啟動時,向注冊中心注冊自己提供的服務。

服務消費者在啟動時,向注冊中心訂閱自己所需的服務。

注冊中心傳回服務提供者位址清單給消費者,如果有變更,注冊中心将基于長連接配接推送變更資料給消費者。

服務消費者,從提供者位址清單中,基于軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。

服務消費者和提供者,在記憶體中累計調用次數和調用時間,定時每分鐘發送一次統計資料到監控中心。

3.6 maven父子工程實作ssm版dubbo

分布式技術之dubbo

3.6.1 建立父工程

比過去新加jar:

<dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.5.7</version>
  </dependency>
  <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.4.6</version>
  </dependency>
  <dependency>
      <groupId>com.101tec</groupId>
      <artifactId>zkclient</artifactId>
      <version>0.10</version>
  </dependency>
  <!-- 新加jar -->      

3.6.2 拆分項目,建立子工程

分布式技術之dubbo

3.6.3 配置dubbo

生産者:

<dubbo:application name="demo-provider"/>

<!-- 使用multicast廣播注冊中心暴露服務位址 -->
<!--  <dubbo:registry address="multicast://192.168.1.104:1234"/>      

–>

<dubbo:registry protocol=“zookeeper” address=“192.168.23.91:2181”/>

<dubbo:protocol name=“dubbo” port=“20880”/>

<!-- 和本地bean一樣實作服務 -->
<bean id="demoService" class="com.aaa.ssm.service.NewsServiceImpl"/>

<!-- 聲明需要暴露的服務接口 -->
<dubbo:service interface="com.aaa.ssm.service.NewsService" ref="demoService"/>      

消費者:

<dubbo:application name="dubbo-consumer"  />
<!-- 使用multicast廣播注冊中心暴露發現服務位址 -->
<!--  <dubbo:registry address="multicast://192.168.1.104:1234"/>      

–><dubbo:registry protocol=“zookeeper” address=“192.168.23.91:2181”/>

<dubbo:protocol name=“dubbo” port=“20880”/>

<dubbo:reference id=“deptService” check=“false” interface=“com.aaa.ssm.service.NewsService”/>

3.6.4 配置項目,啟動tomcat,運作測試