分布式服務框架dubbo原理解析 轉

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

?

在我們的系統中,經常會有一些跨系統的調用,如在A系統中要調用B系統的一個服務,我們可能會使用RMI直接來進行,B系統發布一個RMI接口服務,然后A系統就來通過RMI調用這個接口,為了解決容災,擴展,負載均衡的問題,我們可能會想很多辦法,alibaba的這個辦法感覺不錯。
本文只說dubbo,原理如下:
  • ConfigServer
配置中心,和每個Server/Client之間會作一個實時的心跳檢測(因為它們都是建立的Socket長連接),比如幾秒鐘檢測一次。收集每個Server提供的服務的信息,每個Client的信息,整理出一個服務列表,如:
?serviceNameserverAddressListclientAddressList
?UserService192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4?172.16.0.1,172.16.0.2
?ProductService192.168.0.3,192.168.0.4,192.168.0.5,192.168.0.6172.16.0.2,172.16.0.3
?OrderService192.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就會使用上它提供的服務
  • Client
調用服務的機器,每個Client啟動時,主動與ConfigServer建立Socket長連接,并將自己的IP等相應信息發送給ConfigServer。
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會很快的感知到它的存在并使用它。

?

順便說一下,hadoop里面的中心節點跟這里的configServer作用類似,在維護節點列表方面,不過它的相關計算都需要通過中心節節點,讓它來分配任務。

本文轉自左正博客園博客,原文鏈接:http://www.cnblogs.com/soundcode/p/6363936.html,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287497.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【傾情奉獻】遙感物候研究:30年長時間序列遙感數據集GIMMS 3g NDVI產品預處理完整步驟

本文為作者碩士學位論文遙感物候研究數據處理過程總結。GIMMS(Global Inventory Modelling and Mapping Studies) 3g NDVI來源于ECOCAST網站(http://ecocast.arc.nasa.gov),是由NOAA衛星搭載的AVHRR傳感器獲取的全球植被數據,空間分辨率為0.0833?,時間分辨率為15?d,一…

過早的給方法中 引用對象 設為 null 可被 GC提前回收嗎?

經常在代碼中看到有人將 null 賦值給引用類型,來達到讓 GC 提前回收的目的,這樣做真的有用嗎?今天我們就來研究一下。為了方便講解,來一段測試代碼,提前將 test1null ,然后調用 GC.Collect() 看看是否能提前…

[python opencv 計算機視覺零基礎到實戰] 十五 直方圖反向投影

一、學習目標 了解了直方圖反向投影的一般流程了解2D直方圖的使用 如有錯誤歡迎指出~ 二、了解直方圖反向投影 2.1 了解2D直方圖 需要對直方圖進行反向投影,需要使用2D直方圖。2D直方圖需要使用calcHist方法。calcHist方法在前兩節中已經有了解,現在…

關聯規則java代碼_重量挖掘關聯規則挖掘方法,哪個大神可以將以下偽代碼轉換為Java代碼?...

重量挖掘關聯規則挖掘方法,哪個大神可以將以下偽代碼轉換為Java代碼? 10改進的加權關聯規則算法的基本步驟與Apriori算法相似: 首先找到加權支持度不小于用戶指定的最小加權支持度的所有頻繁項集加權關聯規則,然后使用頻繁項集生成所有滿足最…

Boostrap ZURB Foundation —— Web開發前端框架

webflow:Webflow 允許設計師通過自由的拖拉拽與 CSS 類互動,而定義它們的過程無需寫任何一行代碼。用戶在完成從設計到 CSS 構架之后,甚至可以在線直接將建好的網頁發布,而不需要導出代碼到其他發布工具上。類似的這些 B2D 市場&a…

Git之HEAD和origin

1 問題 我們經常看見git相關操作里面看到HEAD和origin這些專業名稱,它娘的到底什么意思。 2 解釋 1)HEAD git 中的分支,本質上僅僅是個指向 commit 對象的可變指針, HEAD 是一個特別指針,它是一個指向你正在工作中的…

如何離線安裝chrome插件

如何離線安裝chrome插件 本文轉自Work Hard Work Smart博客園博客,原文鏈接:http://www.cnblogs.com/linlf03/p/6838852.html,如需轉載請自行聯系原作者

多種語言《九九乘法表》薈萃:C、C++、C#、JavaScript、SQL、VB、VBA、Python

九九乘法表對于我們學習循環結構,尤其是雙重循環特別有幫助,本文演示用C、C++、C#、HTML、SQL、VB、VBA、Python等多種語九九乘法表。 一、C語言 #include<stdio.h> main() {int i,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++){printf("%d*%d=%d\t",j,i,i*j…

