亿级流量网站架构核心技术 第四章 限流详解

限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统

 

 

 

 

限流算法

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

  限制两个连续事件的间隔事件不得小于某个时间窗口

 

posted @ 2019-07-16 14:03  褐色键盘  阅读(245)  评论(0)    收藏  举报