欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Dubbo架構(gòu)整體設(shè)計(jì)詳解

 更新時(shí)間:2023年04月13日 11:05:14   作者:蹦跶的蝸牛  
Dubbo是一款高性能、輕量級(jí)的開源Java RPC框架,它提供了三大核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡,以及服務(wù)自動(dòng)注冊(cè)和發(fā)現(xiàn),本文將從 Dubbo 整體架構(gòu)的視角出發(fā),帶你從全局俯瞰 Dubbo 的架構(gòu)設(shè)計(jì),感興趣的同學(xué)可以參考一下

一、Dubbo調(diào)用關(guān)系說明

1.1 組成部分

在這里主要由四部分組成:

● Provider: 暴露服務(wù)的服務(wù)提供方
Protocol:負(fù)責(zé)提供者和消費(fèi)者之間的協(xié)議交互數(shù)據(jù)
Service:真實(shí)的業(yè)務(wù)服務(wù)信息,可以理解成接口和實(shí)現(xiàn)
Container:Dubbo的運(yùn)行環(huán)境
● Consumer:調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方
Protocol:負(fù)責(zé)提供者和消費(fèi)者之間的協(xié)議交互數(shù)據(jù)
Cluster:感知提供者端的列表信息
Proxy:可以理解成提供者的服務(wù)調(diào)用代理,由它接管Consumer中的接口調(diào)用邏輯
● Register:注冊(cè)中心,用于作為服務(wù)發(fā)現(xiàn)和路由配置等工作,提供者和消費(fèi)者都會(huì)在這里進(jìn)行注冊(cè)
● Monitor:用于提供者和消費(fèi)者中的數(shù)據(jù)統(tǒng)計(jì),比如調(diào)用頻次、成功失敗次數(shù)等信息

1.2 啟動(dòng)和執(zhí)行流程說明

● 提供者端啟動(dòng),容器負(fù)責(zé)把Service信息加載,并通過Protocol注冊(cè)到注冊(cè)中心;
● 消費(fèi)者端啟動(dòng),通過監(jiān)聽提供者列表來(lái)感知提供者信息,并在提供者發(fā)生改變時(shí),通過 注冊(cè)中心及時(shí)通知消費(fèi)端
● 消費(fèi)方通過Proxy模塊發(fā)起請(qǐng)求;
● 消費(fèi)者端利用Cluster模塊選擇真實(shí)的要調(diào)用的提供者;
● 消費(fèi)者利用Consumer中的Protocol將信息發(fā)送給提供者;
● 提供者通過Protocol模塊來(lái)處理消費(fèi)者信息;
● 最后由提供者的Service來(lái)進(jìn)行處理

二、整體調(diào)用鏈路

說明:淡綠色代表服務(wù)生產(chǎn)者的范圍,淡藍(lán)色代表服務(wù)消費(fèi)者的范圍,紅色箭頭代表調(diào)用的方向:業(yè)務(wù)邏輯層 -> RPC層(遠(yuǎn)程過程調(diào)用)-> Remoting(遠(yuǎn)程數(shù)據(jù)傳輸)

整體調(diào)用流程如下:

● 消費(fèi)者通過Interface進(jìn)行方法調(diào)用,統(tǒng)一交由消費(fèi)者端的Proxy,通過ProxyFactory來(lái)進(jìn)行代理對(duì)象的創(chuàng)建,這里使用jdk的javassist技術(shù)
● 交給Filter模塊做統(tǒng)一的過濾請(qǐng)求
● 接下來(lái)就是最主要的Invoker調(diào)用邏輯了
○ 通過Directory去配置中讀取信息,最終通過list方法獲取所有的Invoker
○ 通過Cluster模塊,根據(jù)選擇的具體路由規(guī)則來(lái)選取Invoker列表
○ 通過LoadBalance模塊,根據(jù)負(fù)載均衡策略選擇一個(gè)具體的Invoker來(lái)處理請(qǐng)求
○ 如果執(zhí)行中出現(xiàn)錯(cuò)誤,并且Consumer階段配置了重試機(jī)制,則會(huì)重新嘗試執(zhí)行
● 繼續(xù)經(jīng)過Filter進(jìn)行執(zhí)行功能的前后封裝,Invoker選擇具體的執(zhí)行協(xié)議
● 客戶端進(jìn)行編碼和序列化,然后發(fā)送數(shù)據(jù)
● 達(dá)到Provider中的Server層進(jìn)行反編碼和發(fā)序列化接收到的數(shù)據(jù)
● 使用Exporter選擇執(zhí)行器
● 交由Filter進(jìn)行一個(gè)提供者端的過濾,到達(dá)Invoker執(zhí)行器
● 通過Invoker調(diào)用接口的具體實(shí)現(xiàn),然后返回結(jié)果

