dubbo整体架构原理
2024-06-28 15:07:52 2 举报
AI智能生成
dubbo
作者其他创作
大纲/内容
模块部署
注册退出时销毁资源
启动配置中心
启动元数据中心
准备元数据
服务实例
接口和实现
元数据含义
指的是服务分组、服务版本、服务名、方法列表、方法参数列表、超时时间
dubbo服务实例刷新配置信息【refresh】
优先级
SystemConfiguration
EnvironmentConfiguration
AppExternalConfiguration
ExternalConfiguration
AppConfiguration
AbstractConfig【程序中,或者是在yml或者xml等配置文件中配置】
PropertiesConfiguration
dubbo服务实例暴露【export】
元数据上报
使用门面模式获取组件
生成注册的URLS(针对ZK地址)
生成服务实例URL
(dubbo://192.168.0.5:20880/org.apache.dubbo.demo.DemoService)
(dubbo://192.168.0.5:20880/org.apache.dubbo.demo.DemoService)
协议主要的实现
本地服务发布
生成接口的动态代理
【JavassistProxyFactory】
【JavassistProxyFactory】
InjvmProtocol
injvm://127.0.0.1/org.apache.dubbo.demo.DemoService
injvm://127.0.0.1/org.apache.dubbo.demo.DemoService
远程发布
RegistryProtocol
dubbo://192.168.0.5:20880/org.apache.dubbo.demo.DemoService
dubbo://192.168.0.5:20880/org.apache.dubbo.demo.DemoService
DubboProtocol
启动netty服务器
ServiceDiscoveryRegistry
ServiceInfo
本地注册
dubbo协议注册URL
本地注册
dubbo协议注册URL
ZookeeperServiceDiscovery
ZookeeperRegistry
注册到zk
注册到zk
流程图
概要流程图
1.首先服务提供者会启动服务,然后将服务注册到服务注册中心。
2.服务消费者会定时拉取服务提供者列表。
3.当服务消费者需要调用服务提供者接口的时候,因为他不能直接远程调用提供者的接口,所以需要生成一个动态代理对象,然后通过这个代理对象去调用远程接口。
4.生成代理对象之后,会走到Cluster层,这里会获取服务提供者列表的数据,感知到目前所能调用的服务提供者有哪些。
5.然后Cluster会根据指定的算法,做负载均衡,选出要调用的服务提供者。
6.选择好服务提供者之后,再选择指定的协议格式。
7.Exchange会根据指定的协议格式,进行请求数据封装,封装成request请求。
8.请求封装好之后,就会通过网络通信框架将请求发送出去。
9.服务提供者那边同样会有网络通信框架,他会监听指定的端口号,当接收到请求之后,会将请求进行反序列化。
10.反序列化之后,再根据Exchange根据指定协议格式将请求解析出来。
11.然后再通过动态代理对象调用服务提供者的对应接口。
2.服务消费者会定时拉取服务提供者列表。
3.当服务消费者需要调用服务提供者接口的时候,因为他不能直接远程调用提供者的接口,所以需要生成一个动态代理对象,然后通过这个代理对象去调用远程接口。
4.生成代理对象之后,会走到Cluster层,这里会获取服务提供者列表的数据,感知到目前所能调用的服务提供者有哪些。
5.然后Cluster会根据指定的算法,做负载均衡,选出要调用的服务提供者。
6.选择好服务提供者之后,再选择指定的协议格式。
7.Exchange会根据指定的协议格式,进行请求数据封装,封装成request请求。
8.请求封装好之后,就会通过网络通信框架将请求发送出去。
9.服务提供者那边同样会有网络通信框架,他会监听指定的端口号,当接收到请求之后,会将请求进行反序列化。
10.反序列化之后,再根据Exchange根据指定协议格式将请求解析出来。
11.然后再通过动态代理对象调用服务提供者的对应接口。
整体的流程图
分层结构图
层次分明,职责边界清晰才能更好的扩展
层次分明,职责边界清晰才能更好的扩展
分层
Business(业务层)
业务层,就是咱们开发的业务逻辑层。
RPC 层
Config
配置层,主要围绕 ServiceConfig 和 ReferenceConfig,初始化配置信息。
Proxy
代理层,服务提供者还是消费者都会生成一个代理类,使得服务接口透明化,代理层做远程调用和返回结果。
Register
注册层,封装了服务注册和发现
Cluster
路由和集群容错层,负责选取具体调用的节点,处理特殊的调用要求和负责远程调用失败的容错措施
Monitor
监控层,负责监控统计调用时间和次数。
Portocol
远程调用层,主要是封装 RPC 调用,主要负责管理 Invoker,Invoker代表一个抽象封装了的执行体
Remoting
Exchange
信息交换层,用来封装请求响应模型,同步转异步
Transport
网络传输层,抽象了网络传输的统一接口,这样用户想用 Netty 就用 Netty,想用 Mina 就用 Mina
Serialize
序列化层,将数据序列化成二进制流,当然也做反序列化
0 条评论
下一页