架构取经之路2 - 五分钟搞懂 [熔断机制]

    科技2022-07-31  105

    Python实战社群

    Java实战社群

    长按识别下方二维码,按需求添加

    扫码关注添加客服

    进Python社群▲

    扫码关注添加客服

    进Java社群▲

    作者丨悟空聊架构 

    来源丨悟空聊架构 (PassJava666)

    阅读目录

    1.熔断检测机制

    2.熔断算法

    3.统计失败率的时间窗口

    4.熔断持续时间

    5.手动熔断

    6.总熔断检测开关

    7.查看当前熔断的状态

    8.还有哪些可以优化的?有哪些不足?以及您是否遇到熔断的坑?

    架构取经之路1 - 扣减库存

    架构取经之路2 - 熔断机制

    架构取经之路3 - 悟空聊无事务

     

    项目中要做一个熔断机制,预防对第三方的接口调用压力太大。下面我介绍下项目中用到的熔断机制。

    回到顶部

    0x01.熔断检测机制

    (1)请求call到backend后,首先判断熔断开关是否打开

    (2)如果熔断开关已打开,则表明当前请求不能被处理

    (3)如果熔断开关未打开,则判断时间窗口(判断统计错误率)是否已满

    (4)如果时间窗口(判断统计错误率)未满,则请求桶(redis) 中的请求数加1

    (5)如果返回的response 有异常,则失败桶(redis) 的失败数加1,如果返回的response没有异常,则成功桶(redis) 的成功数加1

    (6)如果时间窗口(判断统计错误率)已满,则开始判断是否需要熔断

    回到顶部

    0x02.熔断算法

     

     

    充要条件:

    (1)请求总数 > 设定值X

    (2)失败率 > 设定值Y

    请求总数可以从请求桶redis 中获取到

    失败率 = 失败数 ÷ 请求数 × 100%

    当请求总数大于一定值,且失败率大于一定值时,则表示请求失败数太多了,需要熔断API请求

    回到顶部

    0x03.统计失败率的时间窗口

     (1)每次请求,都会判断时间窗口是否已满(如5分钟),如果时间窗口已满,则重新开始计时,且清理请求数/成功数/失败数

    (2)第一次开始的起始时间默认为当前时间。

    回到顶部

    0x04.熔断持续时间

    (1)如果出现问题,可以将所有请求链路熔断掉,熔断恢复时间可以假定为1分钟,可以根据不同的环境进行调整

    (2)熔断恢复时间没有根据环境来进行动态调整,比如网络差的时候,持续了很长时间网络都很差,这个时候,可以动态递增熔断时间

    回到顶部

    0x05.手动熔断

    因为熔断是通过统计单位时间内的失败率来判断是否需要熔断的,而有时候我们需要快速切断请求链路,比如充值请求量太大的时候,导致很多订单都被退款,这个时候我们可以先熔断获取套餐接口,这样用户就拿不到套餐,就不能充值了。

    回到顶部

    0x06.总熔断检测开关

    有时候我们不需要熔断检测,这个时候我们就需要一个总开关,打开总开关,则进行熔断检测,关闭总开关,则不进行熔断检测。

    回到顶部

    0x07.查看当前熔断的状态

    我们做了熔断检测,但是需要check下是否work了,可以check下以下参数

    程序员专栏 扫码关注填加客服 长按识别下方二维码进群 近期精彩内容推荐:   程序员写的这一行代码,被国家博物馆收藏了 2020 年 9 月程序员工资统计,我扯后腿了~ 提高国内访问 GitHub 的速度的 9 种方案 Python是强类型语言,还是弱类型语言? 在看点这里好文分享给更多人↓↓
    Processed: 0.010, SQL: 8