断路和并发控制
目前实现了两个默认插件 SQL 断路
和 SQL 并发控制
。
SQL 断路
禁止运行匹配正则的语句。
示例配置
如:不允许执行 SELECT *
[[proxy.config.plugin.circuit_break]]
regex = "SELECT \\*"
注:可以有多个规则
SQL 限流
限流规则表示在 duration
秒内并发运行匹配正则的 SQL 语句只能有 max_concurrency
条,
示例配置
如:不允许100秒内并发执行多于1条 SELECT *
[[proxy.config.plugin.concurrency_control]]
regex = "SELECT \\*"
max_concurrency = 1
duration = 100
注:可以有多个规则
设计说明
目前运行中间件的方式参考了 Tower-rs ,可以很好的满足未来扩展的需求。
其中有两个概念:
Layer: 是对
Service
的包装,每个Service
可以有多个不同的中间件。
Service: 指
Pisanix
内部允许执行中间件的服务或者是某个功能函数,可以运行一些自定义的逻辑,如Metrics
收集。
实现伪代码。
注意
- 限流规则表示在
duration
秒内并发运行匹配正则的 sql 语句只能有max_concurrency
条,从第一次匹配到开始计时,如果超过duration
时间,则限流失效,重新开始下一次匹配。 - 目前由于不能动态生效限流规则,因此规则的生效时间是从第一次匹配到的时间开始,持续
duration
时间,超过后继续下次循环,没有失效情况,在未来支持动态生效后,规则失效有两种情况:duration
的时间将从获取到开启动作的时间开始,持续duration
时间,规则失效。- 等到获取到关闭动作时,规则失效。