springbootSpringCloudSpring Cloud

SpringCloud 雪崩 熔断 降级

2019-02-25  本文已影响53人  黄靠谱

参考

熔断机制
https://www.cnblogs.com/huangjuncong/p/9026949.html

https://blog.csdn.net/aa1215018028/article/details/81700796

https://www.jianshu.com/p/7c0a3723e2e4

概述

熔断机制的实现方法: 熔断+重试, 超时和异常会出发熔断。

如何避免雪崩效应:

熔断机制的好处:

  1. 避免雪崩效应(一个服务不可用,导致多个关联的的服务都不可用,虽然这个异常的微服务可能不是核心的服务)
  2. 缓解堆积效应:避免了消费端的线程等待的时间和等待的消费端的数量(快速返回异常结果 + 一段时间内不会接收请求)

雪崩效应

微服务之间的相互调用,如果某个服务出现异常(阻塞 超时 或者报错了),就导致所有的服务都阻塞和报错。
因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程,就叫服务雪崩效应

雪崩的原因:

  1. 程序异常
  2. 负载过高

熔断机制

当服务链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。
当检测到该节点微服务调用响应正常后,恢复调用链路。

在Spring Cloud框架里,熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败,就会启动熔断机制。
在Nginx里面也是这样的,集群

Nginx的熔断机制

当失败的调用(操作超时)次数超过max_fails时,fail_timeout时间内不会再转发请求到这个Node,然后又重试该节点。这就是一种熔断,避免大量的请求在异常的节点上面堆积。

  1. fail_timeout默认为10s,当判断某一个节点需要熔断时,10s内不会又请求转发到这个节点。
  2. max_fails默认为1。就是说,只要某个server失效一次,则在接下来的10s内,就不会分发请求到该server上
  3. proxy_read_timeout 读请求的响应事件,如果超过了这个时间还未返回,就触发一次超时

Dubbo的熔断机制

  1. 默认的Failover策略就是熔断机制,默认同步调用1s仍然没有返回结果,就会轮询下一个节点发起调用,最终调用retry_times 次数
上一篇下一篇

猜你喜欢

热点阅读