实现目标
实现spring-boot插件话限流轻量型工具,用户可
- 自定义配置同步规则(无论zk,applo等等,可以自己定义)
- 自定义超限策略
- 自定义检查规则
- 单台限流和集群限流支持
- 支持后续的监控扩展
为什么要限流
-
每台服务器都有自己的处理能力上限,不论TPS还是QPS,超过上限后服务可能将进入不可控状态,所以这时候对于每台服务的处理上限我们在入口就要做好防护措施,防止服务不可用,甚至造成雪崩情况发生.
-
集群的限流使用,我们经常使用到依赖场景,比如底层打款接口的tps为90,如果我们不做限流,通过我们请求打款会造成超限的各种不可控的异常问题.
常见算法了解
-
令牌桶:
- 会有令牌生产者按一定频次向桶中放令牌
-
请求线程每次取一个令牌后才可访问
image.png
-
漏斗
- 漏斗设置了最大访问阈值,超过阈值将会溢出
-
漏斗限制了出口大小,控制了最大并发请求数,超出请求可能会阻塞等待
image.png
- 计数器算法(信号量限制)
- 计数器算法,控制了单位时间内最大访问数量
- 不进行流速控制
XLimitor实现架构
1.核心实现功能点:
- 分布式redis实现限流,对应等待时间的逻辑设计
- 单台服务限流通过RateLimiter配置
- 监听器动态更新规则配置,可用户自己实现监听逻辑规则
- 超限策略自定义实现
- 监控扩展
- 动态插拔,不限位置,灵活使用(比如说网关系统可以插入拦截器,service层限流aop等,或者代码植入限流器配置)
- 降级相关策略支持
2. 架构图:
X-Limitor.png说明:
1.dispatch-center:调度中心,负责所有请求拦截规则管理、限流器规则管理等等工作
-
irule:拦截规则定义,如根据uri、ip、自定义商编等等规则配置
-
limitor:限流器组件,实现集群限流、单台限流、阻塞配置、容错降级等逻辑
-
exchange-map:交换处理器,绑定irule和limitor之间关系
-
refresher:刷新者,用于对外提供更新api
-
AccessPoint:接入适配,提供常用接入场景
-
monitor-extend:对于性能监控扩展模块
-
最上的监听自定义扩展点是提供对外业务自定义扩展功能
3. 源代码
建设中,后补.....
网友评论