WSO2 APIM 4.0.0集群环境下Maximum Backend Throughput不生效问题
问题原因分析
WSO2 APIM 4.0.0中,Subscription Level Rate Limiting由Traffic Manager(TM)节点统一协调计数与限流决策,天然支持集群分布式生效;但Maximum Backend Throughput的限流逻辑默认在网关本地维护计数器,即便集群配置正确,若未指定分布式计数存储,每个网关节点会独立统计自身流量,最终导致后端接收总流量超出预期10倍。
解决步骤
要让后端吞吐量限制在集群中全局生效,需配置网关使用分布式计数存储,具体操作如下:
1. 选择分布式计数存储类型
支持JDBC(共享数据库)或Redis两种主流方案,可根据集群环境选择:
方案一:JDBC共享数据库
在每个网关节点的<APIM_GW_HOME>/conf/deployment.toml中添加配置:
[apim.throttling] enable_data_publishing = true [apim.throttling.jdbc] enabled = true datasource = "WSO2AM_DB"
确保所有网关节点连接同一个WSO2AM_DB实例(需为MySQL、PostgreSQL等支持多节点并发读写的数据库)。
方案二:Redis分布式缓存
在每个网关节点的<APIM_GW_HOME>/conf/deployment.toml中添加配置:
[apim.throttling] enable_data_publishing = true [apim.throttling.redis] enabled = true host = "REDIS_HOST" port = REDIS_PORT password = "REDIS_PASSWORD" # 有密码时添加 database = 0 # 可选,指定Redis数据库编号
确保所有网关节点连接同一个Redis集群/实例。
2. 验证配置生效
- 重启所有网关节点
- 对目标API发起并发流量,检查后端接收总流量是否符合配置的吞吐量限制
- 查看网关日志
<APIM_GW_HOME>/logs/wso2carbon.log,确认分布式计数存储的连接成功日志
额外注意事项
- 确保Traffic Manager节点的
<APIM_TM_HOME>/conf/deployment.toml已开启流量数据接收:[apim.throttling] enable_data_receiving = true - JDBC方案需保证数据库性能足够支撑多网关节点的并发计数写入,避免成为瓶颈
- Redis方案建议开启持久化,防止重启后计数丢失
内容的提问来源于stack exchange,提问作者Sergei Tarasov
相关产品推荐
相关产品推荐

