dubbo有良好的集群方案以及负载策略。仔细想了一下,集群容错与负载均衡还是要总结在一起,毕竟负载均衡是基于集群容错的。
dubbo集群容错
在集群调用失败时,dubbo提供了多种容错方案,默认方案为failover。dubbo自带的集群方案有六种,基本已经可以满足平常的集群需求,个别不满足的,当然dubbo也支持自定义扩展。
关于dubbo自带的六种方案,每一种都使用不同的业务需求,具体如下:
1. failover
失败自动切换,当出现失败,重试其他服务器,通常用于查询操作,但重试会带来更长的延迟,可以通过retries=n来设置重试次数,不包含第一次
2. failfast
快速失败,只发起一次调用,失败就报错,通常用于新增记录的操作,比如数据同步。
3. failsafe
失败安全,出现异常直接忽略,也就是对数据的完整性要求不高,通常用于写入审计日志等操作
4. failback
失败自动恢复,失败后后台记录失败的请求,定时重发,通常用于实时性要求不高的通知类操作
5. forking
并行调用,同时调用多个服务器,只要有一个返回成功即可,通常用于实时性要求高的查询操作,但是对资源的浪费更大,具体并行几个可以根据forks=n设置
6. broadcast
广播调用所有提供者,逐个调用,有一台报错就报错,通常用于更新所有提供者缓存或者日志等本地资源信息,用的机会较少,并且更新失败的话对系统影响很小的资源
dubbo负载均衡
当然有了集群,那么怎么样合理的调用集群,发挥集群的最大效果也是很重要的一部分,在集群负载均衡时,dubbo提供了多种均衡策略,默认值是random,即随机访问,dubbo自带的有四种均衡策略,也是基本够用,如有特殊,也是可以扩展的。
关于dubbo的负载策略以及使用场景如下:
1. random
随机访问策略,按照权重设置随机概率,但是一般情况下权重都是设置成一样的,一般是访问量越大随机越均匀。
2. roundrobin
轮训访问策略,按照公约后的权重设置轮训比率,但是一般权重一样,就是交替访问,但是会有处理慢的应用数据越堆越多的问题。
3. leastactive
最少活跃数访问策略,相同的活跃数是随机访问的,活跃数就是调用前后的计数差,这样的话处理慢的应用就会收到更少的请求,因为越慢调用前后的计数差就越大
4. consistenthash
一致性hash,也就是同一个参数的请求总是到同一个应用,当某一个应用挂掉时,原来发往该应用的请求就会基于虚拟节点,平均分配给其他的提供者,不会引起剧烈的变动
具体的负载策略还是要根据业务的具体需求来指定,集群实现以及负载策略的指定,都是在xml里面直接配置,相对简单,官方文档或者百度一下多多的。
喜欢本文的朋友们,欢迎关注微信公众号“Java面试达人”,收看更多精彩内容