限流方案

1限流方案简介

每个系统都有服务的上线,所以当流量超过服务极限能力时,系统可能会出现卡死、崩溃的情况,所以就有了降级和限流。 限流其实就是:当高并发或者瞬时高并发时,为了保证系统的稳定性、可用性,系统以牺牲部分请求为代价或者延迟处理 请求为代价,保证系统整体服务可用。限流主要限制请求流量,保证当前服务、依赖服务不会被大流量彻底压死。 举个例子:电商网站大促期间,如果服务能力实在有限,可以对社区功能进行降级,全力保促销、交易流程;如果交易系统 还是无法承担流量的压力,通过限制并发可以让部分用户无法下单,因为部分人不能用总比让整个网站挂掉好。 在自动化规则模块运行时遇到这样一个问题:邮件、短信接口在短时间内被多次调用导致邮件发送失败。此时就需要对邮件、 短信工单进行限流处理。

2三种限流方案介绍

目前有几种常见的限流方式: 1.通过限制单位时间段内调用量来限流 2.使用漏桶(Leaky Bucket)算法来进行限流 3.使用令牌桶(Token Bucket)算法来进行限流

2.1滑动窗口算法

通过限制单位时间段内调用量来限流。它是限流算法中最简单最容易的一种算法,比如我们要求某一个接口,1分钟内的请求不能超过10次,我们可以在开始时设置 一个计数器,每次请求,该计数器+1;如果该计数器的值大于10并且与第一次请求的时间间隔在1分钟内,那么说明请求过多;如 果该请求与第一次请求的时间间隔大于1分钟,并且该计数器的值还在限流范围内,那么重置该计数器。 自动化工单引擎采用了这种限流方式。由于自动化模块是分布式的环境,分布式限流最关键的是要将限流服务做成原子化,所 以计数器、时间等值存在redis中。

2.1使用漏桶(Leaky Bucket)

这个算法很简单。首先,我们有一个固定容量的桶,有水进来,也有水出去。对于流进来的水,我们无法预计共有多少水流进 来,也无法预计流水速度,但对流出去的水来说,这个桶可以固定水流的速率,而且当桶满的时候,多余的水会溢出来。

2.1使用令牌桶(Token Bucket)

桶一开始是空的,token以固定的速率r往桶里面填充,直到达到桶的容量,多余的token会被丢弃。每当一个请求过来时,就会 尝试着移除一个token,如果没有token,请求无法通过。