本文共 1583 字,大约阅读时间需要 5 分钟。
参考:
- config配置层:对外配置接口,以ServiceConfig,ReferenceConfig为中心,可以直接初始化配置类,也可以通过spring解析配置生成配置类
- proxy服务代理层:服务接口透明代理,生成服务的客户端Stub和服务器端的Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory
- registry注册中心层:封装服务地址的注册于发现,以服务URL为中心,扩展接口为RegistryFactory、Registry、RegistryService
- cluster路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router,LoadBalance
- monitor监控层:RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor、MonitorService
- protocol远程调用层:封装RPC调用,以Invacation,Result为中心,扩展接口为Protocol,Invoker,Exporter
- exchange信息交换层:封装请求响应模式,同步转异步,以Request、Response为中心,扩展接口为Exchanger,ExchangeChannel,ExchangeClient,ExchangeServer
- transort网络传输层:抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel,Transporter,Client,Server,Codec
- serialize数据序列化层:可复用的一些工具,扩展接口为Serialization,ObjectInput,ObjectOutput,ThreadPool
关系说明:
- 在RPC中,Protocol是核心层,也就是只要有Protocol+Invoker+Exporter就可以完成非透明的RPC调用,然后在Invoker的主过程上Filter拦截点。
- Cluster是外围概念,所以Cluster的目的是将多个Invoker伪装成一个Invoker,这样其他人只要关注Protocol层的Invoker即可,加上Cluster或去掉Cluster对其它层都不会造成影响,因为只有一个提供者时,是不需要Cluster的。
- Proxy层封装了所有接口的透明化代理,而在其它才能够都以Invoker为中心,只有到了暴露给用户使用时,采用Proxy将Invoker转成接口,或将接口实现转成Invoker,也就是去掉Proxy层RPC是可以Run的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。
- Remoting的实现是Dubbo协议的实现,如果选择RMI协议,整个Remoting都不会用上,Remoting内部再划分为Transport传输层和Exchange信息交换层,Transport层只负责单向消息传输,是对Mina、Netty、Grizzly的抽象,它也可以扩展UDP传输,而Exchange层是在传输层之上封装了Request-Response语义。
- Registry和Monitor实际上不算一层,而是独立的节点。
领域模型:
在Dubbo的核心领域模型中:
- Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理
- Invoker是实体域,是Dubbo的核心模型,其它模型都向它凯龙,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能是一个集群的实现。
- Invocation是会话域,它持有调用过程中的变量,比如方法名,参数等。
转载地址:http://pgyai.baihongyu.com/