官方文檔: Dubbo 框架設計、模塊說明、依賴關系

?

以下內容全文轉自 apache 官方 dubbo文檔:http://dubbo.apache.org/en-us/docs/dev/design.html

?

框架設計

/dev-guide/images/dubbo-framework.jpg

?

圖片描述:

  • 淺藍色背景的左側區域顯示服務用戶界面,淺綠色背景的右側區域顯示服務提供者界面,中心區域顯示兩個側面界面。
  • 圖像從底部到頂部分為10層,這些層是單向依賴的。右側的黑色箭頭表示層之間的依賴關系,每層可以從上層剝離以重復使用,Service和Config層是API,其他層是SPI。
  • 綠框是擴展接口,藍框是實現類,圖像僅顯示關聯層的實現類。
  • 藍色虛線是初始化過程,啟動時為裝配鏈,方法調用過程為紅線,運行時調用鏈,繼承紫色三角箭頭,可將子類視為父類的同一節點,文本為lines是方法調用。

圖層描述

  • config層:外部配置界面,ServiceConfig并且ReferenceConfig是圖層的中心,可以直接初始化配置類,也可以通過spring生成配置類。
  • 代理層:服務接口的透明代理,生成客戶端Stub服務和服務器Skeletion of service,ServiceProxy是中心,擴展接口是ProxyFactory
  • 注冊表層:服務注冊表和發現的封裝,服務URL是中心,擴展接口是RegistryFactoryRegistryRegistryService
  • 簇層:muliple提供商和負載平衡,和橋接登記中心的簇的封裝,Invoker是中心,擴展接口是ClusterDirectoryRouterLoadBalance
  • 監控層:的RPC調用倍顯示器和呼叫執行時間,Statistics是中心,擴展接口是MonitorFactoryMonitorMonitorService
  • 協議層:RPC的封裝,Invocation并且Result是中心,擴展接口是ProtocolInvokerExporter
  • 交換層:的請求和響應,同步傳輸異步封裝,Request并且Response是中心,擴展接口是ExchangerExchangeChannelExchangeClientExchangeServer
  • 傳輸層:米娜和網狀的抽象,Message是中心,擴展接口是ChannelTransporterClientServerCodec
  • 序列化層:可重復使用的工具,擴展接口SerializationObjectInputObjectOutputThreadPool

關系描述

  • 在RPC中,Protocol是核心層,它意味著您可以通過Protocol + Invoker + Exporter完成RPC調用,然后在Invoker的主進程中進行過濾。
  • Consumer和Provider是抽象概念,只是希望您能更直觀地了解哪些類屬于客戶端和服務器端,不使用Client和Server的原因是Dubbo使用Provider,Consumer,Registry,Monitor劃分邏輯拓撲節點。場景,保持團結的概念。
  • Cluster是外部概念,Cluster的目的是讓各種Invoker偽裝成一個Invoker,這樣我們只關注Invoker in Protocol層,添加Cluster或刪除Cluster不會影響其他層,因為我們不需要Cluster什么時候只有一個提供者。
  • Proxy層封裝了所有接口的透明代理,在Invoker作為中心的其他層中,將Invoker轉換為接口,或者僅在暴露給用戶時將接口實現轉換為Invoker by Proxy。RPC仍然可以工作,甚至刪除代理層,但不是那么透明,使得遠程服務調用看起來不像本地服務調用。
  • 遠程處理是Dubbo協議的實現,如果選擇RMI,您可以刪除遠程處理。Remoting分為Transport層和Exchange層,Transport層負責單向消息傳輸,它是Mina,Netty,Grizzly的抽象,它還可以擴展UDP傳輸。Exchange層在傳輸層上封裝了Request-Response語義。
  • 實際上Registry和Monitor不在同一層,它們是獨立的節點,只是為了全局視圖而一層一層地繪制它們。

模塊包裝

/dev-guide/images/dubbo-modules.jpg

模塊說明:

  • dubbo-common模塊:包括Util類和通用模塊。
  • dubbo-remoting模塊:是Dubbo協議實現,如果使用RMI for RPC則無需使用此模塊。
  • dubbo-rpc模塊:各種協議的抽象,和動態代理,只有一對一的調用,不關心集群的管理。
  • dubbo-cluster模塊:將許多服務提供者偽裝成一個提供者,包括負載平衡,容錯,路由等。群集的地址列表可以是靜態的,也可以是注冊表發送的。
  • dubbo-registry模塊:基于注冊表發送地址的集群和各種注冊中心的抽象。
  • dubbo-monitor模塊:服務呼叫時間統計,呼叫時間,呼叫鏈跟蹤服務。
  • dubbo-config模塊:是Dubbo外部API,用戶使用Dubbo by Config,隱藏Dubbo的詳細信息。
  • dubbo-container模塊:是一個Standlone容器,只需使用Main方法加載Spring,因為通常服務不需要Tomcat / JBoss功能。

