前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dubbo 架构设计图

dubbo 架构设计图

作者头像
林万程
发布2020-02-25 16:14:22
5040
发布2020-02-25 16:14:22
举报

图内说明来源:dubbo 官网 http://dubbo.apache.org/zh-cn/docs/dev/design.html

dubbo Framework Design.jpg

Graphviz dot 源码 dubbo Framework Design.dot

代码语言:javascript
复制
digraph G{
// 设置字体防止乱码
fontname = "Microsoft YaHei"
// 默认方形
node [shape = "record", fontname = "Microsoft YaHei"]
// 默认空箭头
edge [fontname = "Microsoft YaHei"]

legend [label="{ (图例) 名称
| 说明
| 中心
| 拓展接口}"]

label="dubbo"

proxy -> cluster -> protocol -> exchange

subgraph cluster_remoting {
    label="remoting"
    exchange -> transport -> serialize
}

{
    rank = same
    config proxy
}

{
    rank = same
    registry cluster
}

{
    rank = same
    monitor protocol
}

config [label="{config 配置层
| 对外配置接口
| ServiceConfig, ReferenceConfig
| }"]

proxy [label="{proxy 服务代理层
| 服务接口透明代理,接口 Invoker 转换
| ServiceProxy
| ProxyFactory}"]

registry [label="{registry 注册中心层
| 封装服务地址的注册与发现
| URL
| RegistryFactory, Registry, RegistryService}"]

cluster [label="{cluster 路由层
| 封装多个提供者的路由及负载均衡,并桥接注册中心
| Invoker
| Cluster, Directory, Router, LoadBalance}"]

monitor [label="{monitor 监控层
| RPC 调用次数和调用时间监控
| Statistics
| MonitorFactory, Monitor, MonitorService}"]

protocol [label="{protocol 远程调用层
| 封装 RPC 调用
| Invocation, Result
| Protocol, Invoker, Exporter}" fillcolor="#FFD9CA" style=filled]

exchange [label="{exchange 信息交换层
| 封装请求响应模式,同步转异步
| Request, Response
| Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer}"]

transport [label="{transport 网络传输层
| 抽象 mina 和 netty 为统一接口
| Message
| Channel, Transporter, Client, Server, Codec}"]

serialize [label="{serialize 数据序列化层
| 可复用的一些工具
|
| Serialization, ObjectInput, ObjectOutput, ThreadPool}"]

}

生成图片脚本 dubbo Framework Design.bat

代码语言:javascript
复制
echo off
SET dot=dot
if exist "C:\Program Files (x86)\Graphviz2.38\bin\dot.exe" (
    SET dot="C:\Program Files (x86)\Graphviz2.38\bin\dot.exe"
) else if exist "D:\Program Files (x86)\Graphviz2.38\bin\dot.exe" (
    SET dot="D:\Program Files (x86)\Graphviz2.38\bin\dot.exe"
)
if exist "%~n0.dot" (
    SET file=%~n0.dot
) else if exist "%~n0.gv" (
    SET file=%~n0.gv
)
%dot% "%file%" -Tsvg -o "%~n0.svg" || (
    echo need install Graphviz
    echo https://graphviz.gitlab.io/_pages/Download/Download_windows.html
    pause
    exit
)
%dot% "%file%" -Tjpg -o "%~n0.jpg"

PS:之前面试阿里没过,向面试官请教时他告诉我可以自己写个“简易dubbo”。 最近写了下,思路其实很简单,首先远程调用,所以要在服务端调起方法,调方法时反射需要接口名、方法名、参数类型、参数、那么把这些传过去就可以了,写完后果然有了更好的理解。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档