服务熔断流量控制算法(漏桶令牌桶)(代码片段)

clarino clarino     2022-12-06     633

关键词:

参考:https://my.oschina.net/cicadasmile/blog/4328041

 

1、基本概念

流量控制的核心作用是限制流出某一网络的某一连接的流量与突发,使这类报文以比较均匀的速度流动发送,达到保护系统相对稳定的目的。通常是将请求放入缓冲区或队列内,然后基于特定策略处理请求,匀速或者批量处理,该过程也称流量整形。

流量控制的核心算法有以下两种:漏桶算法和令牌桶算法。

2、漏桶算法

基础描述

漏桶算法是流量整形或速率限制时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。

技术图片

漏桶算法基本思路:请求(水流)先进入到容器(漏桶)里,漏桶以一定的速度出水,这里就是指流量流出的策略,当流量流入速度过大容器无法承接就会直接溢出,通过该过程限制数据的传输速率。

核心要素

通过上述流程,不难发现漏桶算法涉及下面几个要素:

容器容量

容器的大小直接决定能承接流量的多少,容器一但接近饱和,要么溢出,要么加快流速;

流出速度

流量流出的速度取决于服务的请求处理能力,接口支撑的并发越高,流速就可以越大;

时间控制

基于时间记录,判断流量流出速度,控制匀速模式,

注意:需要一个基本的判定策略,漏桶算法在系统能承接当前并发流量时,不需要启用。

3、令牌桶算法

基础描述

令牌桶可自行以恒定的速率源源不断地产生令牌。如果令牌不被消耗,或者被消耗的速度小于产生的速度,令牌就会不断地增多,直到把桶填满。后面再产生的令牌就会从桶中溢出。

技术图片

令牌桶算法虽然根本目的也是控制流量速度,但是当令牌桶内的令牌足够多时,则允许流量阶段性的并发。传送到令牌桶的数据包需要消耗令牌。不同大小的数据包,消耗的令牌数量不一样。

核心要素

令牌桶

存放按照特定的速率生成的令牌,以此控制流量速度。

匹配规则

这里的匹配规则更多是服务于分布式系统,例如服务A是系统的核心交易,当出现并发时,基于令牌桶最匹配规则,只允许交易请求通过,例如:常见双十一期间,各大电商平台提示,为保证核心交易,边缘服务的数据延迟或暂停等。

注意:令牌桶算法和漏桶算法的目的虽然相同,但是实现策略是相反的,不过都存在一个问题,为保证大部分请求流量成功,会牺牲小部分请求。

限流算法之漏桶、令牌桶的区别

...网络提供一个稳定的流量。漏桶可以看作是一个带有常量服务时间的单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃。在网络中,漏桶算法可以控制端口的流量输出速率,平滑网络上的突发流量,实现流量整形,... 查看详情

使用golang实现简易的令牌桶算法(代码片段)

...时候时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送。令牌桶算法就实现了这个功能,可控制发送到网络上数据的数目,并允许突发数据的发送。令牌桶算法是网络流量整... 查看详情

如何解决mysqlinnodb高并发的问题

...水来得过猛而出水不够快时就会导致水直接溢出,即拒绝服务。图片来自网络漏桶的出水速度是恒定的,那么意味着如果瞬时大流量的话,将有大部分请求被丢弃掉(也就是所谓的溢出)。令牌桶算法令牌桶算法的原理是系统以... 查看详情

nginx浅析4-限流(秒杀,高并发)(代码片段)

限流:控制单位时间内用户访问服务器的次数限流方式:控制速率控制并发连接数限流控制速率算法:令牌桶算法漏桶算法1.令牌桶算法 算法思路: 令牌以固定速率产生,放到令牌桶中令牌桶放满时,多余令... 查看详情

高并发中使用到的ratelimiter源码解析(代码片段)

...提升系统访问速度和增大系统处理容量降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请... 查看详情

限流算法之漏桶算法令牌桶算法(代码片段)

昨天CodeReview的时候看到同时使用RateLimiter这个类用作QPS访问限制.学习一下这个类.RateLimiter是Guava的concurrent包下的一个用于限制访问频率的类.1.限流每个API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就... 查看详情

限流算法

...牌数减为零时则拒绝新的请求。令牌桶允许一定程度突发流量,只要有令牌就可以处理,支持一次拿多个令牌。令牌桶中装的是令牌。漏桶限流一个固定容量的漏桶,按照固定常量速率流出请求,流入请求速率任意,当流入的请... 查看详情

ratelimiter(代码片段)

...滑的限流算法有两种:漏桶算法和令牌桶算法.很多传统的服务提供商如华为中兴都有类似的专利,参考: http://www.google.com/patents/CN1536815A?cl=zh漏桶算法漏桶(LeakyBucket)算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度 查看详情

php对api接口做限流(代码片段)

...牌的假如与消耗什么是接口限流顾名思义,限流就是限制流量,包括并发的流量和一定时间内的总流量,就像你宽带包了1个G的流量,用完了就没了,所以控制你的使用频率和单次使用的总消耗。通过限流,我们可以很 查看详情

php对api接口做限流(代码片段)

...牌的假如与消耗什么是接口限流顾名思义,限流就是限制流量,包括并发的流量和一定时间内的总流量,就像你宽带包了1个G的流量,用完了就没了,所以控制你的使用频率和单次使用的总消耗。通过限流,我们可以很 查看详情

nginx限流配置(代码片段)

限流算法令牌桶算法算法思想是:令牌以固定速率产生,并缓存到令牌桶中;令牌桶放满时,多余的令牌被丢弃;请求要消耗等比例的令牌才能被处理;令牌不够时,请求被缓存。漏桶算法算法思想是:水(请求)从上方倒入水... 查看详情

高可用系统设计|分布式限流策略:计数器算法漏桶算法令牌桶算法

...漏桶算法令牌桶算法限流什么是限流?限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的... 查看详情

读书笔记:限流详解(代码片段)

from《亿级流量网站架构核心技术–跟开涛学搭建高可用高并发系统》在压测时我们可以找出每个系统的处理峰值,然后通过设定峰值阈值,来防止当系统过载时,通过拒绝处理过载的请求来保障系统可用。限流需要... 查看详情

使用guavaratelimiter限流以及源码解析(代码片段)

...的是提升系统访问速度和增大系统处理容量降级降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开限流限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口... 查看详情

漏桶算法工具类(代码片段)

...*@paramcapacity漏斗容量*@paramallowQuota每单个单位时间允许的流量*@paramperSecond单位时间(秒)*@return是否允许访问*/publicbooleanisActionAllowed(intcapacity,intallowQuota,intperSecond)Stringkey="funnelkey";if(!funnelMap.containsKey(key))funnelMap.put(key,newFunnel(capaci... 查看详情

经典面试题——让你设计一个限流的系统怎么做?

参考技术A保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。限流系统是当前很多系统都需要考虑的场景。首先在Nginx层面是可以做限流的,除此之外,在微服务层面还是有很多空间可以施展的。限流的话,主要思路分... 查看详情

限流算法(代码片段)

...都知道,对于高并发的业务场景,我们为了保障服务的稳定,经常会祭出三大利器:缓存、熔断降级和服务限流。 服务限流作为一个核心的自保护机制,能够在非常高并发的情况下ÿ 查看详情

nginx限流配置-令牌桶算法(代码片段)

  算法思想是:令牌以固定速率产生,并缓存到令牌桶中;令牌桶放满时,多余的令牌被丢弃;请求要消耗等比例的令牌才能被处理;令牌不够时,请求被缓存。漏桶算法算法思想是:水(请... 查看详情