You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Golang调用Dataplane API为HAProxy添加新服务器的限流与队列超时问题

HAProxy 后端队列超时与滑动窗口限流实现

队列超时设置及默认值

HAProxy 中控制请求队列超时的指令是 timeout queue,可在全局、defaults、backend 或单个 server 级别配置:

  • 若未在 server 层级单独指定,会自动继承 backend 或 defaults 的配置
  • 全局默认超时时间为 5000ms(5秒)

通过 DataplaneAPI 添加服务器时,可在请求体中为目标 server 指定 timeout_queue 参数(如 "10s" 表示10秒),实现单独配置。

基于请求数的滑动窗口限流(Stick Table 实现)

滑动窗口限流需结合 stick table 和请求规则实现,以下是具体配置逻辑及 Golang 调用示例:

1. 配置 Stick Table(Backend 级别)

创建基于客户端IP的stick table,维护1分钟滑动窗口内的请求计数:

stick-table type ip size 100k expire 1m store http_req_rate(1m)
  • size:设置表容量,最多存储100000个IP条目
  • expire:滑动窗口时长,此处设为1分钟
  • store http_req_rate(1m):记录每个IP在1分钟内的请求速率

2. 添加限流规则(Backend 级别)

在backend中添加规则,当请求速率超过阈值时直接拒绝:

http-request deny if { src_get_rate(http_req_rate) gt 60 }

逻辑为:每分钟单个IP最多允许60次请求,超出则拒绝。

3. Golang 调用 DataplaneAPI 配置流程

先更新目标backend的stick table和限流规则,再添加服务器:

// 更新Backend配置的请求体
backendUpdatePayload := map[string]interface{}{
    "stick_table": []map[string]interface{}{
        {
            "type":   "ip",
            "size":   "100k",
            "expire": "1m",
            "store":  []string{"http_req_rate(1m)"},
        },
    },
    "http_request_rules": []map[string]interface{}{
        {
            "action": "deny",
            "condition": map[string]interface{}{
                "expr": "{ src_get_rate(http_req_rate) gt 60 }",
            },
        },
    },
}

// 调用DataplaneAPI的Backend更新接口(PUT /services/haproxy/configuration/backends/{name})
// 此处省略HTTP请求代码,可使用net/http或第三方库实现

// 添加服务器的请求体
serverAddPayload := map[string]interface{}{
    "name":             "new-backend-server",
    "address":          "192.168.1.10",
    "port":             80,
    "max_connections":  100,
    "maxqueue":         50,
    "timeout_queue":    "10s", // 为该服务器单独设置队列超时
}

// 调用DataplaneAPI添加服务器的接口(POST /services/haproxy/configuration/servers)

说明:http_req_rate 会自动维护滑动窗口的计数,无需手动重置,HAProxy会实时更新每个IP的请求速率。

内容的提问来源于stack exchange,提问作者Satyam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:30:41