Dubbo 的集群容错与负载均衡

/ 分布式 / 485浏览

集群容错机制原理

在单机环境下,如果服务消费者(Consumer)对服务提供者(Provider)发起一次调用请求,正好这次由于网络问题调用失败,我们可以配置服务消费者的重试策略,如 retries: 3,可能第二次重试调用是成功的。

但是,如果服务提供者所在的节点发生故障,那么消费者无论重试调用多少次,结果都是失败的,所以需要采用集群容错模式,这样如果单服务节点因故障无法提供服务,则还可以根据配置的集群容错模式,调用其它可用的服务节点,这就提高了服务的可用性。

alt

架构图及各个组件的关系图,图片来自Dubbo官网

各节点关系:

配置方法

服务提供者和消费者配置集群容错模式的代码如下:

<!--服务提供者配置-->
<dubbo:service cluster="failfast" />

或者

<!--服务消费者配置-->
<dubbo:reference cluster="failfast" />

其中,容错模式就是通过cluster属性进行配置的。目前Dubbo支持6种模式,Failover、Faifast、Failsafe、Failback、Forking、Broadcast。Dubbo默认的容错模式为 failover 重试。

六种集群容错模式

Failover Cluster

失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。

重试次数配置如下:

<dubbo:service retries="2" />

<dubbo:reference retries="2" />

还可以配置在方法级别上

<dubbo:reference>
    <dubbo:method name="findFoo" retries="2" />
</dubbo:reference>

Failfast Cluster

配置值为 failfast,又叫快速失败模式,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,每次调用的副作用是不同的,比如新增记录,如果一次失败了就应该让其直接失败,不需要再重试。

Failsafe Cluster

配置值为 failsafe,又叫失败安全模式,出现异常时,直接忽略。通常用于写入审计日志等操作。

Failback Cluster

配置值为 failback,失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

Forking Cluster

配置值为 failback,并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

Broadcast Cluster

配置值为 broadcast,广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。

负载均衡

Dubbo 框架内置了负载均衡的功能及扩展接口,我们可以透明地扩展一个服务或服务集群,根据需要能飞虫容易地增加或移除节点,提供服务的可伸缩性。Dubbo内置4种负载均衡策略,分别是:随机(Random)、轮询(RoundRobin)、最少活跃调用数(LeastActive)、一致性 Hash(ConsistentHash)。

配置方法

集群的负载均衡可以在服务端的服务接口级别进行配置:

<dubbo:service interface="..." loadbalance="roundrobin" />

也可以在客户端的服务接口级别进行配置:

<dubbo:reference interface="..." loadbalance="roundrobin" />

服务端方法级别配置:

<dubbo:service interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>

客户端方法级别配置:

<dubbo:reference interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:reference>

集群的4种负载均衡策略

1、随机模式(Random LoadBalance)

2、轮询模式(RoundRobin LoadBalance)

3、最少活跃调用数(LeastActive LoadBalance)

4、一致性 Hash(ConsistentHash LoadBalance)

alt

配图:阿拉斯加的北极光