限流的方式
-
限制瞬时并发数
比如在入口层(nginx添加nginx_http_limit_conn_module)来限制同一个IP来源的连接数,防止恶意攻击访问的情况 -
限制总并发数
通过配置数据库连接池、线程池大小来约束总并发数 -
限制时间窗口内的平均速率
在接口层面,通过限制访问速率来控制接口的并发请求 -
其它方式
限制远程接口的调用速率、限制MQ的消费速率
常用的限流算法
-
滑动窗口算法
一种常见的流量控制技术。用来改善吞吐量的技术
-
令牌桶
令牌桶属于控制速率类型的限流方法
-
漏桶
漏桶算法能强行限制数据的传输速率
-
计数器
最简单的一种,通过控制时间段内的请求次数
代码中限流
为支付系统限流
-
用到的框架
-
令牌桶的测试案例
-
比较漏桶和令牌桶的差异
分布式系统中通过redis限流的解决方案
-
流控架构
-
lua脚本
- 复杂实现
- 简单实现
- 复杂实现
-
客户端对令牌桶的使用
-
客户端对redis的操作
-
上面设计详情请见
https://blog.csdn.net/sunlihuo/article/details/79700225 redis+lua 实现分布式令牌桶,高并发限流
分布式限流的技术原理
-
分布式限流最关键的是要将限流服务做成原子化,而解决方案可以使用redis+lua或者nginx+lua技术进行实现,通过这两种技术可以实现的高并发和高性能。
-
redis+lua实现中的lua脚本
-
使用Nginx+Lua实现的Lua脚本
-
-
技术本质
无论是 redis+lua 还是 nginx+lua 本质都是通过为key设置过期时间的方式实现的 -
详情请见
https://www.cnblogs.com/xuwc/p/9123078.html 高并发系统限流-漏桶算法和令牌桶算法