系统设计之熔断
系统设计之熔断
高并发系统不可用常见的原因:
- 依赖的服务或资源不可用,整体宕机
- 超过系统可承载的流量
服务降级,熔断和限流。
例如:
针对web容器(tomact),或RPC 服务端会有线程池响应并发,但池化资源有限,当线程池资源耗尽,那么服务端无法处理新的请求,服务提供方也就宕机了。
如下图,调用链路中c响应较慢,那么B中的线程池资源被占满,进而拖垮服务A - 服务雪崩
分布式环境中,最怕的不是某个服务或组件宕机,而是响应慢,可能拖垮整个系统。

因此当将测单某个服务响应时间出现异常,切断关联,让服务调用尽快返回。
熔断
断路器模、
状态机中会有三种状态:关闭(调用远程服务)、半打开(尝试调用远程服务)和打开(返回错误)
- 当调用失败的次数累积到一定的阈值时,熔断状态从关闭态切换到打开态。一般在实现时,如果调用成功一次,就会重置调用失败次数。
- 当熔断处于打开状态时,我们会启动一个超时计时器,当计时器超时后,状态切换到半打开态。你也可以通过设置一个定时器,定期地探测服务是否恢复。
- 在熔断处于半打开状态时,请求可以达到后端服务,如果累计一定的成功次数后,状态切换到关闭态;如果出现调用失败的情况,则切换到打开态。
降级
降级与熔断密不可分, 熔断后业务如何表现,约定一个快速失败的 Fallback,即为服务降级
开关降级: 首先区分核心与非核心服务,支队非核心服务做降级
- 读取场景,可采用直接返回降级数据。例如数据库压力较大,只读取缓存数据,不访问数据库。对与非核心接口,直接返回服务繁忙或者返回固定降级数据
- 轮询,增大间隔
- 同步写转为异步写,牺牲一致性保障可用性。
即数据、降频和异步。
其他
Hystrix (Netflix) Alibaba Sentinel