如何限流?在工作中是怎么做的?说一下具体的实现?
计数器:控制单位时间内的请求数量。缺陷:设每分钟请求数量为60个 每秒可以处理1个请求用户在00:59 发送 60 个请求,在 01:00 发送60个请求 此时2秒钟有120个请求(每秒60个请求)远远大于了每秒钟处理数量的國值Q。
滑动窗口Q:滑动窗口是对计数器方式的改进,增加一个时间粒度的度量单位。把一分钟分成若干等分(6份,每份10秒),在每一份上设置独应计数器,在 00:00-00:09 之间发生请求计数器累加1 当等分数量越大限流统计就越详细。
Leaky Bucket漏桶:规定固定容量的桶,有水进入, 有水流出,对于流进的水我们无法估计进来的数量、速度,对于流出的水我们可以控制速度
Token Bucket令牌桶:规定固定容量的桶token 以固定速度往桶內填充,当桶满时 foken 不会被继续放入,每过来一个请求把 token 从桶中移除如果桶中没有 token 不能请求。
sentinel和spring cloud gateway两个框架都是很好的限流框架
spring cloud gateway 默认使用redis进行限流,修改参数拿来即用
sentinel:通过配置来控制每个山I的流量。