会话亲和配置实践

函数计算针对WebSocket、gRPCHTTP长轮询等强会话依赖场景推出会话亲和功能,实现长连接和会话状态维护。本文介绍如何通过函数计算控制台配置会话亲和。

使用限制

  • 通用限制

    • 如果您已开启会话隔离,会话亲和功能将自动开启且不可关闭,必须选择MCP SSE亲和HeaderField亲和Cookie亲和

    • 如果您已开启请求隔离,会话亲和功能将不可用。

    • 异步任务请求不支持会话亲和。

    • 如果选择内置运行时,单实例并发度限制为1,此时单实例并发 Session 数也只能限制为1。

    • 单实例并发 Session 数不可超出单实例最大并发请求数。

  • MCP SSE亲和独有限制

    • 创建函数时如果选择内置运行时,则不支持MCP SSE亲和,如果选择MCP运行时,则只支持MCP亲和。

    • 必须使用MCP官方标准ClientSDK访问开启MCP_SSE亲和的函数。

  • HeaderField亲和独有限制

    • 目前HeaderField亲和仅支持HTTP协议。

  • Cookie亲和独有限制

    • 仅支持服务端植入Cookie模式,即客户端第一次访问时,函数计算将在返回请求中自动植入 Cookie。

会话亲和行为预期(亲和/限流/调度到新实例)

选择任意一种类型的会话亲和后,单实例并发度将自动置为最大并发度200,且不可更改。多个Session下的请求共享单实例最大并发配额200,超过单实例并发度上限的请求将路由到其他实例或被限流。详细说明如下:

  • 亲和

    仅当单实例下所有Session的请求并发量不超过最大并发配额200时,在Session生命周期内,系统会保证其会话亲和性。

  • 限流

    单实例上所有Session的请求并发量超过最大并发配额200时,存量Session的新请求会触发限流,报错429,新Session会自动调度到新创建的函数实例。

    例如您配置的单实例并发Session数为30,单个Session可并发处理的请求数为10,随着请求量增加,当前实例上的Session个数达到20时,已达到单实例最大并发配额200,此时,第20Session上的新请求会被限流,第21个及以后Session上的请求会自动调度到新创建的函数实例。

  • 调度到新实例

    超过设置的单实例并发Session时,新的Session请求会自动调度到新创建的函数实例上执行。

参数配置指引

  1. 单实例并发Session数配置较小会导致系统创建更多的函数实例,成本更高,可通过降低函数规格降本。

  2. 单实例多Session下资源共享,需提前评估可接受Session间共享实例资源,以提高资源利用率,降低成本。

操作步骤

  1. 登录函数计算控制台,在左侧导航栏,选择函数,然后在上方菜单栏,选择地域。

  2. 函数页面,单击创建函数,在创建函数页面,选择函数类型,找到隔离性、亲和性区域,参考以下指导配置完成后单击创建

    1. 实例隔离

      保持实例隔离功能关闭。

    2. 会话亲和

    • MCP SSE亲和

      配置项

      说明

      示例

      会话亲和类型

      选择MCP SSE亲和,基于MCP SSE协议规格,系统确保客户端携带相同SessionId的客户端请求始终路由到同一个实例实现亲和行为。

      MCP SSE亲和

      SSE 路径

      发起SSE连接请求的路径。

      /sse

      单实例并发 Session 数

      单实例在同一时间内能同时处理的最大Session数。默认值为20,最大支持并发Session200。

      20

    • HeaderField亲和

      配置项

      说明

      示例

      会话亲和

      选择HeaderField,基于HTTP请求头中的指定字段值实现会话亲和。

      HeaderField亲和

      Header Name

      用于传递亲和值客户端标识的头部名称。例如,您想传递的亲和标识为mySessionId,Header Namex-custom-affinity-header,使用HTTP协议发起调用时,需要传递如下Header和值:x-custom-affinity-header:mySessionId

      x-custom-affinity-header

      单实例并发 Session 数

      单实例在同一时间内能同时处理的最大Session数。默认值为20,最大支持并发Session200。

      20

      单个 Session 生命周期

      Session创建、使用到最终销毁的全过程。超过单个Session生命周期后,服务端将自动销毁Session,不再保证亲和性。

      21600

      Session Idle时长

      用户在一段时间内没有进行任何操作,导致会话进入空闲状态。超过设置的Session Idle时长后,服务端将自动销毁Session,不再保证亲和性。

      1800

    • Cookie亲和

      配置项

      说明

      示例

      会话亲和

      选择Cookie亲和,基于HTTP Cookie中的特性值实现会话亲和。

      Cookie亲和

      Cookie 处理方式

      目前仅支持植入Cookie方式,即客户端第一次访问时,函数计算将在返回请求中自动植入Cookie,即在 HTTP/HTTPS响应报文中插入Set-Cookie:x-fc-cookie-session-id={CookieID},后续客户端携带Cookie:x-fc-cookie-session-id={CookieID}访问时,函数计算会将请求定向转发给第一次请求所在的函数实例上。

      植入 Cookie

      单实例并发 Session 数

      单实例在同一时间内能同时处理的最大Session数。默认值为20,最大支持并发Session200。

      20

      单个 Session 生命周期

      Session创建、使用到最终销毁的全过程。超过单个Session生命周期后,服务端将自动销毁Session,不再保证亲和性。

      21600

      Session Idle时长

      用户在一段时间内没有进行任何操作,导致会话进入空闲状态。超过设置的Session Idle时长后,服务端将自动销毁Session,不再保证亲和性。

      1800

结果验证

HeaderField亲和为例,开启亲和后,您可以指定HTTP请求头调用函数,然后观察在不超过配置的单实例并发Session的前提下,会话请求是否调度到同一函数实例执行。

  1. 指定不同HTTP请求头多次调用函数进行测试,本文以执行Curl命令为例。

    示例如下,请根据您的函数URL替换exampleregionID。您可以在目标函数详情页面,选择触发器页签,然后在HTTP触发器的配置信息列获取函数URL。

    curl -H "x-custom-affinity-header:mySessionId" https://example.{regionID}.fcapp.run

    如果您选择了Cookie亲和,Curl命令格式如下:

    curl -H "Cookie:x-fc-cookie-session-id={CookieID}" https://example.{regionID}.fcapp.run
  2. 在目标函数详情页面,选择日志页签,您可以看到在不超过配置的单实例并发Session的前提下,不同SessionId的请求均被调度到同一函数实例执行。

常见问题

MCP SSE亲和

场景

系统行为

状态码

客户端应对策略

单实例并发Session数耗尽

存量实例未超地域最大实例数上限,系统自动扩容新实例绑定Session 请求。

200

-

存量实例达到地域最大实例数上限,系统限流拒绝请求。

429

1.采用退避重试策略。 2.通过配额中心申请提升地域最大实例数上限配额。

单实例并发度配额200耗尽

系统限流拒绝请求。

429

1.如单实例绑定的并发Session数>1,可评估调小配置。 2.如单实例绑定的并发Session数为1,请提交工单与我们联系。

HeaderField亲和

场景

系统行为

状态码

客户端应对策略

单实例并发Session数耗尽

存量实例未超地域最大实例数上限,系统自动扩容新实例绑定Session 请求。

200

-

存量实例达到地域最大实例数上限,系统限流拒绝请求。

429

1.采用退避重试策略。 2.通过配额中心申请提升地域最大实例数上限配额。

单实例并发度配额200耗尽

系统限流拒绝请求。

429

1.如单实例绑定的并发Session数>1,可评估调小配置。 2.如单实例绑定的并发Session数为1,请提交工单与我们联系。

HeaderField值无效

系统拒绝请求。

400

检查平台参数限制,传入合理的配置。

HeaderField对应的 Session过期

系统拒绝请求。

401

携带新HeaderField发起请求。

Cookie亲和

场景

系统行为

状态码

客户端应对策略

单实例并发Session数耗尽

存量实例未超地域最大实例数上限,系统自动扩容新实例绑定Session 请求。

200

-

存量实例达到地域最大实例数上限,系统限流拒绝请求。

429

1.采用退避重试策略。 2.通过配额中心申请提升地域最大实例数上限配额。

单实例并发度配额200耗尽

系统限流拒绝请求。

429

1.如单实例绑定的并发Session数>1,可评估调小配置。 2.如单实例绑定的并发Session数为1,请提交工单与我们联系。

Cookie无效或过期

系统拒绝请求。

401

发起不带Cookie的请求生成新 Cookie。