限流算法概述

一、限流算法有哪些  

计数器、滑动窗口、漏桶、令牌桶

二、限流算法原理

1.计数器

一般来说,计数器比较粗暴,就是看单位时间内,所接受的 QPS 的请求有多少,如果超过阈值,则直接拒绝服务

缺点:假如我限制1秒QPS为1000,那么在第1ms,涌入1000个请求,剩下的999ms,就只能拒绝服务

 

2.滑动窗口

滑动窗口可以看做计数器的精细化实现,之前只能一分钟一分钟往前赶,现在可以根据实现的精细化 一秒一秒往前赶,虽然整体原理还是靠计数器。

 

3.漏桶

我们会用一个桶作为缓冲区,所有的请求都先丢到桶里。系统以恒定速率慢慢消化这些请求。比较常见的实现就是队列,用一个缓冲区来保存没处理的请求,然后消费者恒定速度抓取一些请求进行处理。

 

4.令牌桶

我们会有一个令牌管理员,按照一定的策略往令牌桶里放令牌。系统每接受到一个请求的时候,都会请求要一个令牌。如果拿到令牌,那么就处理这个请求,拿不到就直接拒绝这个请求。那么只要令牌发放的策略正确,这个系统就不会被拖垮,也能对机器的利用率更高。

三、解决方案

1.Guava的RateLimiter

Google Guava中的RateLimter就是利用的令牌桶原理

2.基于分布式锁的令牌桶

3.Alibaba Sentinel

Sentinel 是一个带配置中心的分布式缓存,以 "资源名称" 为统计点,提供了多种方式的限流方案,可以基于 QPS、线程数,甚至系统 load 进行集群规模的限流。

4.resilience4j 

5.hystrix

Hystrix的限流基于滑动窗口算法实现

 

你可能感兴趣的:(java)