全部產品
Search
文件中心

Container Compute Service:基於產生式AI請求的Token數進行全域限流

更新時間:Jul 28, 2025

Gateway with Inference Extension支援對產生式AI請求實施精細化的限流策略。通過對每個請求中輸入和輸出的Token數進行統計,然後按照預設的限流規則對請求進行允許存取或拒絕。本文檔介紹如何使用Gateway with Inference Extension對產生式AI請求實施基於Token數的全域限流策略。

重要

本文內容依賴1.4.0及以上版本Gateway with Inference Extension

功能說明

基於Token數的全域限流策略依賴於Gateway with Inference Extension的兩項基礎能力:

  • 全域限流:全域限流功能基於令牌桶演算法。預設情況下,每個HTTP請求會消耗一個令牌。在此基礎上,支援使用者自訂每個請求消耗的令牌數。

  • 產生式AI可觀測外掛程式:該外掛程式可以從產生式AI應用的響應中讀取Token數量,並作為限流依據。

令牌桶演算法

系統以固定速率產生令牌(Tokens),並加入到令牌桶中,直到容量上限。服務間的請求需要消耗Tokens才能發送成功,如果桶中有足夠的Tokens,請求發送時將消耗Token;如果沒有足夠的Tokens,請求可能會被排隊或丟棄。此演算法可以保證資料轉送的平均速率不會超過Token的產生速率,同時又能應對一定程度的突發流量。

前提條件

部署限流規則

本樣本將示範為mock-vllm應用建立限流規則,限制每個使用者每小時最多消耗300個Token。

  1. 建立token-ratelimit-test.yaml。

    apiVersion: gateway.envoyproxy.io/v1alpha1
    kind: BackendTrafficPolicy 
    metadata:
      name: token-ratelimit-test
    spec:
      targetRefs:
      - group: gateway.networking.k8s.io
        kind: HTTPRoute
        name: mock-route
      rateLimit:
        type: Global
        global:
          rules:
          - clientSelectors:
            - headers:
              - name: x-user-id
                type: Distinct
            limit:
              requests: 300
              unit: Hour
            cost:
              response:
                from: Metadata
                metadata:
                # ACK Gateway的產生式AI可觀測外掛程式設定的指標
                  namespace: FILTER_STATE
                  key: wasm.gen_ai.completion.tokens
  2. 部署限流規則。

    kubectl apply -f token-ratelimit-test.yaml

發起測試

  1. 擷取網關IP。

    export GATEWAY_ADDRESS=$(kubectl get gateway/mock-gateway -o jsonpath='{.status.addresses[0].value}')
    echo ${GATEWAY_ADDRESS}
  2. 從sleep應用發起測試請求,連續訪問5次。

    kubectl exec deployment/sleep -it -- curl -X POST ${GATEWAY_ADDRESS}/v1/chat/completions -H 'Content-Type: application/json' -H "host: example.com" -d '{
        "model": "mock",
        "max_completion_tokens": 100,
        "temperature": 0,
        "messages": [
          {
            "role": "user",
            "content": "introduce yourself"
          }
        ]
    }' -v -H "x-user-id: one" |grep "^< HTTP"

    預期輸出:

    < HTTP/1.1 200 OK
    < HTTP/1.1 200 OK
    < HTTP/1.1 200 OK
    < HTTP/1.1 200 OK
    < HTTP/1.1 429 Too Many Requests

    可以看到,前4次請求均返回200響應碼,第5次請求返回429

    這是由於mock-vllm應用會為每個請求返回一個固定長度的響應,響應的Token數為76。 訪問3次後,一共消耗了228個Token,此時並未超出限額,因此第4次訪問依舊會成功。 第4次訪問完成後,一共消耗了304個Token,此時超出了限額。第5次訪問返回429 Too Many Requests

相關文檔

除了上述的“分使用者Token限流”外,您可以通過閱讀以下文檔,來實現更加豐富的限流策略: