请求量大,资源不足
资源:带宽、Nginx、服务器资源(CPU、内存、存储、IO、吞吐量)、数据库连接数、数据库存储、Redis连接数、Redis存储
限流能够影响的:服务器资源、数据库连接数、数据库存储、Redis连接数、Redis存储
什么时候需要限流
流量激增,威胁系统安全,来不及或不需要进行物理扩容。
保护系统的三把利器:缓存、降级、限流
熔断是针对客户端来说的:限制并发数、限制响应时间、异常控制、服务隔离
限流的结果:
拒绝服务:服务器发生错误
延迟处理:不适合(适用于不需要实时返回结果的场景,目前没有这样的场景)
排队处理:不适合,但可以考虑实现(适用于瞬间的高峰请求处理,目前没有这样的场景)
降级(默认返回):不适合(登录态校验,返回成功或失败都是不合适的,都存在业务风险或安全风险)
基本算法:
计数器:限制并发数、简单的速率限制
漏通算法:限制处理速率
令牌桶:限制请求进入速率
参考:
常用限流方案的设计与实现
https://www.jianshu.com/p/8e09a7109591
架构设计之服务限流
https://www.jianshu.com/p/a00572b603db
聊聊高并发系统之限流特技一
https://www.jianshu.com/p/2596e559db5c
Guava官方文档-RateLimiter类
http://ifeve.com/guava-ratelimiter/
限流算法之漏桶算法、令牌桶算法
https://blog.csdn.net/tianyaleixiaowu/article/details/74942405
使用Spring的Aop拦截请求参数,请求头信息,响应结果,响应时间