随笔写一下首次接触限流的心得。
先啰嗦一下背景:
- 为什么要做限流
对系统的出入流量进行控制,维护系统的稳定性,专业的名词,负载保护。 - 怎么做到限流
两个方面,怎么检测到限流和怎么去限流,专业名词,限流策略和熔断策略;
限流策略:写接口,大流量读接口,这次主要看了基于redis的。
熔断策略; 直接拒绝,排队等待,服务降级,等。 - 限流的算法
瞬时限流,时间窗限流,令牌桶限流;
这里着重看了令牌桶的限流策略,简单描述下:
它有一个桶的概念,桶中可以放置N个令牌,
假设用户的平均速率是R,每隔1/R讲一个令牌加入桶中,当令牌达到桶已经满时,这个令牌就会丢弃;
流量以速率V来到,从桶中去令牌,拿到令牌的通过,拿不到的执行熔断策略。 - 基于redis的腾讯轻量级全局流控
- 要限流怎么计数
使用redis或者ckv(ckv是腾讯自主研发的高性能分布式的kv存储服务,采用冷热自动分离技术,反正很牛掰的样子) - 请求量怎么上报
全量上报和定时批量上报 - 成熟的计数策略
- 管理定时器:能计时的key,1s划分一个key,每个key采用incr方式进行计数
- 拉取式限流
限流方式由流量上报更新为拉取配置,
该时刻key=20181012111111,value=10000,设置每次拉取配额为1000,那么每过1000个请求就拉取一次配额,没有配额了就执行熔断策略。 - 部署方式
业务流控api