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>]) 等函数的通用版本,将新计数器的索引作为第一个参数传递。