亿级流量网站架构核心技术 第四章 限流详解
限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统
限流算法
1 令牌桶算法
一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌
2 漏桶算法
应用级限流
1 限流总并发/连接/请求数
tomcat配置中的connector可配置排队大小,瞬时最大连接数,最大线程数
2 限流总资源数
连接池,线程池
3 限流某个接口的总并发/请求数
atomicLong或者semaphore进行限流
4 限流某个接口的时间窗请求数
guava的cache做存储计数器
5 平滑限流某个接口的请求数
令牌桶和漏桶算法,guava框架提供了令牌桶算法实现(rateLimiter)
分布式限流
分布式限流最关键的是将限流服务做成原子化
1 redis+lua
2 nginx+lua
接入层限流
接入层通常指请求流量的入口,该层主要目的:负载均衡,非法请求过滤,请求聚合,缓存,降级,限流,A/B测试,服务质量监控等
1 nginx的连接数限流模块ngx_http_limit_conn_module
2 nginx的漏桶算法实现的请求限流模块ngx_http_limit_req_module
3 openResty提供的lua限流模块lua_resty_limit_traffic
节流
特定时间窗口内对重复的相同事件最多处理一次,或者想限制多个连续相同事件最小执行时间间隔
1 throttleFirst/throttleLast
如果某段时间内,有多个重复的事件要处理,只处理第一个或最后一个。
2 throttleWithTimeout
限制两个连续事件的间隔事件不得小于某个时间窗口

浙公网安备 33010602011771号