前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >架构必经之路2 - 熔断机制

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

作者头像
悟空聊架构
发布2018-12-12 17:34:17
1.1K0
发布2018-12-12 17:34:17
举报
文章被收录于专栏:悟空聊架构 | 公众号

架构之旅1 - 扣减库存

架构之旅2 - 熔断机制

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

一、熔断机制  

1.熔断检测机制

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

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

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

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

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

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

 2.熔断算法

充要条件:

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

(2)失败率 > 设定值Y

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

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

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

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

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

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

4.熔断持续时间

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

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

5.手动熔断

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

6.总熔断检测开关

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

7.查看当前熔断的状态

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

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

欢迎留言一起探讨熔断机制~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、熔断机制  
    • 1.熔断检测机制
      •  2.熔断算法
        • 3.统计失败率的时间窗口
          • 4.熔断持续时间
            • 5.手动熔断
              • 6.总熔断检测开关
                • 7.查看当前熔断的状态
                  • 8.还有哪些可以优化的?有哪些不足?以及您是否遇到熔断的坑?
                  相关产品与服务
                  云数据库 Redis
                  腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档