HAProxy 通用计数器和棒表
HAProxy general purpose counters and stick tables
我正在尝试使用 HAProxy 进行速率限制。
我需要跟踪多个端点并单独限制它们。
到目前为止,我一直在使用通用计数器。但是,只有3个,sc0到sc2。
在文档中,它提到这些计数器上的所有操作都采用可选的 table 参数,但不清楚,那么,如果我可以在不同的 table 上跟踪不同的东西,但使用相同的计数器。
换句话说:3 个通用计数器的限制是全局的,还是每个粘性的 table?
如果在正确的 table 定义和跟踪说明之后,我会
sc1_inc_gpc0(table1)
(并且,在不同条件下)
sc1_inc_gpc0(table2)
然后有 2 个 acl 规则,例如
acl X sc1_get_gpc0(table1) gt 1
acl Y sc1_get_gpc0(table2) gt 1
这两个 acl
会独立工作,还是它们的所有效果都会跟踪同一个计数器?
感谢大家的帮助!
(如果您想知道:出于多种原因,目前我无法使用与 HAProxy 不同的解决方案来进行速率限制)
看源码测试后自答
- 是的,可以在不同的表上使用相同的计数器
- 此外,您还可以在构建时增加可用计数器的数量。默认为 3,但可以设置为 10。然后可以使用
sc_gpc0_rate(<ctr>[,<table>])
等函数的通用版本,将新计数器的索引作为第一个参数传递。
我正在尝试使用 HAProxy 进行速率限制。 我需要跟踪多个端点并单独限制它们。 到目前为止,我一直在使用通用计数器。但是,只有3个,sc0到sc2。
在文档中,它提到这些计数器上的所有操作都采用可选的 table 参数,但不清楚,那么,如果我可以在不同的 table 上跟踪不同的东西,但使用相同的计数器。
换句话说:3 个通用计数器的限制是全局的,还是每个粘性的 table?
如果在正确的 table 定义和跟踪说明之后,我会
sc1_inc_gpc0(table1)
(并且,在不同条件下)
sc1_inc_gpc0(table2)
然后有 2 个 acl 规则,例如
acl X sc1_get_gpc0(table1) gt 1
acl Y sc1_get_gpc0(table2) gt 1
这两个 acl
会独立工作,还是它们的所有效果都会跟踪同一个计数器?
感谢大家的帮助! (如果您想知道:出于多种原因,目前我无法使用与 HAProxy 不同的解决方案来进行速率限制)
看源码测试后自答
- 是的,可以在不同的表上使用相同的计数器
- 此外,您还可以在构建时增加可用计数器的数量。默认为 3,但可以设置为 10。然后可以使用
sc_gpc0_rate(<ctr>[,<table>])
等函数的通用版本,将新计数器的索引作为第一个参数传递。