dubbo十层结构
- service 接口层,提供者和消费者实现代码
- config 配置层,对服务做相应的配置
- proxy 服务代理代理层,透明生成客户端的sub和服务端的skeleton
- registry 服务注册层,服务的注册与发现
- cluster 集群层,封装多个服务提供者的路由集负载均衡,将多个实例合成一个服务
- monitor 监控层, 对服务的调用次数以及调用时间等进行监控
- protocol 远程调用层,封装rpc调用
- exchange 信息交换层,封装请求响应模式,同步转异步
- transport 网络传输层,抽象mina与netty为统一接口
- serialize 数据序列化层
工作流程
- 1)第一步,provider向注册中心去注册
- 2)第二步,consumer从注册中心订阅服务,注册中心会通知consumer注册好的服务
- 3)第三步,consumer调用provider
- 4)第四步,consumer和provider都异步的通知监控中心
通信协议
- 默认为dubbo,单一长连接,NIO异步通信,基于hessian作为序列化协议。适用传输数据量很小(每次请求在100kb以内),但是并发量很高场景
- rmi协议,走java二进制序列化,多个短连接,适合消费者和提供者数量差不多,适用于文件的传输,一般较少用
- hessian协议,走hessian序列化协议,多个短连接,适用于提供者数量比消费者数量还多,适用于文件的传输,一般较少用
- http协议,json序列化
- webservice,soap文本序列化
dubbo动态代理策略
默认使用javassist动态字节码生成,创建代理类。但是可以通过spi扩展机制配置自己的动态代理策略