全部产品
Search
文档中心

负载均衡:使用ALB扩展版实现Token限速

更新时间:Mar 14, 2026

ALB扩展版支持Token限速,可按用户、账户等维度限制指定时间窗口内的Token消耗量,防止资源滥用并控制大模型调用成本。

方案架构

扩展版ALB实例接收客户端请求,转发规则根据请求域名匹配请求。Token限速组件通过服务扩展关联转发规则,在转发动作前执行:根据HTTP标头中的限速标识符查询该标识符在指定时间窗口内的Token消耗量,超过阈值时直接返回429响应,阻止请求继续转发至后端AI服务;未超过时允许转发,并在收到响应后从响应报文中提取Token用量,更新该限速标识符的Token消耗统计。

  • 扩展版ALB实例:提供负载均衡和流量转发能力。

  • AI类型服务器组:对接后端大模型服务。

  • HTTPS监听:接收客户端请求。

  • 转发规则:根据域名条件匹配请求并转发。

  • 服务扩展:通过Token限速组件实现Token消耗统计和转发控制。

image

适用范围

  • 用户已获取ALB扩展版公测资格

  • 用户已在华北6(乌兰察布)地域创建一个专有网络VPC,分别在可用区A和可用区B创建一个交换机,且交换机已开通公网SNAT(用于AI服务器组调用公网大模型)。

  • 用户已开通阿里云百炼并获取了API Key。

  • 用户已注册自定义域名。本文计划将ALB实例部署于华北6(乌兰察布)地域,因此域名需要完成ICP备案

  • 用户已准备好与自定义域名匹配的服务器证书。非阿里云购买的证书需要上传到阿里云证书服务

操作步骤

1.创建扩展版ALB实例

  1. 登录ALB控制台,选择华北6(乌兰察布)地域,单击创建应用型负载均衡

  2. 在购买页完成以下配置,点击立即购买

    • 地域:选择华北6(乌兰察布)

    • 实例网络类型:选择公网

    • VPC可用区:选择目标VPC,勾选乌兰察布 可用区A乌兰察布 可用区B后选择对应交换机,并自动分配公网IP

    • 协议版本:选择IPv4

    • 功能版本(实例费):选择扩展版

  3. 确认订单页面确认实例配置详情,单击立即开通

2.创建AI类型服务器组

创建AI类型服务器组,对接阿里云百炼。

  1. 服务器组控制台,单击创建服务器组服务器组类型选择AI服务,输入名称如sgp-ai-qwen,单击创建

  2. 服务器组创建成功对话框单击添加后端服务器

  3. 添加AI服务对话框完成配置,单击确定

    • 大模型供应商:选择阿里云百炼

    • 服务地址:选择大模型供应商后自动填充。

    • API Key:填入阿里云百炼的API Key。

3.创建监听

  1. ALB控制台,单击目标实例ID进入实例详情页。在监听页签单击创建监听

  2. 配置监听步骤,选择监听协议HTTPS监听端口填写443,完成后单击下一步

  3. 配置SSL证书步骤,选择与自定义域名匹配的服务器证书,单击下一步

  4. 选择服务器组步骤,依次选择AI服务类型和服务器组sgp-ai-qwen,完成后单击下一步

    此处选择的服务器组将用于监听的默认规则,即在请求未命中其他转发规则时处理请求,用户可根据实际需求进行调整。
  5. 配置审核步骤,确认配置并单击提交

4.创建服务扩展

创建服务扩展并添加Token限速组件,从HTTP标头识别请求并应用限速策略。

  1. 服务扩展控制台,单击创建服务扩展。在服务扩展配置区域,输入服务扩展名称ext-token-rate-limit

  2. 扩展类型默认选择插件组件名称下拉选择Token限速。配置限速策略,完成后单击创建

    • 限速条件:选择按HTTP标头,输入参数x-account-id,匹配方式为任意匹配

      从HTTP请求头中提取x-account-id的值作为限速标识符,不同值的请求会分别统计Token消耗,每个值独立计算限速。x-account-id仅作示例,用户可根据实际需求使用其他HTTP标头字段名,或调整限速条件类型及匹配方式。
    • 限速范围:选择总计Token,每1分钟100Tokens。用户可根据实际需求调整。

    • 超时时间(毫秒)处理策略:本文保持默认值1000跳过,用户可按需调整。

当同一Token限速组件下存在多条限速策略,请求将从上到下逐条匹配,命中第一条限速策略后执行对应的限速范围,不再匹配后续策略。

5.配置转发规则

在监听上创建转发规则,添加域名匹配条件并关联服务扩展。

  1. ALB控制台,单击目标实例ID进入实例详情页。切换到监听页签后,单击目标监听ID进入监听详情页,再切换到转发规则页签。

  2. 单击插入新规则,完成以下配置后单击确定

    • 转发条件:选择域名精确匹配用于访问ALB实例的域名如ai.example.com

      用于生产时用户可按实际需求使用其他类型的转发条件。
    • 服务扩展(可选):默认使用已有服务扩展,下拉选择ext-token-rate-limit

    • 转发动作:选择转发至AI服务服务器组sgp-ai-qwen

转发规则创建后,HTTP标头中Host字段值为ai.example.com的请求会命中该规则,服务扩展根据HTTP标头x-account-id的值识别请求并进行限速检查,未超过阈值时转发至服务器组sgp-ai-qwen

6.设置域名解析

将自有域名通过CNAME解析指向ALB实例的DNS名称,客户端通过自有域名访问ALB。

