熔断和限流原理和使用(2)

简介: 熔断和限流原理和使用(2)
  • observe


调用 toObservable 方法 
并向Observable注册rx.subjects.ReplaySubject发起订阅


  • queue


image.png


image.png


image.png


限流


全局配置


image.png


限流RequestRateLimiter原理分析


image.png


系统会以一定的速度生成令牌,并将其放置到令牌桶中,可以将令牌桶想象成一个缓冲区(可以用队列这种数据结构来实现),当缓冲区填满的时候,新生成的令牌会被扔掉。 这里有两个变量很重要
第一个是生成令牌的速度,一般称为 rate 。比如,我们设定 rate = 2 ,即每秒钟生成 2 个令牌,也就是每 1/2 秒生成一个令牌
第二个是令牌桶的大小,一般称为 burst 。比如,我们设定 burst = 10 ,即令牌桶最大只能容纳 10 个令牌


数据流


数据流是真正的进入系统的流量,对于接口来讲,如果平均每秒钟会调用2次,则认为速率为 2次/s


算法原理


系统接收到一个单位数据(对于网络传输,可以是一个包或者一个字节;对于微服务,可以是一个请求)后,从令牌桶中取出一个令牌,然后对数据或请求进行处理。如果令牌桶中没有令牌了,会直接将数据或者请求丢弃。当然,对于微服务,就不能是丢弃这么简单了:可以返回一个异常消息,用于提示用户其请求速率超过了系统限制。
有以下三种情形可能发生:
1、数据流的速率 等于 令牌流的速率。这种情况下,每个到来的数据包或者请求都能对应一个令牌,然后无延迟地通过队列;
2、数据流的速率 小于 令牌流的速率。通过队列的数据包或者请求只消耗了一部分令牌,剩下的令牌会在令牌桶里积累下来,直到桶被装满。剩下的令牌可以在突发请求的时候消耗掉。
3、数据流的速率 大于 令牌流的速率。这意味着桶里的令牌很快就会被耗尽。导致服务中断一段时间,如果数据包或者请求持续到来,将发生丢包或者拒绝响应。


  • redis-rate-limiter.replenishRate


允许用户每秒执行多少请求,而不丢弃任何请求
令牌桶的填充速率即每秒生成的令牌数


  • redis-rate-limiter.burstCapacity


用户在一秒钟内执行的最大请求数
这是令牌桶可以保存的令牌数
将此值设置为零将阻止所有请求
burstCapacity=0 拒绝所有请求


  • redis-rate-limiter.requestedTokens


每个请求消耗多少个令牌,默认是1


  • 稳定速率


通过在replenishRate(补充令牌速度)和burstCapacity(令牌桶容量)中设置相同的值来实现的
相关文章
|
21天前
|
缓存 Java 应用服务中间件
常见的限流降级方案
【1月更文挑战第21天】
|
21天前
|
监控 Java 微服务
服务降级和服务熔断的区别
服务降级和服务熔断的区别
|
11月前
|
运维 监控 Java
通俗一点讲“限流熔断之Hystrix”
本篇文章用通俗的语言来讲述分布式系统中常用的限流熔断机制库Hystrix,旨在理解使用场景和原理,以及如何实现。不管你会不会敲代码,无论是大佬还是小白,力求老少皆宜。
163 0
通俗一点讲“限流熔断之Hystrix”
|
消息中间件 缓存 运维
10张图带你彻底搞懂限流、熔断、服务降级
10张图带你彻底搞懂限流、熔断、服务降级
1070 0
10张图带你彻底搞懂限流、熔断、服务降级
|
前端开发 关系型数据库 MySQL
服务降级熔断小总结|学习笔记
快速学习服务降级熔断小总结
172 0
服务降级熔断小总结|学习笔记
|
Java 开发者 Sentinel
SentineI 服务熔断降级的策略 | 学习笔记
快速学习 SentineI 服务熔断降级的策略
96 0
|
缓存 NoSQL 算法
限流实现-专题一
在实际业务中,经常会碰到突发流量的情况。如果公司基础架构做的不好,服务无法自动扩容缩容,在突发高流量情况下,服务会因为压力过大而崩溃。更恐怖的是,服务崩溃如同多米诺骨牌,一个服务出问题,可能影响到整个公司所有组的业务。
|
监控 算法 安全
限流
1. 为什么需要限流 2. 如何限流 限流主要就是考虑这两点
216 0
限流
|
数据安全/隐私保护
面试官:说说降级、熔断、限流
面试官:说说降级、熔断、限流
|
Sentinel
Sentinel熔断限流器工作原理
Sentinel熔断限流器工作原理
241 0
Sentinel熔断限流器工作原理

热门文章

最新文章