系统设计之熔断

系统设计之熔断

高并发系统不可用常见的原因:

  • 依赖的服务或资源不可用,整体宕机
  • 超过系统可承载的流量

服务降级,熔断和限流。

例如:

针对web容器(tomact),或RPC 服务端会有线程池响应并发,但池化资源有限,当线程池资源耗尽,那么服务端无法处理新的请求,服务提供方也就宕机了。

如下图,调用链路中c响应较慢,那么B中的线程池资源被占满,进而拖垮服务A - 服务雪崩

分布式环境中,最怕的不是某个服务或组件宕机,而是响应慢,可能拖垮整个系统。

Screen Shot 2020-09-12 at 3.37.32 PM

因此当将测单某个服务响应时间出现异常,切断关联,让服务调用尽快返回。

熔断

断路器模、

状态机中会有三种状态:关闭(调用远程服务)、半打开(尝试调用远程服务)和打开(返回错误)

  • 当调用失败的次数累积到一定的阈值时,熔断状态从关闭态切换到打开态。一般在实现时,如果调用成功一次,就会重置调用失败次数。
  • 当熔断处于打开状态时,我们会启动一个超时计时器,当计时器超时后,状态切换到半打开态。你也可以通过设置一个定时器,定期地探测服务是否恢复。
  • 在熔断处于半打开状态时,请求可以达到后端服务,如果累计一定的成功次数后,状态切换到关闭态;如果出现调用失败的情况,则切换到打开态。

降级

降级与熔断密不可分, 熔断后业务如何表现,约定一个快速失败的 Fallback,即为服务降级

开关降级: 首先区分核心与非核心服务,支队非核心服务做降级

  • 读取场景,可采用直接返回降级数据。例如数据库压力较大,只读取缓存数据,不访问数据库。对与非核心接口,直接返回服务繁忙或者返回固定降级数据
  • 轮询,增大间隔
  • 同步写转为异步写,牺牲一致性保障可用性。

即数据、降频和异步。

其他

Hystrix (Netflix) Alibaba Sentinel