日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Dubbo工作流程

發(fā)布時(shí)間:2024/6/21 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 Dubbo工作流程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、dubbo整體架構(gòu)

其中Service 和 Config 層為 API,對(duì)應(yīng)服務(wù)提供方來說是使用ServiceConfig來代表一個(gè)要發(fā)布的服務(wù)配置對(duì)象,對(duì)應(yīng)服務(wù)消費(fèi)方來說ReferenceConfig代表了一個(gè)要消費(fèi)的服務(wù)的配置對(duì)象。可以直接初始化配置類,也可以通過 spring 解析配置生成配置類。
proxy 服務(wù)代理層:擴(kuò)展接口為 ProxyFactory,dubbo實(shí)現(xiàn)的SPI主要JavassistProxyFactory(默認(rèn)使用)和JdkProxyFactory,用來對(duì)服務(wù)提供方和服務(wù)消費(fèi)方的服務(wù)進(jìn)行代理。
registry 注冊(cè)中心層:封裝服務(wù)地址的注冊(cè)與發(fā)現(xiàn),擴(kuò)展接口為 Registry , RegistryService,Dubbo提供的擴(kuò)展接口實(shí)現(xiàn)為ZookeeperRegistry,RedisRegistry,MulticastRegistry,DubboRegistry。
擴(kuò)展接口RegistryFactory,dubbo提供的擴(kuò)展接口實(shí)現(xiàn)DubboRegistryFactory,DubboRegistryFactory,RedisRegistryFactory,ZookeeperRegistryFactory。
cluster 路由層:封裝多個(gè)提供者的路由及負(fù)載均衡,并橋接注冊(cè)中心,
擴(kuò)展接口為 Cluster , Directory , Router ,LoadBalance。
monitor 監(jiān)控層:RPC 調(diào)用次數(shù)和調(diào)用時(shí)間監(jiān)控,擴(kuò)展接口為 MonitorFactory , Monitor , MonitorService。
protocol 遠(yuǎn)程調(diào)用層:封將 RPC 調(diào)用,擴(kuò)展接口為 Protocol , Invoker , Exporter。
exchange 信息交換層:封裝請(qǐng)求響應(yīng)模式,同步轉(zhuǎn)異步,擴(kuò)展接口為 Exchanger , ExchangeChannel ,ExchangeClient , ExchangeServer
transport 網(wǎng)絡(luò)傳輸層:抽象 mina 和 netty 為統(tǒng)一接口擴(kuò)展接口為 Channel , Transporter , Client , Server , Codec
serialize 數(shù)據(jù)序列化層:可復(fù)用的一些工具,擴(kuò)展接口為 Serialization ,ObjectInput , ObjectOutput , ThreadPool

二、dubbo服務(wù)發(fā)布原理

  首先 ServiceConfig 類拿到對(duì)外提供服務(wù)的實(shí)際類 ref(如:UserServiceImpl),然后通過 ProxyFactory 類的 getInvoker 方法使用 ref 生成一個(gè)AbstractProxyInvoker 實(shí)例,到這一步就完成具體服務(wù)到 Invoker 的轉(zhuǎn)化。

  接下來就是 Invoker 轉(zhuǎn)換到 Exporter 的過程。Dubbo 處理服務(wù)暴露的關(guān)鍵就在 Invoker 轉(zhuǎn)換到 Exporter 的過程,上圖中的紅色部分。

  Dubbo 協(xié)議的 Invoker 轉(zhuǎn)為 Exporter 發(fā)生在 DubboProtocol 類的 export 方法,它主要是打開創(chuàng)建一個(gè)Netty Server 偵聽服務(wù),并接收客戶端發(fā)來的各種請(qǐng)求,通訊細(xì)節(jié)由 Dubbo 自己實(shí)現(xiàn),然后注冊(cè)服務(wù)到服務(wù)注冊(cè)中心

三、dubbo消費(fèi)原理

  首先 ReferenceConfig 類的 init 方法調(diào)用 Protocol 的 refer 方法生成 Invoker 實(shí)例(如上圖中的紅色部分),這是服務(wù)消費(fèi)的關(guān)鍵。接下來把Invoker 轉(zhuǎn)換為客戶端需要的接口。

  dubbo協(xié)議的invoker轉(zhuǎn)換為客戶端需要的接口是發(fā)生在DubboProtocol的refer方法,他主要是創(chuàng)建一個(gè)netty client 鏈接服務(wù)提供者,通訊細(xì)節(jié)由 Dubbo 自己實(shí)現(xiàn)。

四、dubbo原理總結(jié)

節(jié)點(diǎn)角色說明:

Provider: 暴露服務(wù)的服務(wù)提供方。
Consumer: 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。
Registry: 服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心。
Monitor: 統(tǒng)計(jì)服務(wù)的調(diào)用次調(diào)和調(diào)用時(shí)間的監(jiān)控中心。
Container: 服務(wù)運(yùn)行容器。

調(diào)用關(guān)系說明:

服務(wù)容器負(fù)責(zé)啟動(dòng),加載,運(yùn)行服務(wù)提供者。
服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。
服務(wù)消費(fèi)者在啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù)。
注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。
服務(wù)消費(fèi)者,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺(tái)提供者進(jìn)行調(diào)用,如果調(diào)用失敗,再選另一臺(tái)調(diào)用。
服務(wù)消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。

registry(configServer)

  注冊(cè)中心,和每個(gè)Server/Client之間會(huì)作一個(gè)實(shí)時(shí)的心跳檢測(cè)(因?yàn)樗鼈兌际墙⒌腟ocket長(zhǎng)連接),比如幾秒鐘檢測(cè)一次。收集每個(gè)Server提供的服務(wù)的信息,每個(gè)Client的信息,整理出一個(gè)服務(wù)列表

  當(dāng)某個(gè)Server不可用,那么就更新受影響的服務(wù)對(duì)應(yīng)的serverAddressList,即把這個(gè)Server從serverAddressList中踢出去(從地址列表中刪除),同時(shí)將推送serverAddressList給這些受影響的服務(wù)的clientAddressList里面的所有Client

  新加一個(gè)Server時(shí),由于它會(huì)主動(dòng)與ConfigServer取得聯(lián)系,而ConfigServer又會(huì)將這個(gè)信息主動(dòng)發(fā)送給Client,所以新加一個(gè)Server時(shí),只需要啟動(dòng)Server,然后幾秒鐘內(nèi),Client就會(huì)使用上它提供的服務(wù)

consumer(client)

  調(diào)用服務(wù)的機(jī)器,每個(gè)Client啟動(dòng)時(shí),主動(dòng)與ConfigServer建立Socket長(zhǎng)連接,并將自己的IP等相應(yīng)信息發(fā)送給ConfigServer。
  Client在使用服務(wù)的時(shí)候根據(jù)服務(wù)名稱去ConfigServer中獲取服務(wù)提供者信息(這樣ConfigServer就知道某個(gè)服務(wù)是當(dāng)前哪幾個(gè)Client在使用),Client拿到這些服務(wù)提供者信息后,與它們都建立連接,后面就可以直接調(diào)用服務(wù)了,當(dāng)有多個(gè)服務(wù)提供者的時(shí)候,Client根據(jù)一定的規(guī)則來進(jìn)行負(fù)載均衡,如輪詢,隨機(jī),按權(quán)重等。
  一旦Client使用的服務(wù)它對(duì)應(yīng)的服務(wù)提供者有變化(服務(wù)提供者有新增,刪除的情況),ConfigServer就會(huì)把最新的服務(wù)提供者列表推送給Client,Client就會(huì)依據(jù)最新的服務(wù)提供者列表重新建立連接,新增的提供者建立連接,刪除的提供者丟棄連接

provider(server)

  真正提供服務(wù)的機(jī)器,每個(gè)Server啟動(dòng)時(shí),主動(dòng)與ConfigServer建立Scoket長(zhǎng)連接,并將自己的IP,提供的服務(wù)名稱,端口等信息直接發(fā)送給ConfigServer,ConfigServer就會(huì)收集到每個(gè)Server提供的服務(wù)的信息。

優(yōu)點(diǎn):

只要在Client和Server啟動(dòng)的時(shí)候,ConfigServer是好的,服務(wù)就可調(diào)用了,如果后面ConfigServer掛了,那只影響ConfigServer掛了以后服務(wù)提供者有變化,而Client還無法感知這一變化。
Client每次調(diào)用服務(wù)是不經(jīng)過ConfigServer的,Client只是與它建立聯(lián)系,從它那里獲取提供服務(wù)者列表而已
調(diào)用服務(wù)-負(fù)載均衡:Client調(diào)用服務(wù)時(shí),可以根據(jù)規(guī)則在多個(gè)服務(wù)提供者之間輪流調(diào)用服務(wù)。
服務(wù)提供者-容災(zāi):某一個(gè)Server掛了,Client依然是可以正確的調(diào)用服務(wù)的,當(dāng)前提是這個(gè)服務(wù)有至少2個(gè)服務(wù)提供者,Client能很快的感知到服務(wù)提供者的變化,并作出相應(yīng)反應(yīng)。
服務(wù)提供者-擴(kuò)展:添加一個(gè)服務(wù)提供者很容易,而且Client會(huì)很快的感知到它的存在并使用它。

總結(jié)

以上是生活随笔為你收集整理的Dubbo工作流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。