三、Dubbo整體設(shè)計(jì)

圖例說明:

● 圖中左邊淡藍(lán)背景的為服務(wù)消費(fèi)方使用的接口,右邊淡綠色背景的為服務(wù)提供方使用的接口,位于中軸線上的為雙方都用到的接口。
● 圖中從上往下分為十層,各層為單向依賴,右邊的黑色箭頭代表層之間的依賴關(guān)系,每一層都可以剝離上層被復(fù)用,其中Service和Config層為API,其他各層均為SPI
● 圖中綠色的小塊為擴(kuò)展接口,藍(lán)色小塊為實(shí)現(xiàn)類,圖中只顯示用于關(guān)聯(lián)各層的實(shí)現(xiàn)類
● 圖中藍(lán)色虛線為初始化過程,即啟動(dòng)時(shí)組裝鏈,紅色實(shí)線為方法調(diào)用過程,即運(yùn)行時(shí)調(diào)用鏈,紫色箭頭為繼承,可以把子類看做父類的同一個(gè)節(jié)點(diǎn),線上的文字為調(diào)用的方法。

Dubbo源碼整體設(shè)計(jì)與調(diào)用鏈路十分相似。只不過這里可以看到接口的一些具體實(shí)現(xiàn)以及左側(cè)也有更為詳細(xì)的層次劃分,我們?cè)诤竺娴脑创a解析時(shí)也會(huì)著重介紹其中比較重要的模塊實(shí)現(xiàn)。

接下來(lái)分層進(jìn)行介紹

1、Business業(yè)務(wù)邏輯層
● Service業(yè)務(wù)層:包括業(yè)務(wù)代碼比如接口和實(shí)現(xiàn)類
2、RPC層:遠(yuǎn)程過程調(diào)用層
● config配置層,對(duì)外提供配置,以ServiceConfig、ReferenceConfig為核心,可以直接初始化配置類,也可解析配置文件
● Proxy服務(wù)代理層,無(wú)論是生產(chǎn)者還是消費(fèi)者,框架都會(huì)產(chǎn)生一個(gè)代理類,整個(gè)過程對(duì)上層透明,業(yè)務(wù)層對(duì)遠(yuǎn)程調(diào)用無(wú)感
● Register注冊(cè)中心層,封裝服務(wù)地址的注冊(cè)與發(fā)現(xiàn),以服務(wù)的URL位中心
● Cluster路由層(集群容錯(cuò)層),提供了多個(gè)提供者的路由和負(fù)載均衡,并且它橋接注冊(cè)中心以Invoker為中心
● Monitor監(jiān)控層,RPC調(diào)用相關(guān)的信息,如調(diào)用次數(shù)、失敗情況、調(diào)用時(shí)間等統(tǒng)計(jì)信息都會(huì)在這一層完成統(tǒng)計(jì)
● Protocol遠(yuǎn)程調(diào)用層,封裝RPC調(diào)用,無(wú)論是服務(wù)的暴露還是服務(wù)的引用,都是在Protocol中作為主功能入口負(fù)責(zé)Invoker的整個(gè)生命周期,Dubbo中的所有模型都向Invoker靠攏
3、Rmoting層:遠(yuǎn)程數(shù)據(jù)傳輸層
● Exchange信息交換層,封裝請(qǐng)求和響應(yīng)的模式,把請(qǐng)求由同步轉(zhuǎn)為異步
● Transport網(wǎng)絡(luò)傳輸層,統(tǒng)一網(wǎng)絡(luò)傳輸?shù)慕涌?,比如Netty和mina統(tǒng)一為一個(gè)網(wǎng)絡(luò)傳輸接口
● Serialize數(shù)據(jù)序列化層,負(fù)責(zé)管理整個(gè)框架中的數(shù)據(jù)傳輸?shù)男蛄谢头葱蛄谢?/p>

