
获得徽章 1
- #青训营笔记创作活动#
12月7日 打卡 day1
今日学习
1.为应对高并发场景下的流量高峰,通常采用限流,熔断,降级的方式去应对。
2.限流:限制系统在一定时间内并发处理的请求数,超出的流量拒绝服务
3.常用限流方式
>计数器:在一段时间间隔内统计请求的数目,超过规定阈值则拒绝服务。到了时间间隔临界点,计数器清零。
存在临界点问题。
>滑动窗口:类似tcp中的滑动窗口。将时间段看做一个窗口,划分为多个格子,每个格子代表一个小小的时间段。统计格子里的请求总数,当时间过了一个格子,窗口进行滑动,计数器减去最早的格子的请求数。
格子数目影响算法精度,无法从根本解决临界点问题。
>漏桶:原理是一个固定容量的漏铜,按照固定速率流出水滴。计数器统计当前正在处理的请求数,当一个请求完成,则计数器减减,新请求到达,计数器加加,当到达阈值,拒绝服务。请求处理的速度通常是固定的,就是水流入的速度不可控,但是流出的速度可控。最大出水率(处理请求速度)就是最大速率。
不能应对突发流量。
>令牌桶:控制发送到网络上的数据数目,在令牌桶中按照固定速率生成令牌,只有拿到令牌才能处理,支持一次拿多个,控制平均流入速度。
>Redis+lua脚本实现分布式限流。关键是将限流服务做成原子化。可以借助Redis的计数器,lua执行的原子性实现。展开评论1