这次咱们从根源聊:16招搞定高并发架构设计(17)

5、熔断

熔断可以说是也是自动降级的一种,是对客户端的保护。

现在微服务的架构,一个客户端可能会依赖几十个其它的服务,有任何一个位于同步调用的外部服务出现超时,即使客户端的ReadTimeOut设置的时间不长也对客户端是很大的压力和负担。

(这么多线程干等着,当然了全异步的服务不需要考虑这个问题,互联网来大部分请求最终还是同步的HTTP,Web层总是需要等待的,很难像游戏服务器做到长连接的全异步处理。)

所以在外部服务遇到问题的时候要自动进行熔断,在外部服务恢复后尝试半恢复,最后完全恢复访问,一般来说有几种熔断策略:

根据请求失败率熔断,比如在一定时间内有一定百分比的请求是失败的,那么就开启熔断根据响应时间熔断,比如一定时间内的请求平均响应时间超过N秒则开启熔断一般而言需要在代码里去写熔断后的Callback,由回调函数提供熔断后返回的临时数据或者直接出异常不允许请求继续进行下去。至于选择临时数据还是出异常还是取决于实际的业务,对于某些情况熔断后返回一个不合理的临时数据往往是不可以接受的。

推荐阅读