云函数 基于会话模式并发管理(内测中)

如何在云函数控制台配置基于会话模式的并发管理,实现相同会话标记的请求定向调度到同一个实例上。

相关产品
云函数 产品页,含版本规格、价格与购买入口。

一、使用限制

仅 Web 函数支持会话亲和能力。

二、操作步骤

1. 登录 Serverless 控制台,单击左侧导航栏的函数服务。

2. 在函数服务页面上方选择期望创建函数的地域和命名空间,并单击新建,进入函数创建流程。

3. 在新建函数页面,你可以选择“从头开始”或者“使用容器镜像”,函数类型选择 Web 函数。

4. 找到隔离、并发配置,单实例并发模式选择基于会话。

5. 配置参数说明如下:

配置项 说明 示例
会话 Key 来源 用于说明从哪里获取客户端标识,系统根据此标记来决定要调度到同个实例上。可选项:Http Header、Cookie、Query String、MCP SSE、MCP Streamable HTTP,五选一。不同选项支持场景说明如下:Http Header通过 HTTP 请求头传递客户端会话标识,后台确保相同标识的请求被路由到同一个实例。适用于 WebSocket 协议、gRPC 协议、HTTP 协议。支持客户端自定义会话 ID(SessionId) ,也支持服务端生成。Cookie将携带相同 Cookie 信息的请求路由到同一个实例。支持客户端生成会话 ID(SessionId) ,也支持服务端生成。Query String客户端在 QueryString 中自定义会话 ID,相同会话 ID(SessionId) 的请求路由到同一个实例。MCP SSE基于 MCP SSE 协议规范,确保客户端携带相同会话 ID(SessionId) 的请求始终路由到同一个实例。MCP Streamable HTTP基于 MCP HTTP 协议规范,确保客户端携带相同会话 ID(SessionId) 的请求始终路由到同一个实例。 Http Header
会话 Key 名称 1. Key 用途及命名规则用途:用于指定会话标识的名称(即 Key),作为会话的唯一标识名称。MCP SSE 来源的 Key 默认是 session_id,MCP Streamable HTTP 来源的 Key 默认是 mcp-session-id,如果服务端有重新定义,可以手动修改匹配服务端的 Key。命名要求:必须以字母开头;非首字母可包含数字、字母、下划线(_)、中划线(-);长度限制5-40 个字符(含边界值)。 2. Key 对应 Value 生成逻辑及字符要求:生成逻辑:来源为 Http Header、Cookie:支持客户端在首次调用时自主生成 Value;若客户端未生成,系统将自动生成。来源为 QueryString:首次 Value 需由客户端生成。来源为 MCP SSE、MCP Streamable HTTP:首次 Value 由 MCP 服务端生成。字符要求:含数字、字母、下划线(_)、中划线(-)长度限制128个字节。 session-id
SSE 路径 如果会话 Key 来源选择 MCP SSE,需要填写发起 SSE 连接请求的路径。 默认/sse,支持修改
单实例最大并发会话数 单实例在同一时间内能同时处理的最大会话数(包含活跃会话和非活跃会话),默认值为20,最大支持100。 20
会话最长生命周期 从会话创建、使用到最终销毁的全过程。超过生命周期后,服务端将自动销毁会话。最长可设置7天,默认21600秒。 21600秒
会话最长空闲时间 用户在一段时间内没有进行任何操作,导致会话进入空闲状态。超过设置的最长空闲(Idle)时间后,服务端将自动销毁会话。最长可设置1800秒。 1800秒
单实例最大并发请求数 单实例在同一时间内能同时处理的最大请求数,默认为10,最大支持100。 10
会话空闲超时处理策略 如果你开启了“实例安全隔离”,会话空闲超时处理策略可选自动销毁或者自动暂停;如果你没有开启“实例安全隔离”,会话空闲超时处理策略默认自动销毁。 自动销毁

三、调度效果验证

