注册中心宕机
现象:当注册中心发生宕机,消费者还是能够消费dubbo暴露的服务。
原因:
- 监控中心掉线不会影响使用,只是丢失部分采样数据。
- 数据库宕机之后,注册中心仍能通过缓存提供服务列表查询,但是不能注册新的服务。
- 注册中心对等集群,任意一台掉了,还是能够自动切换到另一台上。
- 注册中心都挂了,服务提供者和消费者还是可以通过本地缓存实现通讯。
- 服务提供者无状态,任意一台掉了,还是可以由其他的提供者提供服务。
- 服务提供者都挂了,那么消费者就不能使用应用了,并且会无限次地重试等待服务者恢复。
负载均衡机制
负载均衡策略
- 基于权重的随机负载均衡机制
随机访问的时候,访问概率等于权重比。 - 基于权重的轮询负载均衡机制
轮询访问的时候,访问概率等于权重比。 - 最少活跃数负载均衡机制
尽可能调用相应速度最快的服务提供者。 - 一致性哈希负载均衡机制
根据消费者的请求信息,映射到相应的提供者。
服务降级
什么是服务降级
当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
可以通过服务降级功能临时屏蔽某个出错的非关键服务,并定义降级后的返回策略。
服务降级的策略
- mock = force:return+null 表示消费方对该服务的方法调用直接放回null值,不发起远程调用。用来屏蔽 不重要服务不可用时对调用方的影响。
- mock = fail:return + null 表示消费方对该服务器的方法调用在失败后,再返回null,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。
集群容错
集群容错模式
- failover cluster
失败自动切换,当出现失败,重试其它的服务器。通常用于读操作,但是重试会带来延迟,可以通过retries=2,来设置重试次数。这是dubbo默认的集群模式。 - failfast cluster
快速失败,发起一次调用,失败了就立即报错。通常用于非幂等性的写操作,比如新增记录。 - failsafe cluster
失败安全,出现异常的时候,直接忽略。通常用于吸入审计日志等操作。 - failback cluster
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。 - forking cluster
并行调用多个服务器,只要一个成功即可返回。通常用于实时性要求高的读操作,但需要浪费更多的资源。可以通过forks= "2",来设置最大并行数。 - broadcast cluster
广播调用所有提供者,逐个调用,任意一台报错,则报错。通常用于通知所有服务提供者更新缓存或日志等本地资源信息。进行同步。
集群模式配置
可以分别在提供方和消费者配置集群模式。默认模式是失败自动切换。
<dubbo:service cluster="failsafe"/>
<dubbo:reference cluster="failsafe"/>
整合hystrix开启服务容错功能。