一:限流的作用
现在的应用访问量越来越高,瞬时流量不可预估,为了保证服务对外的稳定性,以免流量超过服务的负载能力,限流成为每个应用的保障.
二:限流可以应对
- 热点应用的突发请求;
- 调用方bug导致的突发请求;
- 恶意攻击请求。
三:注意事项
限流需要提前评估好,如果用的不当,可能会导致有些该限制的流量没有被限流,服务被这些过载流量打垮。有些不该限制流量的被限制,被用户抱怨。例如,整体服务的QPS是400/s,如果限流阀值是300,就会导致每秒有100个请求本该接受服务,却被限制访问,如果阀值是500,就会导致每秒有100个请求负载,时间越长累积越多,这些过载的流量就有可能导致整个服务的瘫痪。
四:为什么要实现分布式限流
如果是单点应用,实现限流后,那么应用所依赖的各种服务也都得到了保护.,
如果是分布式系统,单节点的限流仅能保护自身节点,可能无法保护应用依赖的各种服务,并且在进行节点扩容、缩容时也无法准确控制整个服务的请求限制,
如果实现了分布式限流,那么就可以方便地控制整个服务集群的请求限制,且由于整个集群的请求数量得到了限制,因此服务依赖的各种资源也得到了限流的保护。
五:限流的算法
- 固定窗口计数器;
- 滑动窗口计数器;
- 漏桶;
- 令牌桶。
- 固定窗口计数器算法