Dubbo 为分布式系统框架 底层RPC原理
Dubbo分层
Service层: Provider(服务提供者) 和 Consumer(消费者) ,由自己开发的接口
config层: 配置文件
proxy层: 代理,通过代理 负责provider,consumer之间互相通信,(无论consumer还是provider都需要代理)
registry层: 注册, provider注册自己作为一个服务,consumer去注册中心找要调的服务
cluster层: 一个provider可以部署在多台机器上,多个provider组成一个集群_cluster
monitor层: 监控层,监控provider被调用等信息
protocol层: 负责具体provider和consumer的通信
exchange层: 信息交换
serilaze层: 序列化
1.provider向注册中心注册
2.consumer从注册中心订阅服务
3.通过proxy,consumer调用provider的服务
4.consumer和provider通知监控monitor
注册中心挂了还可以继续通信,consumer本地有缓存 可以知道去哪找provider
Dubbo支持的通信协议
dubbo协议: 特点 长连接 + NIO异步通信 + hession序列化协议
长连接:建立一个永久连接,能持续发送请求
短连接:没发一次请求建立一次连接 请求结束断开
Dubbo负载均衡策略
对于同一个provider在多个机器上的请求分发
1.random loadbalance 随即分发,根据不同的机器性能调整权重
集群容错策略
1.failover cluster模式 :失败自动切换,自动重试其他机器 常用于读操作
2.failfast cluster模式 : 一旦调用失败就立即失败 常用于写操作
3.failsafe cluster模式 : 出现异常时忽略掉 常用于日志服务等不重要调用
4.forking cluster模式 : 只要一个成功就立即返回
5.fallback cluster模式 : 失败了自动记录 然后定时重发 常用于消息队列这种
动态代理
默认使用javassist动态字节码生成,创建代理类
(可以通过SPI扩展机制培植自己的动态代理策略)