包層根據層結構劃分,與層劃分的區別:

  • 容器是服務容器,用于服務運行部署,未在映像中顯示。
  • 協議層和代理層都放在RPC模塊中,它們是RPC模塊的核心,當只有1個提供者時,可以使用這2層完整的RPC調用。
  • 傳輸層和交換層放置在遠程模塊中,用于RPC呼叫基礎通信。
  • 序列化層放在通用模塊中,以便重用。

依賴關系

/dev-guide/images/dubbo-relation.jpg

圖片描述:

  • 圖像,協議,群集,代理,服務,容器,注冊表,監視器中的框表示層或模塊,藍調表示與業務交互,綠色表示僅與Dubbo的內部交互。
  • 圖像,消費者,提供者,注冊表,監視器中的背景框表示部署邏輯拓撲節點。
  • 調用圖像中的藍色虛線進行初始化,為運行時異步調用紅色虛線,并為運行時同步調用紅線。
  • 圖像僅包含RPC層,不包括Remoting層,整個Remoting隱藏在Protocol層中。

調用鏈

展開整個設計地圖的紅色調用鏈:

/dev-guide/images/dubbo-extension.jpg

公開服務順序

展開服務提供者公開服務的初始化鏈,在整個設計圖的左側,序列圖如下所示:

/dev-guide/images/dubbo-export.jpg

參考服務序列

展開服務使用者參考服務的初始化鏈,在整個設計圖的右側,序列圖如下所示:

/dev-guide/images/dubbo-refer.jpg

領域模型

達博的核心領域模型:

  • 協議是服務域,它是Invoker暴露和參考的主要功能入口,它負責Invoker的生命周期管理。
  • Invoker是實體域,它是Dubbo的核心模型,所有其他模型都受到干擾,或轉換為它,它代表一個可執行文件,你可以通過調用invoke來調用它,它可以是一個本地實現,一個遠程實現,或者集群實現。
  • 調用是會話域,它在調用進程中保存變量,例如方法名稱,參數等。

基本設計原則

  • 使用Microkernel + Plugin設計模式,Microkernel只負責組裝插件,Dubbo的功能是通過擴展點實現的,這意味著Dubbo的所有功能都可以被用戶自定義擴展替換。
  • 使用URL作為配置信息的startdard格式,所有擴展點都通過URL傳輸配置信息。

?

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

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

相關文章

那些花兒

今天上海下雨了,心緒也變得低落,突然很想念宿舍的姐妹。畢業后就自作聰明地和她們失去了聯系,今天去QQ群遛了一圈。虹結婚了,敏還是活得那么瀟灑,笑也在努力地生活... 人生啊!總是在向前走,遇…

CreateRemoteThread函數

