人妻系列无码专区av在线,国内精品久久久久久婷婷,久草视频在线播放,精品国产线拍大陆久久尤物

當前位置:首頁 > 數(shù)據(jù)庫 > 正文

dubbo的實現(xiàn)原理?Springcloud已經(jīng)沒人用了嗎

dubbo的實現(xiàn)原理?Springcloud已經(jīng)沒人用了嗎

大家好,今天小編來為大家解答以下的問題,關于dubbo的實現(xiàn)原理,Springcloud已經(jīng)沒人用了嗎這個很多人還不知道,現(xiàn)在讓我們一起來看看吧!dubbo異步轉(zhuǎn)同步原...

大家好,今天小編來為大家解答以下的問題,關于dubbo的實現(xiàn)原理,Springcloud已經(jīng)沒人用了嗎這個很多人還不知道,現(xiàn)在讓我們一起來看看吧!

dubbo異步轉(zhuǎn)同步原理

Dubbo是一款開源的RPC中間件框架,底層數(shù)據(jù)傳輸默認使用的Netty,那么請求的處理理論上是異步的。

異步轉(zhuǎn)同步原理:

1、調(diào)用方請求遠程服務之后,需要等待結果,此刻,請求線程應該阻塞。

2、遠程服務返回結果后,喚醒請求線程,調(diào)用方得到結果:Dubbo異步轉(zhuǎn)同步,核心類是DefaultFuture,核心方法是get(),received(Channelchannel,Responseresponse)。

dubbo原理

dubbo原理如下:

第一層:service層,接口層,給服務提供者和消費者來實現(xiàn)的。

第二層:config層,配置層,主要是對dubbo進行各種配置的。

第三層:proxy層,服務代理層,透明生成客戶端的stub和服務單的skeleton。

第四層:registry層,服務注冊層,負責服務的注冊與發(fā)現(xiàn)。

第五層:cluster層,集群層,封裝多個服務提供者的路由以及負載均衡,將多個實例組合成一個服務。

第六層:monitor層,監(jiān)控層,對rpc接口的調(diào)用次數(shù)和調(diào)用時間進行監(jiān)控。

第七層:protocol層,遠程調(diào)用層,封裝rpc調(diào)用。

第八層:exchange層,信息交換層,封裝請求響應模式,同步轉(zhuǎn)異步。

第九層:transport層,網(wǎng)絡傳輸層,抽象mina和netty為統(tǒng)一接口。

第十層:serialize層,數(shù)據(jù)序列化層。

dubbo隱式傳參的原理

1)遠程通訊協(xié)議基本原理

a)網(wǎng)絡通信:將二進制流從一臺計算機傳輸?shù)搅硗庖慌_計算機,基于傳輸協(xié)議和網(wǎng)絡IO來實現(xiàn)

b)傳輸協(xié)議有http、tcp、udp,都是在基于Socket概念擴展而來

c)網(wǎng)絡IO,主要有bio、nio、aio,所有的分布式應用通訊都基于這個原理而實現(xiàn)

dubbo原理深度解析

dubbo原理和機制:

Dubbo是一個高性能優(yōu)秀的服務框架,它使得應用可通過高性能的RPC實現(xiàn)服務的輸出和輸入功能,可以和Spring框架無縫集成。

Dubbo是一款高性能、輕量級的開源JavaRPC框架。

它提供了三大核心能力:

1、面向接口的遠程方法調(diào)用;

2、智能容錯和負載均衡;

3、服務自動注冊和發(fā)現(xiàn)。

注冊中心負責服務地址的注冊與查找,相當于目錄服務,服務提供者和消費者只在啟動時與注冊中心交互,注冊中心不轉(zhuǎn)發(fā)請求,壓力較小。

監(jiān)控中心負責統(tǒng)計各服務調(diào)用次數(shù),調(diào)用時間等,統(tǒng)計先在內(nèi)存匯總后每分鐘一次發(fā)送到監(jiān)控中心服務器,并以報表展示。

服務提供者向注冊中心注冊其提供的服務,并匯報調(diào)用時間到監(jiān)控中心,此時間不包含網(wǎng)絡開銷。

服務消費者向注冊中心獲取服務提供者地址列表,并根據(jù)負載算法直接調(diào)用提供者,同時匯報調(diào)用時間到監(jiān)控中心,此時間包含網(wǎng)絡開銷。

dubbo調(diào)用流程原理

步驟

1/7分步閱讀

服務容器Container負責啟動加載運行服務提供者Provider。根據(jù)Provider配置的文件根據(jù)協(xié)議發(fā)布服務,完成服務的初始化.

2/7

Provider在啟動時,根據(jù)配置中的Registry地址連接Registry,將Provider的服務信息發(fā)布到Registry,在Registry注冊自己提供的服務。

3/7

Consumer在啟動時,根據(jù)消費者XML配置文件中的服務引用信息,連接到Registry,向Registry訂閱自己所需的服務。

4/7

Registry根據(jù)服務訂閱關系,返回Provider地址列表給Consumer,如果有變更,Registry會推送最新的服務地址信息給Consumer。

5/7

Consumer調(diào)用遠程服務時,會根據(jù)路由策略,先從緩存的Provider地址列表中選擇一臺進行,跨進程調(diào)用服務,假如調(diào)用失敗,再重新選另一臺調(diào)用。

6/7

服務Provider和Consumer,會在內(nèi)存中記錄調(diào)用次數(shù)和調(diào)用時間,每分鐘發(fā)送一次統(tǒng)計數(shù)據(jù)到Monitor。

7/7

這就是整個完整的Dubbo調(diào)用過程和原理

單一長連接通信原理

基本原理如下:

1.client一個線程調(diào)用遠程接口,生成一個唯一的ID(比如一段隨機字符串,UUID等),Dubbo是使用AtomicLong從0開始累計數(shù)字的

2.將打包的方法調(diào)用信息(如調(diào)用的接口名稱,方法名稱,參數(shù)值列表等),和處理結果的回調(diào)對象callback,全部封裝在一起,組成一個對象object

3.向?qū)iT存放調(diào)用信息的全局ConcurrentHashMap里面put(ID,object)

4.將ID和打包的方法調(diào)用信息封裝成一對象connRequest,使用IoSession.write(connRequest)異步發(fā)送出去

5.當前線程再使用callback的get()方法試圖獲取遠程返回的結果,在get()內(nèi)部,則使用synchronized獲取回調(diào)對象callback的鎖,再先檢測是否已經(jīng)獲取到結果,如果沒有,然后調(diào)用callback的wait()方法,釋放callback上的鎖,讓當前線程處于等待狀態(tài)。

6.服務端接收到請求并處理后,將結果(此結果中包含了前面的ID,即回傳)發(fā)送給客戶端,客戶端socket連接上專門監(jiān)聽消息的線程收到消息,分析結果,取到ID,再從前面的ConcurrentHashMap里面get(ID),從而找到callback,將方法調(diào)用結果設置到callback對象里。

7.監(jiān)聽線程接著使用synchronized獲取回調(diào)對象callback的鎖(因為前面調(diào)用過wait(),那個線程已釋放callback的鎖了),再notifyAll(),喚醒前面處于等待狀態(tài)的線程繼續(xù)執(zhí)行(callback的get()方法繼續(xù)執(zhí)行就能拿到調(diào)用結果了),至此,整個過程結束。

好了,文章到此結束,希望可以幫助到大家。