为了避免单点故障,现在的应用通常至少会部署在两台服务器上。对于一些负载比较高的服务,会部署更多的服务器。而Dubbo作为RPC(远程服务调用)的一种实现,在面对集群部署时,RPC的实现需要面临这样的问题:
- 1、服务消费者是否需要决定、如何决定选择哪个服务提供者进行调用?
-
2、服务调用失败时的处理措施是重试呢还是抛出异常、亦或是只打印异常等。
作为一款优秀的RPC实现这些个问题都是需要考虑的。下面是Dubbo给出的解决方案
选择调用的服务提供者
- Dubbo 对于服务提供者的抉择是基于负载均衡算法来实现的,主要提供了4种负载均衡实现:
- 分别是基于权重随机算法的 RandomLoadBalance、
- 基于最少活跃调用数算法的 LeastActiveLoadBalance、
- 基于 hash 一致性的 ConsistentHashLoadBalance,
- 以及基于加权轮询算法的 RoundRobinLoadBalance
- Dubbo选择调用的服务提供者的具体实现源码。参考官网
服务调用失败的容错机制
- Dubbo 主要提供了这样几种容错方式:
- Failover Cluster - 失败自动切换
- Failfast Cluster - 快速失败
- Failsafe Cluster - 失败安全
- Failback Cluster - 失败自动恢复
- Forking Cluster - 并行调用多个服务提供者
- Dubbo容错机制的具体实现源码。参考官网
网友评论