熔断模式 Circuit Breaker Pattern

2019-01-15  本文已影响0人  GongMeng

非常著名的设计模式, 用来处理服务不可用的状态下的情况. 尤其在流处理系统中, 避免某个点的错误无限向后扩展. 让错误在系统内被及时终止是很有必要的.

问题

在一个云处理平台上, 很多操纵/算子是经过网络在远程集群上处理并返回结果的. 网络抖动, 物理机崩溃, 自然灾害等可能让业务层的机器永远无法等到结果.
首先会重试数次, 但重试失效后是否需要降级处理, 以及通知其它服务故障状况成为一个决策.
一个坏掉的biz节点可能导致大量的上端业务停摆, 并持续重试, 交换机可能被重试链接淹没. 网络延迟瞬间增大, 从而导致更多的服务超时, 更多的重试链接被建立, 整个业务链最终崩溃!

解决

熔断机制致力于解决在服务失效时的重试问题, 以及服务失效后的影响范围控制问题. 在这种设计模式下, 业务端能够获知它依赖的服务的状态, 从而决策重试的次数, 以及决策是否使用降级后的解决方案来解决问题

熔断机制非常类似于一个proxy, 它在转发请求的同时, 需要检测请求失败的次数, 如果失败次数过多. 它可以根据策略, 通知上层应用停止发送服务请求, 并对所有等待中的请求立即返回错误.

更进一步的, 它可以启动备案状态, 将关键请求转发到备份的机器上从而保证一些核心业务以比较高的代价可以持续运行. 熔断开关可以表现成一个状态机

image.png

ebay公司在搜索业务中如果cache层, elasticsearch层都大面积失效. 会去底层数据库进行一个非常重的扫描以重建关键索引

在具体实现中, 统计部分可能需要按照一个滑动窗口来进行统计.

决策

上一篇 下一篇

猜你喜欢

热点阅读