CreateRemoteThread函數 創建在另一個進程的虛擬地址空間中運行的線程。 使用CreateRemoteThreadEx函數創建在另一個進程的虛擬地址空間中運行的線程,并可選擇指定擴展屬性。 語法 HANDLE CreateRemoteThread(HANDLE hProcess,LPSECURITY_ATTRI…

防火墻問題 Linux系統 /etc/sysconfig/路徑下無iptables文件

虛擬機新裝了一個CentOs7,然后做防火墻配置的時候找不到iptables文件,解決方法如下: 因為默認使用的是firewall作為防火墻,把他停掉裝個iptable systemctl stop firewalld systemctl mask firewalld yum install -y iptables yum …

如果風 知道 ... 如果云 知道 ...

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 //《心靈之音》----- Bandari 來自酷狗。 一直很喜歡聽歌: 喜歡默默的聽、一個人安安靜靜的聽、長長久久的聽、聽得忘乎所…

切記!這樣洗頭最傷身

各種的忙碌已經成為了現代人生活中的一個標志,每天的加班,玩樂到深夜,游戲等,都讓不少的人的洗澡時間都只能在臨睡前,而女人洗頭也只能在晚上臨睡之前洗。如果可以有足夠的時間,等待頭發完全干透了之后&…

可以供MFC調用的,QT實現的DLL(qtwinmigrate實現)

MFC和QT的消息循環機制不同&#xff0c;所以&#xff0c;要讓QT寫的DLL可以供MFC調用&#xff0c;要做一點特殊的處理 #include <qmfcapp.h> #include <qwinwidget.h> #include <QtGui>#include <QtGui/QMessageBox> #include <windows.h> #incl…

離合器的操作技巧

學車其實不難&#xff0c;學車最基本的幾個操作&#xff0c;打方向盤、踩離合、踩剎車、換檔位都是學員需要必學的基本操作&#xff0c;在網絡駕校上有學員反應&#xff0c;對離合器的操作比較難&#xff0c;經常錯誤操作造成熄火等現象&#xff0c;現在瀘州駕校論壇小編整理了…

Linux 上 安裝 nginx、 阿里云服務器上安裝 nginx

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Docker 方式安裝見另一文&#xff1a;Docker 方式安裝 Nginx 、阿里云服務器上裝 Ngnix 1. gcc 安裝 安裝 nginx 需要先將官網下載的源…

CSDN-markdown編輯器使用說明

歡迎使用Markdown編輯器 你好&#xff01; 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章&#xff0c;了解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯器進行了一些功能拓展與語法支持&#x…

本地Android源代碼庫下載源碼

1. 安裝repo 新建放置repo的bin目錄 $ mkdir ~/bin $ echo "export PATH~/bin:\$PATH" >> ~/.bashrc$ source ~/.bashrc 獲取repo并賦予可執行權限&#xff08;或者參考google官方網站&#xff09; $ curl https://storage.googleapis.com/git-repo-downloads/…

解決: Spring Boot報錯 This application has no explicit mapping ... a fallback

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 啟動spring boot然后訪問頁面的時候&#xff0c;出現如下錯誤&#xff1a; Whitelabel Error PageThis application has no explicit m…

三種錢非常奧妙 花越多就賺越多

世界上有三種錢非常奧妙&#xff0c;你花得越多就賺得越多。這是學校老師不會教的事&#xff0c;讓我們看看&#xff1a; 第一種錢&#xff1a;投資自己&#xff0c;自我成長&#xff0c;學習的錢一定要花&#xff01; 如果我們把世界首富比爾.蓋茨從美國抓到非洲&#xff0c…

#pragma once 與 #ifndef比較分析

為了避免同一個文件被include多次&#xff0c;C/C中有兩種方式&#xff0c;一種是#ifndef方式&#xff0c;一種是#pragma once方式。在能夠支持這兩種方式的編譯器上&#xff0c;二者并沒有太大的區別&#xff0c;但是兩者仍然還是有一些細微的區別。 方式一&#xff1a; #ifn…

中醫:看腳十秒鐘可知身體疾病

中醫認為&#xff0c;自測疾病有很多方法&#xff0c;如通過身體部位可自測疾病&#xff0c;還可通過疼痛自測疾病等等。在這里&#xff0c;我們主要講如何通過腳自測疾病。也許&#xff0c;許多人不太在意自己的腳部&#xff0c;是最不受“照顧”的一個身體部位。然而&#xf…

Springcloud 引導上下文

SpringCloud為我們提供了bootstrap.properties的屬性文件&#xff0c;我們可以在該屬性文件里做我們的服務配置。可是&#xff0c;我們知道SpringBoot已經為我們提供了做服務配置的屬性文件application.properties&#xff0c;那么這兩個配置文件有什么區別呢&#xff1f;在Spr…

Springboot 項目中過濾器的使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 編寫過濾器類&#xff1a; package gentle;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.se…

C++ 中 new 操作符內幕:new operator、operator new、placement new

一、new 操作符&#xff08;new operator&#xff09; 人們有時好像喜歡有意使C語言的術語難以理解。比方說new操作符&#xff08;new operator&#xff09;和operator new的差別。 當你寫這種代碼&#xff1a; string *ps new string("Memory Management");你使…

Flask-1-05-CookieSession

接下來我會演示一下設置Cookie 讀取Cookie 刪除Cookie&#xff0c;以及添加Cookie的原理 接下來我們分別定義3個視圖為 set_cookie、get_cookie、del_cookie # coding:utf-8from flask import Flask, make_response, requestapp Flask(__name__)app.route("/set_cookie&q…

18個不可不知的有用潛規則

人情世故是我們日常生活中積累的約定俗成的行為規則&#xff0c;屬于社會知識的范疇。這些知識大半來源于與不同人群的社會交際&#xff0c;也來源于社會沖突與社會發展。在有專業知識與技能的情況下&#xff0c;人情世故能夠幫助我們個人緩和與其他人之間的緊張度&#xff0c;…

解決跨域問題:No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 PS&#xff1a;如果遇到 這個問題 Request header field Content-Type is not allowed by Access-Control-Allow-Headers&#xff0c;解…