HeaderField親和功能允許通過HTTP要求標頭中的指定欄位實現會話親和,支援用戶端傳入或服務端產生兩種模式,將攜帶相同HeaderField值的請求路由到同一個函數執行個體。
核心配置
在函數配置頁面的進階配置 > 隔離性、親和性中,開啟會話親和開關,選擇HeaderField 親和,配置Header Name(如mySessionId)、單一實例並發 Session 數、會話生命週期配置,點擊部署即可啟用。
用戶端可在要求標頭中攜帶自訂Session ID,或由服務端自動產生並在回應標頭中返回。
適用範圍
通用限制:使用前請先閱讀會話親和通用限制及原理說明。
會話 ID 來源:
若用戶端在預定義 Header 中傳入會話 ID,則以該值作為會話標識。
長度限制為 [1,64]
以字母、數字或底線開頭,後面可跟字母、數字、底線或連字號(-)的字串
若未傳入,服務端將產生全域唯一會話 ID,通過CreateFunction預定義的Header欄位,通過響應 Header 返回。
Header 欄位定義:在建立函數時,於
SessionAffinityConfig中指定用於傳輸會話 ID 的 Header 欄位名。要求節流
單一實例可同時處理多個Session(預設20個,最大200個),當單一實例下綁定的Session數達到上限時,系統自動建立新執行個體
多個Session共用執行個體的200並發度配額
支援 SessionAPI 管理:可通過 SessionAPI 對會話進行生命週期管理(如建立、更新、查詢、終止等)。
配置HeaderField親和
流程概述
配置HeaderField親和包括四個步驟:開啟會話親和、選擇HeaderField類型、配置Header Name、配置參數並部署。可在建立函數時配置,也可為已有函數補充配置。
開啟會話親和
進入函數列表,選擇目標函數或建立函數
建立函數時,可以直接在進階配置地區,找到隔離性、親和性配置項,進行後續配置後建立
在函數詳情頁面,點擊配置標籤頁
在進階配置地區,找到隔離性、親和性配置項
點擊隔離性、親和性,展開配置面板
開啟會話親和開關
選擇HeaderField親和類型
在會話親和配置地區,選擇HeaderField 親和選項按鈕
系統自動顯示HeaderField親和的配置選項
配置Header Name
目的:設定用於傳遞Session ID的HTTP要求標頭名稱。
操作步驟:
在Header Name輸入框中,輸入自訂的Header名稱
命名規範:
不能以
x-fc-首碼開頭以字母開頭
非首字元可包含數字、中劃線、底線、字母
長度5-40個字元
樣本:
mySessionId、session-id、customSessionId建議:使用有意義的名稱,便於識別和維護
配置會話參數
目的:設定Session數量、生命週期和空閑時間長度,控制會話綁定和資源使用。
操作步驟:
單一實例並發 Session 數:設定單一實例可同時處理的最大Session數
預設值:20
取值範圍:1-200
建議:測試情境可設定為較小值(如10),生產環境根據業務需求調整
單個 Session 生命週期:設定Session從建立到銷毀的最長時間長度
預設值:21600秒(6小時)
說明:超過此時間後,系統自動銷毀Session,不再保證親和性
Session Idle時間長度:設定Session空閑多長時間後自動銷毀
預設值:1800秒(30分鐘)
說明:執行個體無請求超過此時間長度,Session進入空閑狀態並自動銷毀
點擊部署按鈕儲存配置
重要提示:
開啟會話親和後,系統會自動將單一實例並發度調整為200(系統預設值,不可手動調整)
Header Name配置後不可隨意修改,修改後需要用戶端同步更新
驗證HeaderField親和功能
目的:驗證相同HeaderField值的請求路由到同一執行個體,以及執行個體自動擴容機制。
可以通過在控制台函數詳情頁,查看執行個體擴容變化。
操作步驟:
準備測試環境
確保函數已部署並配置了HeaderField親和(Header Name =
mySessionId,單一實例並發 Session 數建議設定為2)在函數詳情頁,點擊觸發器,擷取函數的HTTP觸發器地址
如果HTTP觸發器使用簽名認證,建議修改為匿名訪問以便測試
測試服務端產生模式
# 第一次請求,不攜帶Header,服務端會自動產生Session ID
curl -v http://your-function-url/your-path從回應標頭中提取配置的Header Name的值(服務端產生的Session ID)
記錄響應中的執行個體ID
驗證同一Session路由到同一執行個體
# 使用提取的Session ID發起後續請求
curl -v -H "mySessionId: <從響應中提取的Session ID>" http://your-function-url/your-path驗證點:多次請求應該路由到同一個執行個體,在函數詳情頁可以找到執行個體按鈕,是否有新執行個體產生
測試用戶端傳入模式
# 用戶端主動傳入Session ID
curl -v -H "mySessionId: session-2" http://your-function-url/your-path驗證點:如果單一實例並發Session數為2,新Session應該綁定到同一執行個體
驗證執行個體自動擴容
# 用戶端傳入新的Session ID
curl -v -H "mySessionId: session-3" http://your-function-url/your-path驗證點:當執行個體Session數達到上限時,新Session應該綁定到新建立的執行個體
預期結果:
相同HeaderField值的請求路由到同一執行個體
用戶端傳入和服務端產生兩種模式均正常工作
當執行個體Session數達到上限時,系統自動建立新執行個體
常見問題
用戶端傳入和服務端產生模式有什麼區別?
區別:
用戶端傳入模式:用戶端主動控制Session ID,適用於需要自訂Session ID的情境
服務端產生模式:服務端自動產生Session ID,用戶端只需提取response欄位,並在後續請求中攜帶此ID,適用於簡化用戶端實現的情境。
選擇建議:
需要自訂Session ID或與現有系統整合時,使用用戶端傳入模式
需要簡化用戶端實現時,使用服務端產生模式