dubbo入門學習(一)-----分佈式基礎理論、架構發展以及rpc、dubbo核心概念

1、分佈式基礎理論

一、什麼是分佈式系統

《分佈式系統原理與範型》定義:前端

「分佈式系統是若干獨立計算機的集合,這些計算機對於用戶來講就像單個相關係統」java

分佈式系統(distributed system)是創建在網絡之上的軟件系統。nginx

隨着互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已沒法應對,分佈式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。git

二、發展演變

a、單一應用架構

當網站流量很小時,只需一個應用,將全部功能都部署在一塊兒,以減小部署節點和成本。此時,用於簡化增刪改查工做量的數據訪問框架(ORM)是關鍵。程序員

適用於小型網站,小型管理系統,將全部功能都部署到一個功能裏,簡單易用。github

缺點: 算法

  • 1、性能擴展比較難
  • 二、協同開發問題
  • 3、不利於升級維護

 b、垂直應用架構

當訪問量逐漸增大,單一應用增長機器帶來的加速度愈來愈小,將應用拆成互不相干的幾個應用,以提高效率。此時,用於加速前端頁面開發的Web框架(MVC)是關鍵。spring

 

經過切分業務來實現各個模塊獨立部署,下降了維護和部署的難度,團隊各司其職更易管理,性能擴展也更方便,更有針對性。數據庫

缺點: 公用模塊沒法重複利用,開發性的浪費apache

c、分佈式服務架構

當垂直應用愈來愈多,應用之間交互不可避免,將核心業務抽取出來,做爲獨立的服務,逐漸造成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用於提升業務複用及整合的分佈式服務框架(RPC)是關鍵。

 

d、流動計算架構

當服務愈來愈多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增長一個調度中心基於訪問壓力實時管理集羣容量,提升集羣利用率。此時,用於提升機器利用率的資源調度和治理中心(SOA)[ Service Oriented Architecture]是關鍵

 

 

2、RPC

一、什麼叫RPC

RPCRemote Procedure Call】是指遠程過程調用,是一種進程間通訊方式,他是一種技術的思想,而不是規範。它容許程序調用另外一個地址空間(一般是共享網絡的另外一臺機器上)的過程或函數,而不用程序員顯式編碼這個遠程調用的細節。即程序員不管是調用本地的仍是遠程的函數,本質上編寫的調用代碼基本相同。

二、RPC基本原理

其實在本人spring cloud模塊已經介紹過,下面再經過一個示例更好的解釋啥是rpc:

client須要調用server,按照傳統的寫法以下:

client端:

public xxx call() {
     http.post("server的服務地址", param);  
}

這樣寫會讓client與server綁定起來,好比生產環境中,server有n臺服務器集羣部署,固然可能會經過nginx去作負載均衡,使得client調用server的地址是同一個,可是耦合性很是高,基於rpc的設計方案,在client端放一個client-stub,在server端放一個server-stub,

當client須要從server端獲取數據時,調用步驟以下:

  • 一、調用存放在client端的client-stub,client-stub將參數序列化,而後經過socket將二進制數據發送到server-stub;
  • 二、server-stub拿到二進制數據以後,進行反序列化,而且調用server的具體處理邏輯,將結果給到server-stub;
  • 三、server-stub將數據進行序列化,經過socket傳輸到client;
  • 四、client端進行反序列化操做,最終將數據轉換成調用結果。

這麼作有啥好處?

不管之後server端作啥調整,client均可以保持不變,除非連client-stub也須要改動,client就跟調用本地方法同樣,下降耦合。而且從上述過程也能夠得出一個結論:RPC兩個核心模塊-----通信,序列化

3、dubbo核心概念

一、簡介 

Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。

官網http://dubbo.apache.org/

 二、基本概念

服務提供者Provider:暴露服務的服務提供方,服務提供者在啓動時,向註冊中心註冊本身提供的服務。

服務消費者Consumer調用遠程服務的服務消費方,服務消費者在啓動時,向註冊中心訂閱本身所需的服務,服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,若是調用失敗,再選另外一臺調用。

註冊中心Registry:註冊中心返回服務提供者地址列表給消費者,若是有變動,註冊中心將基於長鏈接推送變動數據給消費者

監控中心Monitor:服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心

調用關係說明

  • 服務容器負責啓動,加載,運行服務提供者。
  • 服務提供者在啓動時,向註冊中心註冊本身提供的服務。
  • 服務消費者在啓動時,向註冊中心訂閱本身所需的服務。
  • 註冊中心返回服務提供者地址列表給消費者,若是有變動,註冊中心將基於長鏈接推送變動數據給消費者。
  • 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,若是調用失敗,再選另外一臺調用。
  • 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

