写点什么

高并发之限流

作者:源字节1号
  • 2022 年 9 月 16 日
    浙江
  • 本文字数:989 字

    阅读完需:约 3 分钟

高并发之限流

每个系统都有服务的上线,所以当流量超过服务极限能力时,系统可能会出现卡死、崩溃的情况,所以就有了降级和限流。限流其实就是:当高并发或者瞬时高并发时,为了保证系统的稳定性、可用性,系统以牺牲部分请求为代价或者延迟处理请求为代价,保证系统整体服务可用

方案一:令牌桶方式(Token Bucket)

令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。先有一个木桶,系统按照固定速度,往桶里加入 Token,如果桶已经满了就不再添加。当有请求到来时,会各自拿走一个 Token,取到 Token 才能继续进行请求处理,没有 Token 就拒绝服务。



这里如果一段时间没有请求时,桶内就会积累一些 Token,下次一旦有突发流量,只要 Token 足够,也能一次处理,所以令牌桶算法的特点是允许突发流量

方案二:漏桶方式

水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率。



可见这里有两个变量,一个是桶的大小,支持流量突发增多时可以存多少的水(burst),另一个是水桶漏洞的大小(rate)。

因为漏桶的漏出速率是固定的参数,所以,即使网络中不存在资源冲突(没有发生拥塞),漏桶算法也不能使流突发(burst)到端口速率.因此,漏桶算法对于存在突发特性的流量来说缺乏效率。

令牌桶和漏桶对比

1.令牌桶是按照固定速率往桶中添加令牌,请求是否被处理需要看桶中令牌是否足够,当令牌数减为零时则拒绝新的请求;

2.漏桶则是按照常量固定速率流出请求,流入请求速率任意,当流入的请求数累积到漏桶容量时,则新流入的请求被拒绝;

3.令牌桶限制的是平均流入速率(允许突发请求,只要有令牌就可以处理,支持一次拿 3 个令牌,4 个令牌),并允许一定程度突发流量;

4.漏桶限制的是常量流出速率(即流出速率是一个固定常量值,比如都是 1 的速率流出,而不能一次是 1,下次又是 2),从而平滑突发流入速率;

5.令牌桶允许一定程度的突发,而漏桶主要目的是平滑流入速率;

6.两个算法实现可以一样,但是方向是相反的,对于相同的参数得到的限流效果是一样的。

方案三:计数器方式

计数器限流算法也是比较常用的,主要用来限制总并发数,比如数据库连接池大小、线程池大小、程序访问并发数等都是使用计数器算法。也是最简单粗暴的算法。


如若转载,请注明出处:开源字节   https://sourcebyte.cn/article/232.html

用户头像

源字节1号

关注

一个着迷于技术又喜欢不断折腾的技术活跃者 2022.03.09 加入

一个着迷于技术又喜欢不断折腾的技术活跃者。喜欢并热爱编程,执着于努力之后所带来的美好生活!

评论

发布
暂无评论
高并发之限流_软件开发_源字节1号_InfoQ写作社区