Git之刪除遠程分支

1 問題 在工作區間刪除遠程分支 2 刪除命令 git push origin --delete name

iptables (2) 基本配置

iptables 基本命令使用舉例 一、鏈的基本操作 1、清除所有的規則。1&#xff09;清除預設表filter中所有規則鏈中的規則。# iptables -F -F, --flush [chain]Flush the selected chain (all the chains in the table if none is given). This is equivalent to deleting all …

[python opencv 計算機視覺零基礎到實戰] 十六、用opencv畫畫

一、學習目標 了解如何使用line方法了解如何使用rectangle方法了解如何使用ellipse方法 如有錯誤歡迎指出~ 二、了解OpenCV的繪圖方法 2.1 了解直線繪圖方法 我們在前兩節中有了解使用OpenCV中的矩形繪制&#xff0c;接下來我們了解一下更多的圖形繪制方法。我們在OpenCV中…

基于.NetCore開發博客項目 StarBlog - (5) 開始搭建Web項目

系列文章基于.NetCore開發博客項目 StarBlog - (1) 為什么需要自己寫一個博客&#xff1f;基于.NetCore開發博客項目 StarBlog - (2) 環境準備和創建項目基于.NetCore開發博客項目 StarBlog - (3) 模型設計基于.NetCore開發博客項目 StarBlog - (4) markdown博客批量導入基于.N…

java計算每個元素出現的百分比_Java程序計算百分比

百分數表示百分數(百)&#xff0c;即百分數與100之比。百分數的符號為&#xff05;。我們通常會計算獲得的商標&#xff0c;投資回報率等百分比。該百分比也可以超過100&#xff05;。例如&#xff0c;假設我們有總數和一部分。所以我們說那一部分占總數的百分之幾&#xff0c;…

ECShop 前臺用戶中心調整左側欄目及中心部分呈現頁面

1、首先調整用戶中心左側欄目&#xff0c;在 .dwt 里面我修改了半天&#xff0c;頁面沒改動。。后來某大神說這個是在另一個文件里&#xff1a;/themes/你用的模板目錄/library/user_menu.lbi 文件改一個試試吧~ 不出意外的成功了吧2、中心部分呈現內容的調整。&#xff08;今天…

【測繪程序設計】高斯克呂格投影:帶號及中央經度計算神器V1.0(附源程序)

【問題描述】:很多情況下,我們知道某一地點的坐標(經緯度),需要計算其在高斯克呂格投影中的帶號及中央經度。關于該問題,有具體的公式可言,只是計算過程稍微繁瑣一些,當然啦,我們可以寫程序來解決,誰叫我們是名副其實的GISer呢?另外,這些復雜的計算過程還是交給計算…

外部中斷0(含知識點)

1 #include "stm32f10x.h" // 相當于51單片機中的 #include <reg51.h>2 #include "stm32f10x_gpio.h"3 #include "stm32f10x_exti.h"4 #include "misc.h"5 6 /*外部中斷配置*/7 8 9 int main(void)10 {11 /*************…

Git之tag

1 tag相關命令 1) 打上tag git tag v1.0.0 git tag -a v1.0.0 -m info 2) 查看tag git tag 3) 切換tag git checkout tagname 4) 刪除tag git tag -d v1.0.0 5) 推送遠程 推送單個tag git push origin v1.0.0 推送所有tag git push origin --tags

[python opencv 計算機視覺零基礎到實戰] 十七、用鼠標畫畫

一、學習目標 了解長軸和短軸參數了解旋轉角度參數了解起始角度參數了解終止角度參數 二、深入了解OpenCV的ellipse方法 2.1 縱橫 橢圓的繪制方法在上一節中我們已經知道了是使用ellipse&#xff0c;ellipse的函數原型如下&#xff0c;為了清晰認識ellipse方法&#xff0c;…

Microsoft Build 2022 到來,開發者們做好準備了嗎?

Microsoft Build 2022 將會在5月24日 - 5月26日正式舉行&#xff0c;作為開發者的你是否和我一樣期待本次的 Build&#xff0c;它會帶來什么的技術革新以及黑科技呢&#xff1f;下面我就針對今年 Build 的幾個主題結合相關技術來談談我對 Build 的期待。開發技術和相關工具今年…

【測繪程序設計】視距測量神器V1.0(附源程序)

神器預覽: 一、視距測量概念 視距測量是利用水準儀的望遠鏡內十字絲分劃板上的視距絲在視距尺(水準尺)上讀數,根據光學和幾何學原理,同時測定儀器到地面點的水平距離和高差的一種方法。 視距測量具有操作簡便、速度快、不受地面起伏變化的影響的優點,被廣泛應用于碎部測…