到此這篇關(guān)于Dubbo架構(gòu)整體設(shè)計(jì)詳解的文章就介紹到這了,更多相關(guān)Dubbo架構(gòu)設(shè)計(jì)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot超詳細(xì)講解請(qǐng)求處理流程機(jī)制

    Spring Boot超詳細(xì)講解請(qǐng)求處理流程機(jī)制

    SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時(shí)也是簡(jiǎn)化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起分析請(qǐng)求處理流程機(jī)制
    2022-07-07
  • Jar打包用法詳解

    Jar打包用法詳解

    這篇文章主要介紹了Jar打包用法,詳解分析了jar打包命令的各種常見用法及參數(shù)含義,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 沒有外網(wǎng)IDEA離線使用maven倉(cāng)庫(kù)的方法

    沒有外網(wǎng)IDEA離線使用maven倉(cāng)庫(kù)的方法

    這篇文章主要介紹了沒有外網(wǎng),IDEA如何離線使用maven倉(cāng)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 關(guān)閉支付寶小額免密支付步驟詳解

    關(guān)閉支付寶小額免密支付步驟詳解

    支付寶現(xiàn)在作為我們?nèi)粘I钪凶畛S玫膽?yīng)用之一,已經(jīng)成為了人們的虛擬錢包。但是最近,有人發(fā)現(xiàn)了支付寶的一個(gè)漏洞,本文將對(duì)如何關(guān)閉小額免密支付進(jìn)行步驟介紹。下面跟著小編一起來(lái)看下吧
    2017-01-01
  • Mybatis-plus使用TableNameHandler分表詳解(附完整示例源碼)

    Mybatis-plus使用TableNameHandler分表詳解(附完整示例源碼)

    這篇文章主要介紹了Mybatis-plus使用TableNameHandler分表詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • springboot 設(shè)置CorsFilter跨域不生效的解決

    springboot 設(shè)置CorsFilter跨域不生效的解決

    這篇文章主要介紹了springboot 設(shè)置CorsFilter跨域不生效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 遠(yuǎn)程調(diào)用@FeignClient注解屬性使用詳解

    遠(yuǎn)程調(diào)用@FeignClient注解屬性使用詳解

    這篇文章主要為大家介紹了遠(yuǎn)程調(diào)用@FeignClient注解屬性使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Java中json使用方法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中json使用方法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式, json是個(gè)非常重要的數(shù)據(jù)結(jié)構(gòu),在web開發(fā)中應(yīng)用十分廣泛。下面通過本文給大家講解Java中json使用方法,感興趣的朋友一起看看吧
    2017-07-07
  • Java大數(shù)運(yùn)算BigInteger與進(jìn)制轉(zhuǎn)換詳解

    Java大數(shù)運(yùn)算BigInteger與進(jìn)制轉(zhuǎn)換詳解

    這篇文章主要介紹了Java大數(shù)運(yùn)算BigInteger與進(jìn)制轉(zhuǎn)換詳解,Java 提供了 BigInteger(大整數(shù))類和 BigDecimal(大浮點(diǎn)數(shù))類用于大數(shù)運(yùn)算,這兩個(gè)類都繼承自 Number 類(抽象類),由于 BigInteger 在大數(shù)運(yùn)算中更常見,需要的朋友可以參考下
    2023-09-09
  • Mybatis CachingExecutor二級(jí)緩存使用示例詳解

    Mybatis CachingExecutor二級(jí)緩存使用示例詳解

    這篇文章主要介紹了?Mybatis的CachingExecutor與二級(jí)緩存使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論