一起来聊一聊服务限流

97 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情

一起来聊一聊服务限流

前言

服务限流一般存在于高可用服务中,只允许指定的操作进入系统,其他操作全部拒绝或者排队或者降级处理。一般在服务器压力过大或者服务器资源紧张时会进行限流处理。常见的限流算法有固定窗口计数器算法、滑动窗口计数器算法、漏桶算法、令牌桶算法,常见的限流框架有Spring boot Hystrix、Sentinel等。今天我们就来聊一聊限流算法。

固定窗口计数器算法

固定窗口计数器算法就是规定单位时间内我们处理的请求数量。例如我们限制某一个接口1分钟只能访问100次,那在接收到第一个请求时会有计数,计为1,如果1分钟之内超过100个请求,第100之后的请求就会全部拒绝,1分钟之后计数器又会置为0。缺点是无法应对突发流量,例如前10秒来了99个,那后50秒只处理1个请求。

滑动窗口计数器算法

滑动窗口计数器算法是将单位时间划分为多个区间,每个区间都有一个计数器,有请求则该计数器加1,每过一段时间,时间窗口向前移动,丢掉老的区间,增加新的区间,多以划分的区间越多,限流的统计就越准确。

漏桶算法

漏桶算法是将请求都放入一个队列中,我们按照固定的速率从队列中取出请求,如果队列为空,则取出请求的操作停止,如果队列满了,则后面的请求无法放入队列,全部拒绝服务。

令牌桶算法

令牌桶算法和漏桶算法有些区别,令牌桶算法是按照固定的速率将令牌放入队列中,如果队列满了,则丢弃令牌,如果有请求,则获取令牌,执行请求,如果队列空了,没有令牌,则拒绝执行。