DBPack 支持对 SQL 请求设置限流熔断规则。
DBPack 限流熔断功能通过 filter 实现。要设置限流规则,首先要定义 RateLimitFilter
:
- name: rateLimiterFilter
kind: RateLimiterFilter
conf:
# 1000 requests per second
insert_limit: 1000
# 1000 requests per second
update_limit: 1000
# 1000 requests per second
delete_limit: 1000
# 1000 requests per second
select_limit: 1000
支持对增删改查请求单独限流。限流策略以秒为单位,即允许每秒执行多少次请求(RPS)。如果设置为 0 表示不限流。上面的例子表示限制为每秒执行 1000 次请求。
定义好 RateLimitFilter
后,将 filter 的名字加入到 Executor 的 filter list 中:
executors:
- name: redirect
mode: sdb
config:
data_source_ref: employees
filters:
- cryptoFilter
# 限流 filter
- rateLimiterFilter
这样就配置好限流功能了。
配置 DBPack 的熔断功能,需要先定义 CircuitBreakerFilter
:
- name: circuitBreakerFilter
kind: CircuitBreakerFilter
conf:
# error 次数
error_threshold: 20
# success 次数
success_threshold: 5
# seconds
timeout: 60
上面的配置表示:
- 60 秒内累计错误次数达到 20 次,熔断器状态为
Open
打开状态,此时请求不能执行。 - 熔断器打开 60 秒后,熔断器状态变为
HalfOpen
半开状态,此时可以执行请求。 - 熔断器状态变为
HalfOpen
半开状态后,执行的第一个请求,如果执行失败,熔断器再次变为Open
打开状态;如果连续 5 次请求执行成功,则关闭熔断器,熔断器状态变为Closed
。
定义好 CircuitBreakerFilter
后,将 filter 的名字加入到 Executor 的 filter list 中:
executors:
- name: redirect
mode: sdb
config:
data_source_ref: employees
filters:
- cryptoFilter
# 熔断 filter
- circuitBreakerFilter
这样就配置好了熔断功能。