4、dubbo環境搭建 

Zookeeper是 Apacahe Hadoop 的子項目,是一個樹型的目錄服務,支持變動推送,適合做爲 Dubbo 服務的註冊中心,工業強度較高,可用於生產環境,並推薦使用。

流程說明:

  • 服務提供者啓動時: 向 /dubbo/com.foo.BarService/providers 目錄下寫入本身的 URL 地址
  • 服務消費者啓動時: 訂閱 /dubbo/com.foo.BarService/providers 目錄下的提供者 URL 地址。並向 /dubbo/com.foo.BarService/consumers 目錄下寫入本身的 URL 地址
  • 監控中心啓動時: 訂閱 /dubbo/com.foo.BarService 目錄下的全部提供者和消費者 URL 地址。

支持如下功能:

  • 當提供者出現斷電等異常停機時,註冊中心能自動刪除提供者信息
  • 當註冊中心重啓時,能自動恢復註冊數據,以及訂閱請求
  • 當會話過時時,能自動恢復註冊數據,以及訂閱請求
  • 當設置 <dubbo:registry check="false" /> 時,記錄失敗註冊和訂閱請求,後臺定時重試
  • 可經過 <dubbo:registry username="admin" password="1234" /> 設置 zookeeper 登陸信息
  • 可經過 <dubbo:registry group="dubbo" /> 設置 zookeeper 的根節點,不設置將使用無根樹
  • 支持 * 號通配符 <dubbo:reference group="*" version="*" />,可訂閱服務的全部分組和全部版本的提供者

一、下載zookeeper

 在dubbo官網上,推薦使用zookeeper做爲註冊中心,下載地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/

 下載完成後須要注意一個問題,就是要將zoo_sample.cfg更改成zoo.cfg,不然啓動會報錯,說找不到zoo.cfg

zoo.cfg

#心跳基本時間單位,毫秒級,ZK基本上全部的時間都是這個時間的整數倍
tickTime=2000
#集羣中的follower服務器(F)與leader服務器(L)之間初始鏈接時能容忍的最多心跳數
initLimit=10
#集羣中的follower服務器與leader服務器之間請求和應答之間能容忍的最多心跳數
syncLimit=5
#內存數據庫快照存放地址,若是沒有指定事務日誌存放地址(dataLogDir),默認也是存放在這個 路徑
下,建議兩個地址分開存放到不一樣的設備上。
dataDir=E:/utils/zookeeper/zookeeper-3.4.12/data
#指定端口
clientPort=2181

二、啓動zookeeper服務

啓動效果以下:

啓動客戶端

效果以下:

而後作以下操做:

ls /列出zookeeper根下保存的全部節點

create –e /taoyong 123建立一個taoyong臨時節點,值爲123

get /taoyong獲取/taoyong節點的值

結果以下:

[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] create -e /taoyong 123
Created /taoyong
[zk: localhost:2181(CONNECTED) 2] get /taoyong
123
cZxid = 0x4
ctime = Wed Jun 05 23:01:24 CST 2019
mZxid = 0x4
mtime = Wed Jun 05 23:01:24 CST 2019
pZxid = 0x4
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x100112bcb910000
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 3]

後面對zookeeper,這裏只要知道zookeeper有各類節點便可。

三、dubbo-admin

dubbo自己並非一個服務軟件。它其實就是一個jar包可以幫你的java程序鏈接到zookeeper,並利用zookeeper消費、提供服務。因此你不用在Linux上啓動什麼dubbo服務。可是爲了讓用戶更好的管理監控衆多的dubbo服務,官方提供了一個可視化的監控程序,不過這個監控即便不裝也不影響使用。

a、下載dubbo-admin

下載地址:https://github.com/apache/incubator-dubbo-ops

 

進入dubbo-admin中,找到application.properties,打開

server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=root

dubbo.registry.address=zookeeper://127.0.0.1:2181

注意最後一行便可,只要zookeeper的地址正確就好(由於咱們是本地搭的zookeeper),用戶名密碼本身設置,不過用戶名貌似只能是root或guest。

b、找到dubbo-admin的pom.xml位置,打包

打開,而後輸入

mvn clean package

打好包以後運行

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

當項目啓動以後,打開瀏覽器訪問

http://你機器的ip:7001/

啓動端口能夠在項目啓動日誌裏面看(springboot的項目)。而後根據本身設置的用戶名密碼登陸進去:

 注意:在運行dubbo-admin以前,必定要打開zookeeper服務。

相關文章
相關標籤/搜索