分佈式服務框架dubbo原理解析

alibaba有好幾個分佈式框架,主要有:進行遠程調用(相似於RMI的這種遠程調用)的(dubbo、hsf),jms消息服務(napoli、notify),KV數據庫(tair)等。這個框架/工具/產品在實現的時候,都考慮到了容災,擴展,負載均衡,因而出現一個配置中心(ConfigServer)的東西來解決這些問題。web

基本原理如圖:數據庫

 

在咱們的系統中,常常會有一些跨系統的調用,如在A系統中要調用B系統的一個服務,咱們可能會使用RMI直接來進行,B系統發佈一個RMI接口服務,而後A系統就來經過RMI調用這個接口,爲了解決容災,擴展,負載均衡的問題,咱們可能會想不少辦法,alibaba的這個辦法感受不錯。mybatis

 

本文只說dubbo,原理以下:mvc

  • ConfigServer

配置中心,和每一個Server/Client之間會做一個實時的心跳檢測(由於它們都是創建的Socket長鏈接),好比幾秒鐘檢測一次。收集每一個Server提供的服務的信息,每一個Client的信息,整理出一個服務列表,如:負載均衡

 serviceName serverAddressList clientAddressList
 UserService 192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4  172.16.0.1,172.16.0.2
 ProductService 192.168.0.3,192.168.0.4,192.168.0.5,192.168.0.6 172.16.0.2,172.16.0.3
 OrderService 192.168.0.10,192.168.0.12,192.168.0.5,192.168.0.6  172.16.0.3,172.16.0.4

當某個Server不可用,那麼就更新受影響的服務對應的serverAddressList,即把這個Server從serverAddressList中踢出去(從地址列表中刪除),同時將推送serverAddressList給這些受影響的服務的clientAddressList裏面的全部Client。如:192.168.0.3掛了,那麼UserService和ProductService的serverAddressList都要把192.168.0.3刪除掉,同時把新的列表告訴對應的Client 172.16.0.1,172.16.0.2,172.16.0.3;框架

當某個Client掛了,那麼更新受影響的服務對應的clientAddressList分佈式

ConfigServer根據服務列表,就能提供一個web管理界面,來查看管理服務的提供者和使用者。工具

新加一個Server時,因爲它會主動與ConfigServer取得聯繫,而ConfigServer又會將這個信息主動發送給Client,因此新加一個Server時,只須要啓動Server,而後幾秒鐘內,Client就會使用上它提供的服務ui

  • Client

調用服務的機器,每一個Client啓動時,主動與ConfigServer創建Socket長鏈接,並將本身的IP等相應信息發送給ConfigServer。spa

Client在使用服務的時候根據服務名稱去ConfigServer中獲取服務提供者信息(這樣ConfigServer就知道某個服務是當前哪幾個Client在使用),Client拿到這些服務提供者信息後,與它們都創建鏈接,後面就能夠直接調用服務了,當有多個服務提供者的時候,Client根據必定的規則來進行負載均衡,如輪詢,隨機,按權重等。

一旦Client使用的服務它對應的服務提供者有變化(服務提供者有新增,刪除的狀況),ConfigServer就會把最新的服務提供者列表推送給Client,Client就會依據最新的服務提供者列表從新創建鏈接,新增的提供者創建鏈接,刪除的提供者丟棄鏈接

  • Server

真正提供服務的機器,每一個Server啓動時,主動與ConfigServer創建Scoket長鏈接,並將本身的IP,提供的服務名稱,端口等信息直接發送給ConfigServer,ConfigServer就會收集到每一個Server提供的服務的信息。

 

優勢:

1,只要在Client和Server啓動的時候,ConfigServer是好的,服務就可調用了,若是後面ConfigServer掛了,那隻影響ConfigServer掛了之後服務提供者有變化,而Client還沒法感知這一變化。

2,Client每次調用服務是不通過ConfigServer的,Client只是與它創建聯繫,從它那裏獲取提供服務者列表而已

3,調用服務-負載均衡:Client調用服務時,能夠根據規則在多個服務提供者之間輪流調用服務。

4,服務提供者-容災:某一個Server掛了,Client依然是能夠正確的調用服務的,當前提是這個服務有至少2個服務提供者,Client能很快的感知到服務提供者的變化,並做出相應反應。

5,服務提供者-擴展:添加一個服務提供者很容易,並且Client會很快的感知到它的存在並使用它。

核心技術:Maven,Springmvc mybatis shiro, Druid, Restful, Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx 
1.     項目核心代碼結構截圖

分佈式框架介紹 - kafkaee - kafkaee的博客

   項目模塊依賴分佈式框架介紹 - kafkaee - kafkaee的博客

特別提醒:開發人員在開發的時候能夠將本身的業務REST服務化或者Dubbo服務化

2.    項目依賴介紹

   2.1 後臺管理系統、Rest服務系統、Scheculer定時調度系統依賴以下圖:
 

分佈式框架介紹 - kafkaee - kafkaee的博客

       2.2 Dubbo獨立服務項目依賴以下圖:

 分佈式框架介紹 - kafkaee - kafkaee的博客

3.  項目功能部分截圖:

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客
 

zookeeper、dubbo服務啓動 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客
 

dubbo管控臺 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 REST服務平臺

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

 

分佈式框架介紹 - kafkaee - kafkaee的博客

相關文章
相關標籤/搜索