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

架构之旅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.还有哪些可以优化的?有哪些不足?以及您是否遇到熔断的坑?

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

微服务架构:spring cloud简介

1.什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的We...

4028
来自专栏运维一切

xfs的故障记录

##前言 我使用xfs比较二一点,我是在ceph的rbd上直接格式化的xfs,所以ceph上的数据一般不会丢失,不过我的xfs是在docker内部进行的挂载,使...

2173
来自专栏架构师之旅

《Spring敲门砖之基础教程第一季》 第一章(3) Spring 框架历史及新功能介绍

回顾 上一节,我们简单介绍了Spring的各个模块,包含核心Sping容器模块、Spring的AOP模块、数据访问与集成模块、web应用模块、测...

20410
来自专栏琯琯博客

awesome-java-cn

Java 资源列表,内容包括:构建工具、数据库、框架、模板、安全、代码分析、日志、第三方库、书籍、Java 站点等等。 古董级工具 这些工具伴随着Java一起出...

6308
来自专栏微信公众号:Java团长

Java开发必须要知道的知识体系

Java是超高人气编程语言,拥有跨平台、面向对象、泛型编程等特性。在TIOBE编程语言排行榜中,连续夺得第一宝座,而且国内各大知名互联网公司,后端开发首选语言:...

1601
来自专栏陈树义

你绝不能错过的效率神器 —— Alfred

? Alfred 是 Mac 系统上一款专注于效率提升的著名应用,它能帮你快速打开网页、快速进行自定义搜索、查看剪贴板历史、快速查询单词等等。Alfred 提...

1K7
来自专栏高性能服务器开发

libevent源码深度剖析二 Reactor模式

(1)libevent源码深度剖析一 序 (2)libevent源码深度剖析二 Reactor模式 (3)libevent源码深度剖析三 libevent基本使...

1952
来自专栏廖可知的专栏

Redis 4.0 PSYNC2中second_replid_offset探究

Redis 4.0起引入了PSYNC2同步方式,分析源码时我们注意到,server数据中增加了replid2、second_replid_offset两个成员。...

1906
来自专栏程序猿DD

使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控

由于最近在做监控方面的工作,因此也读了不少相关的经验分享。其中有这样一篇文章总结了一些基于Spring Boot的监控方案,因此翻译了一下,希望可以对大家有所帮...

43210
来自专栏编程

2017最全的Java学习方向

方向不对努力白费,Java技术的学习并不是一蹴而就的,正确的学习方向能让你事半功倍,如果你想在自己的Java学习之初就了解学Java又好又快的方法,那么这篇文章...

2545

扫码关注云+社区

领取腾讯云代金券