分享 Dubbo 的項目結構 ,經過本文能夠大體瞭解到Dubbo整個項目的結構html
將一個項目進行拆分, 進行分佈式架構。前端
須要解決下面的問題java
分佈式服務架構git
dubbo解決下面幾個需求github
節點角色說明算法
節點 | 角色說明 |
---|---|
Provider |
暴露服務的服務提供方 |
Consumer |
調用遠程服務的服務消費方 |
Registry |
服務註冊與發現的註冊中心 |
Monitor |
統計服務的調用次數和調用時間的監控中心 |
Container |
服務運行容器 |
調用關係說明spring
Dubbo 架構 下面特色 連通性、健壯性、伸縮性、以及向將來架構的升級性數據庫
節點角色說明apache
節點 | 角色說明 |
---|---|
Deployer |
自動部署服務的本地代理 |
Repository |
倉庫用於存儲服務應用發佈包 |
Scheduler |
調度中心基於訪問壓力自動增減服務提供者 |
Admin |
統一管理控制檯 |
Registry |
服務註冊與發現的註冊中心 |
Monitor |
統計服務的調用次數和調用時間的監控中心 |
模塊分包 每一個模塊都是相互隔離的,可插拔的。下面的這個圖是模塊引用圖api
下面對着這些模塊作個簡單介紹
dubbo-cluster
** 集羣模塊**:將多個服務提供方假裝爲一個提供方,
包括:負載均衡, 容錯,路由等,集羣的地址列表能夠是靜態配置的,也能夠是由註冊中心下發。
總體上按照分層結構進行分包,與分層的不一樣點在於:
圖例說明:
公共邏輯模塊:包括 Util 類和通用模型。
做用提供一些工具類和通用模型 例如
com.alibaba.dubbo.common.URL
:
遠程通信模塊:至關於 Dubbo 協議的實現,若是 RPC 用 RMI協議則不須要使用此包。
dubbo-remoting-api
遠程調用模塊:抽象各類協議,以及動態代理,只包含一對一的調用,不關心集羣的管理
集羣相關的管理,由 dubbo-cluster
提供特性
dubbo-rpc-api
dubbo-rpc-api
,提供對應的協議實現
dubbo-rpc-default
dubbo://
協議。集羣模塊:將多個服務提供方假裝爲一個提供方,包括:負載均衡, 集羣容錯,路由,分組聚合等。集羣的地址列表能夠是靜態配置的,也能夠是由註冊中心下發。
dubbo-registry
提供特性。com.alibaba.dubbo.rpc.cluster.Cluster
接口 + com.alibaba.dubbo.rpc.cluster.support
包。com.alibaba.dubbo.rpc.cluster.Directory
接口 + com.alibaba.dubbo.rpc.cluster.directory
包。com.alibaba.dubbo.rpc.cluster.Router
接口 + com.alibaba.dubbo.rpc.cluster.router
包。Invoker
中按路由規則選出子集,好比讀寫分離,應用隔離等。com.alibaba.dubbo.rpc.cluster.Configurator
接口 + com.alibaba.dubbo.rpc.cluster.configurator
包。com.alibaba.dubbo.rpc.cluster.LoadBalance
接口 + com.alibaba.dubbo.rpc.cluster.loadbalance
包。com.alibaba.dubbo.rpc.cluster.Merger
接口 + com.alibaba.dubbo.rpc.cluster.merger
包。總體流程以下:
註冊中心模塊:基於註冊中心下發地址的集羣方式,以及對各類註冊中心的抽象。
dubbo-registry-api
,抽象註冊中心的註冊與發現接口。dubbo-registry-api
,提供對應的註冊中心實現。在 《用戶指南 —— 註冊中心參考手冊》 中,能夠看到每種註冊中心的介紹。dubbo-registry-default
對應 Simple 註冊中心。監控模塊:統計服務調用次數,調用時間的,調用鏈跟蹤的服務
配置模塊:是 Dubbo 對外的 API,用戶經過 Config 使用Dubbo,隱藏 Dubbo 全部細節。
推薦閱讀 《Dubbo 開發指南 —— 配置設計》 。
容器模塊:是一個 Standlone 的容器,以簡單的 Main 加載 Spring 啓動,
由於服務一般不須要 Tomcat/JBoss 等 Web 容器的特性,不必用 Web 容器去加載服務。
dubbo-container-api
:定義了 com.alibaba.dubbo.container.Container
接口,並提供 加載全部容器啓動的 Main 類。
實現
dubbo-container-api
dubbo-container-spring
,提供了 com.alibaba.dubbo.container.spring.SpringContainer
。dubbo-container-log4j
,提供了 com.alibaba.dubbo.container.log4j.Log4jContainer
。dubbo-container-logback
,提供了 com.alibaba.dubbo.container.logback.LogbackContainer
。拓展參考 《Dubbo 用戶指南 —— 服務容器》 和 《Dubbo 開發指南 —— 容器擴展》 文檔。
過濾器模塊:提供了內置的過濾器。
dubbo-filter-cache
,緩存過濾器。
dubbo-filter-validation
,參數驗證過濾器。
過濾器模塊:提供了內置的插件。
dubbo-qos
,提供在線運維命令。
hessian-lite
:Dubbo 對 Hessian 2 的 序列化 部分的精簡、改進、BugFix 。
提交歷史以下:
dubbo-demo
快速啓動示例。
參見 《Dubbo 用戶指南 —— 快速啓動》 文檔。
dubbo-test
測試模塊。
dubbo-test-benchmark
,性能測試。
dubbo-test-compatibility
,兼容性測試。
dubbo-test-spring3
,測試對 Spring 3 的兼容性。dubbo-test-example
,使用示例。
dubbo-dependencies-bom/pom.xml
,Maven BOM(Bill Of Materials) ,統一定義了 Dubbo 依賴的三方庫的版本號:
dubbo-parent
會引入該 BOM :
dubbo-bom/pom.xml
,Maven BOM(Bill Of Materials) ,統一定義了 Dubbo 的版本號:
dubbo/pom.xml
,Dubbo Parent Pom 。Dubbo 的 Maven 模塊,都會引入該 pom 文件。以
dubbo-cluster
舉例子:
dubbo/all/pom.xml
,Dubbo All Pom ,定義了 Dubbo 的打包腳本。
咱們在使用 Dubbo 庫時,引入該 pom 文件。
引用參考自 下列文章
http://svip.iocoder.cn/Dubbo/intro/
https://dubbo.incubator.apache.org/zh-cn/docs/user/preface/background.html
https://dubbo.incubator.apache.org/zh-cn/docs/user/preface/architecture.html
https://dubbo.incubator.apache.org/zh-cn/docs/dev/build.html