概述
高并发场景下,爆炸性大量的对数据库的请求操作不仅会占用十分高比例的网络带宽,导致其他应用对数据库的请求受阻,还会导致从库与主库的延迟大大增加,降低了从库数据的不准确率,也降低了缓存的命中率。
如下图:
限流方式
一般开发高并发系统常见的限流有:限制总并发数、限制瞬时并发数、限制时间窗口内的平均速率;其他还有如限制远程接口调用速率、限制MQ的消费速率。另外还可以根据网络连接数、网络流量、CPU或内存负载等来限流。以减少高并发对系统的影响,最终做到有损服务而不是不服务;限流需要评估好,不可乱用,否则会正常流量出现一些奇怪的问题而导致用户抱怨。 参考文章
其中限制总并发数:如数据库连接池、线程池;
限制瞬时并发数:如nginx的limit_conn模块,用来限制瞬时并发连接数;
限制时间窗口内的平均速率:如Guava的RateLimiter、nginx的limit_req模块,限制每秒的平均速率;
限流算法
- 计数器法
- 滑动窗口
- 漏桶算法
- 令牌桶算法 <