核心功能
- Remoting: 网络通信框架,提供对多种NIO框架抽象封装,包括"同步转异步"、"请求-响应"模式的信息交换方式
- Cluster: 服务框架,提供基于接口方法的透明远程过程调用,包括多协议支持,以及负载均衡、地址路由、动态配置等集群支持
- Registry:服务注册,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或者减少机器
服务发现流程
dubbo的注册中心集群挂掉,发布者和订阅者之间还能通信吗?
可以通信,启动dubbo时,消费者会从zookeeper拉取注册的生产者的地址接口等数据,缓存到本地。每次调用时,按照本地存储的地址进行调用。
通信框架
默认使用NIO Netty框架
dubbo有哪些负载均衡策略
-** Random LoadBalance**: 随机选取提供者策略,有利于动态调整提供者权重。截面碰撞率高、调用次数越多,分布越均匀;
- RoundRobin LoadBalance:轮询选取,平均分布,但是存在请求积累问题
- LeastActive LoadBalance:最少活跃调用策略,解决慢提供者接收更少的请求;
- ConstantHash LoadBalance:一致性Hash策略,使相同参数请求总是发到同一提供者,一台机器宕机,可以基于虚拟节点,分摊到其他提供者,避免引起提供者的剧烈变动。
- 缺省时为Random随机调用。
dubbo容错方案(集群)
- Failover Cluster: 失败自动切换,当出现失败,重试其他服务器,通产用于读取操作,但重试会带来更长的延迟。
- Failfast Cluster: 快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
- Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
- Failback Cluster: 失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作。
- Forking Cluster: 并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源,可以通过forks = “2” 来设置最大并行数。
- broadcast Cluster: 广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所提供者更新缓存或者日志等本地资源信息。
dubbo默认容错方案(集群)
Failover Cluster
dubbo服务调用超时
默认会重试两次
dubbo层级框架设计
- ** 服务接口层(Service)**:该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
- 配置层(Config): 对外配置接口,以ServiceConfig和ReferenceConfig为中心。
- 服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务端Skeleton
- 服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心。
- 集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心
- 监控层(Monitor): RPC调用次数和调用时间监控
- 远程调用层(Protocol):封装RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter.
- 信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心。
- 网路传输层(Transprot):抽象mina和netty为统一接口,以Message为中心。