美文网首页
熔断器设计(二)

熔断器设计(二)

作者: 放开那个BUG | 来源:发表于2021-01-11 10:42 被阅读0次

1、前言

我们已知的滑动窗口可以用来作为 Tcp 的流量控制的,它每次只滑动小于窗口大小的距离,所以每个时间段的窗口会交叉,如图:


滑动窗口

当滑动窗口每次滑动一个窗口的距离时,每个窗口都是不交叉的,可以算是滚动窗口,每次向前滚动一个窗口的大小。上一篇熔断器的设计其实算滑动窗口每次向前滑动一个窗口的距离,只是它的窗口不明显,直接在变量将每个时间窗口的失败量跟请求量定在了一起。

Hystrix通过滑动窗口来对数据进行“平滑”统计,默认情况下,一个滑动窗口包含10个桶(Bucket),每个桶时间宽度是1秒,负责1秒的数据统计。

滑动窗口
上图的每个小矩形代表一个桶,可以看到,每个桶都记录着1秒内的四个指标数据:成功量、失败量、超时量和拒绝量。10个桶合起来是一个完整的滑动窗口,所以计算一个滑动窗口的总数据需要将10个桶的数据加起来

2、设计

其实可以参照 rpc 框架:https://github.com/stateIs0/Lu-Rpc.git
这边实际上初始化一个 Metrics(被当作一个桶),桶里有请求总数(total)、请求异常总数(exception)、桶开始计时时间(startTime)。Metrics(桶)被一个 TimeWindow 所管理,每个 TimeWindow 持有一个 Metrics 数组(AtomicReferenceArray<Metrics>)表示一个滑动窗口。TimeWindow 由一个 WindowsManager 管理,它有一个 map 对应请求的服务与 TimeWindow 的关系提供接口给外部调用。
整个熔断器在 CircuitBreaker 中做状态的转换,从请求开始的获取,还是到错误的转换,都在这里,
可自行观看。原理跟上一个熔断器差不多,只是这个使用了标准的滑动窗口,比较好看。

3、参考资料

https://github.com/stateIs0/Lu-Rpc.git

相关文章

  • 不怕难之Spring Cloud系列之Hystrix

    一、简介 1. 引言 什么是熔断器? 为什么要有熔断器? 熔断器有哪些考虑指标? 熔断器有哪些适用的设计模式? 熔...

  • 熔断器设计

    1、前言 看别人 RPC 框架代码有熔断器的代码,但是对于熔断器并不是很了解,于是了解一下熔断器设计。熔断器跟限流...

  • 熔断器设计(二)

    1、前言 我们已知的滑动窗口可以用来作为 Tcp 的流量控制的,它每次只滑动小于窗口大小的距离,所以每个时间段的窗...

  • 熔断限流-hystrix

    设计原则: 资源隔离 熔断器 命令模式 架构:

  • NodeJS 熔断机制

    CircuitBreaker--熔断器设计模式 熔断器模式可以防止应用程序不断地尝试执行可能会失败的操作,使得应用...

  • hystrix

    hystrix 三个设计原则 资源隔离利用线程池实现,每个依赖服务最多耗尽自己线程池的资源 熔断器熔断器 命令模式...

  • 熔断器的选择方法(3)

    熔断器的选择 (1)UN熔断器≥UN线路. (2)IN熔断器≥IN线路. (3)熔断器的最大分断能力应大于被保护线...

  • 电容补偿柜有什么作用!如何快速检测补偿电容的好坏?

    电容补偿柜由柜体、母排、熔断器、隔离开关熔断器组、电容接触器、避雷器、电容器、电抗器、一、二次导线、端子排、功率因...

  • 电器原器件说明

    1、熔断器 熔断器(fuse)是指当电流超过规定值时,以本身产生的热量使熔体熔断,断开电路的一种电器。熔断器是根据...

  • springcloud使用(四) 熔断器Hystrix

    熔断器的概念和优点参考 springcloud(四):熔断器Hystrix, 讲的很详细 基于feign的Hyst...

网友评论

      本文标题:熔断器设计(二)

      本文链接:https://www.haomeiwen.com/subject/qpnkaktx.html