编程语言
首页 > 编程语言> > 高并发限流算法

高并发限流算法

作者:互联网

目录

开篇

限流算法

1.漏桶(Leaky Bucket)

2.令牌桶(Token Bucket)

数据流

漏桶算法和令牌桶算法的比较

参考资料


开篇

在高并发系统中,有很多手段来保护系统,如缓存、降级和限流等。

缓存:让数据尽早进入缓存,离程序近一点,不要大量频繁的访问DB,可提供系统访问速度和增大系统处理能力。

降级:当服务出问题或者影响到核心流程的性能,需要将服务暂时屏蔽掉,待高峰期过去或问题解决后再启用。

然后,有些场景不能用缓存和降级来解决。比如电商的双十一,用户的购买,下单等行为,是涉及到大量写操作,而且是核心链路,无法降级的。

限流:通过把并发访问/请求进行限速或者一定时间窗口内的请求限制在一定范围内来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页面或告知资源没有了)、排队或等待(如秒杀),从而保证系统不被冲垮,同时尽可能提升系统的吞吐量。

限流算法

常见的限流算法:漏桶、令牌桶。计数器也可用来进行粗暴限流实现。

1.漏桶(Leaky Bucket)

漏桶算法可用于流量整形(Traffic Shaping)和流量控制(Traffic Policing)

漏桶算法描述如下:

 

2.令牌桶(Token Bucket)

令牌桶算法是一个存放固定容量令牌(token)的桶,按照固定速率往桶里添加令牌。

令牌桶算法基本可以用下面的几个概念来描述:

令牌桶算法实际上由三部分组成:两个流和一个桶,分别是令牌流、数据流与令牌桶。

 令牌流与令牌桶

系统会以一定的速度生成令牌,并将其放置到令牌桶中,可以将令牌桶想象成一个缓冲区(可以用队列这种数据结构来实现),当缓冲区填满的时候,新生成的令牌会被扔掉。 这里有两个变量很重要:

数据流

数据流是真正的进入系统的流量

 

有以下三种情形可能发生:

 

漏桶算法和令牌桶算法的比较

 

何时拒绝请求

限流策略

漏桶算法漏桶是按照常量固定速率流出请求,流入请求速率任意,当流入的请求数累积到漏桶容量时,则新流入的请求被拒绝;漏桶限制的是常量流出速率(即流出速率是一个固定常量值,比如都是 1 的速率流出,而不能一次是 1 ,下次又是 2 ),从而平滑突发流入速率;
令牌桶算法令牌桶是按照固定速率往桶中添加令牌,请求是否被处理需要看桶中令牌是否足够,当令牌数减为零时则拒绝新的请求;令牌桶限制的是平均流入速率(允许突发请求,只要有令牌就可以处理,支持一次拿 3 个令牌, 4 个令牌),并允许一定程度突发流量;

 


参考资料

http://m635674608.iteye.com/blog/2339587 高并发系统限流《亿级流量网站架构核心技术》第2部分 高可用 4.限流详解

http://ju.outofmemory.cn/entry/102231 令牌桶算法/Token Bucket Algorithm

http://blog.51cto.com/leyew/860302 漏桶算法

标签:令牌,请求,并发,算法,限流,速率,漏桶
来源: https://blog.csdn.net/hanhan122655904/article/details/114639756