开启会话亲和后,你可以指定会话标记调用函数 URL,然后观察在不超过配置的单实例最大并发会话数的前提下,会话请求是否调度到同一函数实例执行。

四、不同会话来源调用示例

Http HeaderCookieQuery StringMCP SSE / MCP Streamable HTTP指定不同 HTTP Header 多次调用函数进行测试,以执行 Curl 命令示例如下,请根据你的会话 Key 名称替换 session-key、会话 ID 替换 mySessionId、函数 URL 替换 example 和 region。你可以在目标函数详情页面,选择函数 URL 页签,获取函数 URL 。curl -H "{session-key}:{mySessionId}" https://{example}.{region}.tencentscf.com指定不同 Cookie 多次调用函数进行测试,以执行 Curl 命令示例如下,请根据你的会话 Key 名称替换 session-key、会话 ID 替换 mySessionId 、函数 URL 替换 example 和 region。你可以在目标函数详情页面,选择函数 URL 页签,获取函数 URL。curl -H 'Cookie:{session-key}={mySessionId}' 'https://{example}.{region}.tencentscf.com'指定不同 Query String 多次调用函数进行测试,以执行 Curl 命令示例如下,请根据你的会话 Key 名称替换 session-key、会话 ID 替换 mySessionId、函数 URL 替换 example 和 region。你可以在目标函数详情页面,选择函数 URL 页签,获取函数 URL。curl 'https://{example}.{region}.tencentscf.com?{session-key}={mySessionId}'可以使用 MCP Inspector 调用函数服务。通过选择对应的 Transport Type,并将函数 URL 增加 /sse 或者 /mcp 后缀配置到 URL 中,点击 Connect 发起调用。npx @modelcontextprotocol/inspector

五、查询调用结果

你可以在函数详情页面的日志查询、会话管理、运行实例上,查看到调用的结果。

注意:你需要提前开启 CLS 日志才能进行实例管理和会话管理。

以下用一个例子说明:假如你对同一个会话 ID 发起了多个请求。

你可以在函数管理 > 日志查询上查看到多个请求都调度到同个实例上。

在函数管理 >会话管理可以看到只有一个会话 ID,并行绑定到一个实例上。

在函数管理 > 运行实例可以看到后台运行了一个实例。

六、请求状态码说明

状态码 错误信息 说明
429 MaxConcurrencyLimit 实例的请求并发数超限(即假如一个实例多并发数配置为20,第21个请求到达会触发该错误码),系统限流拒绝请求。
443 session(xxx) bind's container is paused 调用一个会话已暂停的容器。
 session(xxx) bind's container have been full usage 调用一个会话并发满容器。
 session(xxx) bind's container is unavailable 调用一个会话已销毁的容器。
453 InvalidArgument 单实例并发模式=基于会话,用户没有传入会话标记,或者会话标记不符合规范,系统拒绝请求。
 SessionPauseErr 对于暂停状态的会话发起请求,系统拒绝请求。

七、计费说明

会话保持模式下,会话绑定的实例在请求处理完成后不会立即释放,而是保留至会话空闲超时(由“会话最长空闲时间”决定)后被销毁。保留期间的实例按预置并发闲置量计费,即使你未配置预置并发。

单个会话空闲保留产生的闲置用量 ≈ 函数内存(GB)× 会话最长空闲时间(秒),单位为 GBs。

示例:函数内存 512MB、会话最长空闲时间 1800 秒时,每个独立会话的空闲保留约产生 0.5 × 1800 = 900 GBs 闲置用量。预置并发闲置量的单价以及计算方式请参见 计费项介绍。

成本提示:

·若业务无需跨请求保持状态,建议使用按请求并发模式,不产生上述空闲保留费用。

·请确保客户端正确复用会话标识(如 Header 中的会话值)。若每次请求都生成新的会话标识,则每个请求都会独占实例并产生一次空闲保留费用。

·可按业务需要调低“会话最长空闲时间”,空闲保留费用近似按比例下降。

赞 (0)
上一篇 4天前
下一篇 4天前