本文以阿里云云解析DNS为例,对于非阿里云注册域名,需先将域名添加到云解析控制台

  1. ALB控制台,复制目标实例的DNS 名称

  2. 登录域名解析控制台,在目标域名的操作列单击解析设置。在解析设置页面单击添加记录

  3. 参考以下信息添加CNAME记录,完成后单击确定

    • 记录类型:选择CNAME

    • 主机记录:输入域名前缀如ai。假设用户自有根域名为example.com,则访问ALB的域名为ai.example.com,注意该域名需要和步骤五中设置的匹配域名保持一致。

    • 解析请求来源TTL时间:保持默认。

    • 记录值:输入ALB实例的DNS名称。

  4. 在弹出的解析变更确认对话框确认解析信息,单击确定

7.验证测试

使用curl命令发送请求验证Token限速功能,请求需满足以下条件:

  • 通过ai.example.com访问ALB:即HTTP标头中Host字段值为ai.example.com

  • 包含限速策略匹配标头x-account-id: <任意值>:限速策略用于识别请求,每个标头值独立计算限速,决定是否转发至后端AI服务sgp-ai-qwen

  • 符合OpenAI兼容协议:请求路径为/v1/completions/v1/chat/completions/v1/embeddings且整体格式符合规范。

以下测试命令中的域名ai.example.com为示例域名,实际测试时请替换为步骤六中配置的真实域名,需确保域名解析已生效

正常请求测试

发送单次请求,验证服务正常工作:

curl -v \
    -H "x-account-id: id" \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen-turbo",
        "messages": [
            {
                "role": "user", 
                "content": "你是谁"
            }
        ]
    }' \
    https://ai.example.com/v1/chat/completions

请求成功时,返回HTTP 200状态码和AI服务响应:

{
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "你好!我是千问,是阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型..."
            },
            "finish_reason": "stop",
            "index": 0
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 14,
        "completion_tokens": 53,
        "total_tokens": 67
    },
    "model": "qwen-turbo"
}

响应中的usage.total_tokens字段显示本次请求消耗的Token数量。

限速触发测试

快速发送多个请求,累计Token消耗超过限速阈值(100 Tokens/分钟),验证限速功能:

for i in {1..3}; do
    curl -v \
        -H "x-account-id: 12345" \
        -H "Content-Type: application/json" \
        -d '{
            "model": "qwen-turbo",
            "messages": [
                {
                    "role": "user", 
                    "content": "你是谁"
                }
            ]
        }' \
        https://ai.example.com/v1/chat/completions
    sleep 2
done

当累计Token消耗超过100时,后续请求返回HTTP 429状态码,表明限速策略已生效。

仅当时间窗口内的Token配额消耗完成后的下一条请求才会被拒绝,因此最后一条成功的请求可能会超额使用Token。
流式输出场景下,Token 用量在最后一个数据块返回时计算。即使请求消耗的 Token 超出当前窗口配额,响应仍会完整返回,不会中途截断;限流仅作用于后续请求。

触发限速后的响应示例如下:

HTTP响应头:

HTTP/2 429 
x-tokenratelimit-reset: 52
content-length: 17
content-type: text/plain
date: Wed, 21 Jan 2026 07:59:38 GMT

HTTP响应体:

Too Many Requests

响应说明:

  • HTTP状态码429,表示请求因限速被拒绝。

  • x-tokenratelimit-reset响应头:限速计数器重置的剩余秒数(示例为52秒后重置)。限速计数器重置后,请求可恢复正常处理。

  • 响应体:纯文本格式的Too Many Requests提示信息。

更多信息

计费说明

  • ALB扩展版:目前处于公测阶段,用户可免费体验。

  • 公网访问费用:公网NAT网关收取实例费和容量单位CU费。NAT网关和扩展版ALB实例绑定的EIP有独立的计费规则,费用由EIP收取。

  • 域名和DNS解析费用:除了需要支付域名供应商的域名费用外,在阿里云配置DNS解析需要支付公网权威解析费用

  • 证书费用:从阿里云购买证书或将证书上传至阿里云,需要支付服务器证书费用

  • 百炼模型费用:调用百炼大模型API需要支付费用。

ALB扩展版支持的地域

区域

地域

可用区

中国

华北6(乌兰察布)

可用区A、可用区B、可用区C

华东1(杭州)

可用区J、可用区K

亚太

新加坡

可用区A、可用区B、可用区C

欧洲与美洲

德国(法兰克福)

可用区A、可用区B

使用建议

  • 限速阈值设置:建议先通过监控观察正常的Token消耗模式,再设置略高于正常值的限速阈值,避免限速策略过于激进阻塞正常请求。

  • 时间窗口选择:

    • 对于高频调用场景,建议使用较短的时间窗口实现更精确的控制;对于低频但高消耗场景,可使用较长的时间窗口避免单次请求被误限。

    • 基于响应的限速受到后端响应时长的影响,需设置至少大于单次模型推理时长的时间窗口。

常见问题

如何处理未命中限速策略的请求

如请求不包含x-account-id: <任意值>标头,即请求命中了转发规则但未命中限速策略,将直接进行转发动作,不进行限速

<任意值>表示每个不同的标头值独立计算限速配额。

已配置Token限速,但请求未触发限速

可参考以下思路进行排查:

  1. 检查转发规则:转发条件与请求匹配,转发规则具备足够高的优先级且已关联服务扩展。

  2. 检查服务扩展:正确添加了Token限速组件,限速条件匹配请求且限速范围设置合理。

  3. 检查请求格式:请求同时命中转发条件和限速条件。

  4. 验证Token消耗:测试并观察响应中的usage.total_tokens字段,注意限速策略统计的是时间窗口内的累计Token消耗,单次请求可能未达到阈值。

若模型推理时长大于限速的时间窗口,则无法完成限速。