.
通过压测的手段找到每个系统的处理峰值,然后通过设定峰值阈值,来防止当系统过载时,通过拒绝处理过载的请求来保障系统 可用性,同时也应该根据系统的吞吐量,响应时间,可用率来动态调整限流阈值。 分类:
? 限制总并发数---数据库连接池,线程池
? 限制瞬时并发数---nginx的limit_conn模块,用来限制瞬时并发连接数 ? 限制时间窗口内的平均速率---guava的RateLimiter,nginx的limit_req
模块,限制每秒平均速率
? 其他---限制远程接口调用速率,限制MQ消费速率,另外,还可以根据网
络连接数,网络流量,CPU或内存负载等来限流。 算法:
? 滑动窗口协议---改善吞吐量的技术
? 漏桶---强制限制数据的传输速率,限制的流出速率
? 令牌桶---(控制(流入)速率类型的限流算法)系统以恒定的速度往桶中
放入令牌,如果请求需要被处理,则需要先从桶中获取一个令牌,当桶中没有令牌可取,则拒绝服务。当平时处理速率小于桶中令牌的速率,那么在突发流量时桶内有堆积可以有效预防。
1.1.1 令牌桶
word资料
.
1.1.2 漏桶
word资料
.
八、总结
任何一个分布式系统的容量都会存在上限,哪怕天猫这种级别的网站也不例外。一旦用户流量过载,系统的吞吐量便会开始下降,RT线上升,最终导致系统容量被撑爆而出现雪崩效应。因此,架构师在对系统架构进行设计时,一定要考虑到系统整个链路的各个环节。上述介绍的五种手段,看似平淡无奇,但是组合在一起却能爆发出惊人的力量。根据自己所处的场景,尝试各个方式进行解决,找到最适合的。
word资料
相关推荐: