全部產品
Search
文件中心

Function Compute:會話親和通用限制及原理說明

更新時間:Dec 31, 2025

會話親和(Session Affinity) 是Function Compute提供的一種進階路由機制,用於確保屬於同一會話的請求能夠被持續路由到同一個函數執行個體上。通過維持狀態一致性,該功能特別適用於需要保持上下文、實現長周期任務處理或支援即時互動的應用情境。

會話親和類型

  • Cookie親和:通過HTTP請求中的Cookie欄位值識別會話

  • HeaderField親和:通過HTTP要求標頭中的指定欄位值識別會話

  • MCP SSE親和:通過MCP SSE協議中的SessionId識別會話

  • MCP Streamable HTTP親和:通過HTTP回應標頭Mcp-Session-Id欄位識別會話

通用限制

  • 如果您已開啟會話隔離,會話親和功能將自動開啟且不可關閉,同時選擇適合的親和類型。

  • 如果您已開啟請求隔離,會話親和功能將不可用。

  • 非同步請求不支援會話能力(包括會話親和和會話隔離)。

  • 如果選擇內建運行時,單一實例並發度限制為1,此時單一實例並發 Session 數也只能限制為1。

  • 單一實例並發 Session 數不可超出單一實例最大並發請求數。

各親和類型專屬的限制

1. Cookie親和專屬限制

  • 僅支援服務端植入 Cookie 模式
    用戶端首次訪問時,Function Compute自動在響應中通過 Set-Cookie Header 植入 Cookie。用戶端需解析並儲存該 Cookie,並在後續請求中攜帶。

  • 支援 SessionAPI 管理
    可通過 SessionAPI 對會話進行生命週期管理(如建立、更新、查詢、終止等)。

2. HeaderField親和專屬限制

  • 會話 ID 來源

    • 若用戶端在預定義 Header 中傳入會話 ID,則以該值作為會話標識。

    • 若未傳入,服務端將產生全域唯一會話 ID,通過CreateFunction預定義的Header欄位,通過響應 Header 返回。

  • Header 欄位定義
    在建立函數時,於 SessionAffinityConfig 中指定用於傳輸會話 ID 的 Header 欄位名。

  • 支援 SessionAPI 管理:
    可通過 SessionAPI 實現對會話的監控與控制。

3. MCP Streamable HTTP親和專屬限制

  • 協議版本要求:
    支援 MCP 協議版本 2025-03-26 和 2025-06-18。用戶端與函數必須遵循對應版本的 Transport 層規範。

  • 相容性說明:若函數啟用了 MCP Streamable HTTP 親和,則 禁止使用 MCP HTTP with SSE 調用,因會話管理機制不相容,導致調用失敗。

  • 訪問方式限制:
    僅支援通過 HTTP 觸發器 或 自訂網域名 訪問。

  • HTTP 觸發器配置要求:
    必須至少支援 GETPOST 和 DELETE 方法。

    DELETE 方法必要性:
    用戶端可通過 DELETE 請求主動結束會話。Function Compute將回收該 Session 的資源(包括執行個體並發配額)。若未啟用 DELETE 方法,系統將拒絕請求,導致 Session 無法正常釋放。
  • 不支援 SessionAPI 管理。

4. MCP SSE親和專屬限制

  • 運行時限制:

    • 使用內建運行時 → 不支援 MCP SSE 親和。

    • 使用 MCP 運行時 → 僅支援 MCP 親和(含 SSE)。

    • 其他運行時無此限制。

  • 用戶端要求:
    必須使用 MCP 官方標準 Client 或 SDK 發起請求,否則無法建立有效親和串連。

  • 會話生命週期:
    最大生命週期等於函數的最大逾時時間。超出後,服務端中斷連線;重新串連將產生新會話 ID,不再保證路由至原執行個體。

  • 訪問方式限制:
    僅支援通過 HTTP 觸發器 或 自訂網域名 訪問。

  • 要求節流:

    • 首次 SSE 請求暫不支援攜帶 query 參數。

    • 單一實例最大並發數為 200。

  • 不支援 SessionAPI 管理。

核心原理

1. 核心流程

用戶端發起請求識別/產生 Session ID綁定到可用執行個體後續請求路由至該執行個體

2. 資源模型(統一架構)

  • 每個 Session 佔用 1 個 “Session 並發配額”

  • 每個 請求(包括 POST、GET、Message)佔用 1 個 “請求並發配額”

  • 單一實例總並發額度:200(不可調)

  • 多個 Session 共用這 200 個並發額度

公式表達:

TotalQuota = Σ(每個 Session 的並發消耗) ≤ 200

3. 生命週期管理

階段

觸發條件

行為

建立

首次請求未攜帶有效 Session ID

產生唯一 ID 並建立綁定

首次請求攜帶有效SessionID

服務端將此SessionID和執行個體建立綁定關係。

活躍

接收請求

更新最後活躍時間

空閑逾時

超過 Session Idle 時間長度(預設 1800 秒)

自動銷毀 Session

到期

超過 單個 Session 生命週期(預設 21600 秒)

自動銷毀 Session

手動終止

發送 DELETE 請求(MCP Streamable)或中斷連線(SSE)

主動釋放資源

並發管理機制

並發參數說明

參數類型

含義

是否可調

限制

消耗規則

並發回收機制

單一實例最大並發度

單一實例最多同時處理的最大並發請求數

不可調

200

每個請求/長串連占 1 個

請求完成非同步釋放

單一實例並發 Session 數

單一實例在同一個時間內能同時處理的最大 Session 數

可調

[1,200]

每個 Session 占 1 個

根據親和類型不同而定

單會話佔用並發資源模型

類型

公式

說明

Cookie / HeaderField 親和 / MCP Streamable HTTP 親和

TotalQuota(s) = N (N ≥ 1)

僅包含同步請求,每條請求占 1 個並發

MCP SSE 親和

TotalQuota(s) = 1 + N (N ≥ 1)

包含 1 個 SSE 長串連 + N 個 Message 請求

單一實例並發Session數配置建議:

  1. 安全隔離情境:建議配置1,單個Session獨享計算資源,安全可靠。

  2. 多租共用情境:可配區間(1,200],多Session共用單一實例資源,提升資源使用率

執行個體調度規則詳細說明

情境1:Session 和執行個體綁定規則及擴容機制

假設函數配置單一實例並發 Session 數 = 2

  1. Client1 請求 → 分配 Instance1,佔用 1 個 Session 配額

  2. Client2 請求 → Scheduler 判斷 Instance1 仍有 1 個空閑 Session → 成功綁定

  3. Client3 請求 → Instance1 已滿 → 建立新執行個體 Instance2 → 綁定成功

關鍵點說明

  • 系統在調度層會儘力優先複用已有執行個體,但不完全保證

  • 僅當所有執行個體均滿時才會擴容

  • 實現了動態負載平衡與Auto Scaling

情境2:單一實例下多 Session 共用資源限流機制

假設函數配置單一實例並發 Session 數 = 2

  1. Client1 請求 → 佔用 1 個 Session + 1 個請求並發度

  2. Client2 請求 → 佔用 1 個 Session + 1 個請求並發度

  3. 前兩個請求未結束時,兩者同時並發再次發送 198 個請求 → 總共消耗 200 個請求並發度

  4. 第 199 個請求 → 超出 200 上限 → 返回 `429 Too Many Requests`

關鍵點說明:

  • 單一實例最大並發度固定為 200,不可調

  • 多個 Session 共用此額度

  • 當並發度耗盡時,系統拒絕新請求

錯誤處理機制

情境

系統行為

狀態代碼

用戶端應對策略

單一實例並發 Session 數耗盡

存量執行個體未超地區最大執行個體數上限,系統自動擴容新執行個體綁定 Session 請求

200

-

存量執行個體達到地區最大執行個體數上限

系統限流拒絕請求

429

1. 採用退避重試策略
2. 通過配額中心申請提升配額

單一實例並發度配額 200 耗盡

系統限流拒絕請求

429

若 Session 數 >1,評估調小配置

Session 無效或到期

系統拒絕請求

401

重新發起請求產生新 Session

HeaderField 值非法

系統拒絕請求

400

檢查 header 名稱與格式