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