【问题标题】:Implement a rate-limit relating to the healthy servers count using haproxy使用 haproxy 实施与健康服务器计数相关的速率限制
【发布时间】:2019-06-11 20:12:51
【问题描述】:

我想使用 HAProxy 的粘性表实现一个速率限制系统。考虑到我有 100 台服务器,并且每台服务器限制为 10 个请求,ACL 将是

http-request track-sc0 int(1) table GlobalRequestsTracker
http-request deny deny_status 429 if { sc0_http_req_rate(GlobalRequestsTracker),div(100) gt 10 }

现在,如果我想根据运行状况良好的服务器数量进行动态处理,我需要根据 nbsrv 转换器替换硬编码的 100

http-request track-sc0 int(1) table GlobalRequestsTracker
http-request deny deny_status 429 if { sc0_http_req_rate(GlobalRequestsTracker),div(nbsrv(MyBackend)) gt 10 }

但我得到了错误:

error detected while parsing an 'http-request deny' condition : invalid args in converter 'div' : expects an integer or a variable name in ACL expression 'sc0_http_req_rate(GlobalRequestsTracker),div(nbsrv(MyBackend))'.

有没有办法在div 运算符中使用nbsrv 作为变量?

【问题讨论】:

    标签: haproxy rate-limiting


    【解决方案1】:

    HAProxy 据我所知,不允许嵌套函数调用。但是您可以将后端服务器的数量存储在一个变量中并在分区中使用它(参见 HAProxy 文档中的http-request set-var)。我没有测试过,也没有亲自使用过,但我猜它可能看起来像:

    frontend <fe>
        http-request track-sc0 int(1) table <tbl>
        http-request set-var(req.<var>) nbsrv(<be>)
        http-request deny deny_status <code> if { sc0_http_req_rate(<tbl>),div(req.<var>) gt <val> }
    

    查看 HAProxy documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      相关资源
      最近更新 更多