ALB擴充版支援Token限速,可按使用者、賬戶等維度限制指定時間視窗內的Token消耗量,防止資源濫用並控制大模型調用成本。
方案架構
擴充版ALB執行個體接收用戶端請求,轉寄規則根據請求網域名稱匹配請求。Token限速組件通過服務擴充關聯轉寄規則,在轉寄動作前執行:根據HTTP標題中的限速標識符查詢該標識符在指定時間視窗內的Token消耗量,超過閾值時直接返回429響應,阻止請求繼續轉寄至後端AI服務;未超過時允許轉寄,並在收到響應後從響應報文中提取Token用量,更新該限速標識符的Token消耗統計。
-
擴充版ALB執行個體:提供負載平衡和流量轉寄能力。
-
AI類型伺服器組:對接後端大模型服務。
-
HTTPS監聽:接收用戶端請求。
-
轉寄規則:根據網域名稱條件匹配請求並轉寄。
-
服務擴充:通過Token限速組件實現Token消耗統計和轉寄控制。
適用範圍
-
使用者已擷取ALB擴充版公測資格。
-
使用者已在華北6(烏蘭察布)地區建立一個Virtual Private Cloud,分別在可用性區域A和可用性區域B建立一個交換器,且交換器已開通公網SNAT(用於AI伺服器組調用公網大模型)。
-
使用者已開通阿里雲百鍊並擷取了API Key。
-
使用者已準備好與自訂網域名匹配的伺服器憑證。非阿里雲購買的認證需要上傳到阿里雲認證服務。
操作步驟
1.建立擴充版ALB執行個體
-
登入ALB控制台,選擇華北6(烏蘭察布)地區,單擊建立應用型負載平衡。
-
在購買頁完成以下配置,點擊立即購買。
-
地區:選擇華北6(烏蘭察布)。
-
執行個體網路類型:選擇公網。
-
VPC和可用性區域:選擇目標VPC,勾選烏蘭察布 可用性區域A和烏蘭察布 可用性區域B後選擇對應交換器,並自動分配公網IP。
-
協議版本:選擇IPv4。
-
功能版本(執行個體費):選擇擴充版。
-
-
在確認訂單頁面確認執行個體配置詳情,單擊立即開通。
2.建立AI類型伺服器組
建立AI類型伺服器組,對接阿里雲百鍊。
-
在伺服器組控制台,單擊建立伺服器組,伺服器群組類型選擇AI服務,輸入名稱如
sgp-ai-qwen,單擊建立。 -
在伺服器組建立成功對話方塊單擊添加後端伺服器。
-
在添加AI服務對話方塊完成配置,單擊確定。
-
大模型供應商:選擇阿里雲百鍊。
-
服務地址:選擇大模型供應商後自動填滿。
-
API Key:填入阿里雲百鍊的API Key。
-
3.建立監聽
-
在ALB控制台,單擊目標執行個體ID進入執行個體詳情頁。在監聽頁簽單擊建立監聽。
-
在配置監聽步驟,選擇監聽協議為HTTPS,監聽通信埠填寫
443,完成後單擊下一步。 -
在配置SSL認證步驟,選擇與自訂網域名匹配的伺服器憑證,單擊下一步。
-
在選擇伺服器組步驟,依次選擇AI服務類型和伺服器組
sgp-ai-qwen,完成後單擊下一步。此處選擇的伺服器組將用於監聽的預設規則,即在請求未命中其他轉寄規則時處理請求,使用者可根據實際需求進行調整。
-
在組態稽核步驟,確認配置並單擊提交。
4.建立服務擴充
建立服務擴充並添加Token限速組件,從HTTP標題識別請求並應用限速策略。
-
在服務擴充控制台,單擊建立服務擴充。在服務擴充配置地區,輸入服務副檔名稱如
ext-token-rate-limit。 -
擴充類型預設選擇外掛程式,組件名稱下拉選擇Token限速。配置限速策略,完成後單擊建立。
-
限速條件:選擇按HTTP標題,輸入參數
x-account-id,匹配方式為任意匹配。從HTTP要求標頭中提取
x-account-id的值作為限速標識符,不同值的請求會分別統計Token消耗,每個值獨立計算限速。x-account-id僅作樣本,使用者可根據實際需求使用其他HTTP標題欄位名,或調整限速條件類型及匹配方式。 -
限速範圍:選擇總計Token,每
1分鐘100Tokens。使用者可根據實際需求調整。 -
逾時時間(毫秒)和處理策略:本文保持預設值
1000和跳過,使用者可按需調整。
-
當同一Token限速組件下存在多條限速策略,請求將從上到下逐條匹配,命中第一條限速策略後執行對應的限速範圍,不再匹配後續策略。
5.配置轉寄規則
在監聽上建立轉寄規則,添加網域名稱匹配條件並關聯服務擴充。
-
在ALB控制台,單擊目標執行個體ID進入執行個體詳情頁。切換到監聽頁簽後,單擊目標監聽ID進入監聽詳情頁,再切換到轉寄規則頁簽。
-
單擊插入新規則,完成以下配置後單擊確定。
-
轉寄條件:選擇網域名稱,精確匹配用於訪問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。
本文以阿里雲Alibaba Cloud DNS為例,對於非阿里雲註冊網域名稱,需先將網域名稱添加到雲解析控制台。
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擴充版支援的地區
地區 | 地區 | 可用性區域 |
中國 | 華北6(烏蘭察布) | 可用性區域A、可用性區域B、可用性區域C |
華東1(杭州) | 可用性區域J、可用性區域K | |
亞太地區 | 新加坡 | 可用性區域A、可用性區域B、可用性區域C |
歐美地區 | 德國(法蘭克福) | 可用性區域A、可用性區域B |
使用建議
-
限速閾值設定:建議先通過監控觀察正常的Token消耗模式,再設定略高於正常值的限速閾值,避免限速策略過於激進阻塞正常請求。
-
時間視窗選擇:
-
對於高頻調用情境,建議使用較短的時間視窗實現更精確的控制;對於低頻但高消耗情境,可使用較長的時間視窗避免單次請求被誤限。
-
基於響應的限速受到後端響應時間長度的影響,需設定至少大於單次模型推理時間長度的時間視窗。
-
常見問題
如何處理未命中限速策略的請求
如請求不包含x-account-id: <任意值>標題,即請求命中了轉寄規則但未命中限速策略,將直接進行轉寄動作,不進行限速。
<任意值>表示每個不同的標題值獨立計算限速配額。
已配置Token限速,但請求未觸發限速
可參考以下思路進行排查:
-
檢查轉寄規則:轉寄條件與請求匹配,轉寄規則具備足夠高的優先順序且已關聯服務擴充。
-
檢查服務擴充:正確添加了Token限速組件,限速條件匹配請求且限速範圍設定合理。
-
檢查請求格式:請求同時命中轉寄條件和限速條件。
-
驗證Token消耗:測試並觀察響應中的
usage.total_tokens欄位,注意限速策略統計的是時間視窗內的累計Token消耗,單次請求可能未達到閾值。
若模型推理時間長度大於限速的時間視窗,則無法完成限速。