为什么需要会话?
传统函数计算采用“无状态”设计——请求随机调度,实例按需伸缩,无法保证连续请求命中同一实例。然而,AI Agent 等新兴场景对“状态保持”有强烈依赖:
连续对话:Agent 需要在内存中实时维护多轮对话的上下文。
环境依赖:Agent 在运行过程中动态安装的 Python 库、下载的临时模型或生成的中间文件,必须在后续交互中持续可用。
函数计算会话(Session) 为函数引入了状态保持机制,确保特定会话的连续请求能够精准路由至同一函数实例。
函数计算会话(Session)
函数计算会话指请求与函数实例之间的一种持久化绑定关系。在会话有效期内,携带相同会话的多个请求会始终被路由到同一个的函数实例上。
会话核心模式:隔离 vs 非隔离
会话功能提供两种模式,平衡安全性与性价比:
会话隔离
定义:一个实例在生命周期内仅为一个会话服务,会话结束即销毁实例。
核心价值:极致安全与独立。每个 Agent 拥有完全隔离的 CPU/内存/磁盘。适合处理私密数据、执行不确定性的代码(沙箱环境),避免不同用户间的干扰。
会话非隔离
定义:多个会话可以先后复用同一个函数实例。
核心价值:低延迟与高性价比。无需为每个新会话启动新实例,大幅减少冷启动,适合可共享环境公共依赖、且隔离要求适中的场景。
会话生命周期管理
系统通过以下两个参数自动管控资源成本与用户体验,任一条件触发即销毁会话:
参数 | 定义 | 价值 | 默认值 | 取值范围 |
SessionTTL | 会话从创建起的绝对有效期。 | 提升业务安全性,防止因非预期逻辑导致无限占用资源。 | 24hour | [60s, 86400s] |
SessionIdleTimeout | 会话在没有任何请求进入时的持续浅休眠时长。 | 自动降本。在业务低谷期触发 | 1800s | [60s, 86400s] |
侧重体验:调大SessionTTL参数,确保会话长时间“在线”,调大SessionIdleTimeout,避免浅休眠持续持续较短时间即触发会话销毁。
侧重成本:调小SessionTTL和SessionIdleTimeout参数,快速释放不活跃的资源。
附:可通过会话API定义此两个参数值,详见会话生命周期管理。
会话状态
会话在其生命周期内经历以下状态演变:
Running(存活状态):此阶段实例已就绪,处于计费状态。包含两个子状态:
Active(活跃): 实例正在处理
InvokeFunction发起的调用请求。Idle(浅休眠): 请求处理完毕,实例继续保活。内存状态和文件系统完整保留,可瞬间响应下一个请求。此阶段实例以浅休眠单价计费,仅收取内存、磁盘等存储费用,不收取CPU费用。
Expired(过期状态):系统自动终结。当会话达到
SessionTTL限制或浅休眠时长超过SessionIdleTimeout时,进入此状态。数据被清理且不可恢复。Deleted(删除状态):用户主动终结。代表用户通过
DeleteSessionAPI 手动销毁会话。常用于任务完成后立即停止计费。

亲和协议类型
为实现系统如何识别哪些请求属于同一个会话,函数计算支持多种机制:
MCP 亲和:兼容标准 MCP SSE/Streamable 模式,只需通过标准 MCP Client 发起请求,系统自动拦截会话标识,实现零配置亲和。
HeaderField 亲和:高度灵活。用户在 HTTP Header 中指定自定义 Key(如
x-session-id),系统根据其 Value 进行路由绑定,将相同会话ID的请求路由到同一实例。Cookie 亲和:Web 友好。兼容标准 Cookie 协议,首次请求时,函数计算服务端将生成会话ID并在响应中放到 Set-Cookie 头部,后续客户端需将会话ID放到请求Cookie头部,系统将识别请求的会话ID,并将相同会话ID的请求路由到同一实例。
并发与资源管理
单实例并发 Session 数:指一个实例同时能绑定的会话数(目前固定为 1)。在非隔离模式下,多个会话将串行复用该实例。
单实例最大请求并发度:防止实例过载。单个会话限制固定 200 个并发请求,超出部分将触发限流保护。
会话动态挂载
定义:在会话隔离模式下,支持为特定会话动态挂载 OSS、NAS、PolarFS 等存储资源。
核心价值: 不同会话挂载不同的目录,通过动态挂载,您可以实现会话间挂载配置的隔离,同在有状态实例中像读写本地硬盘一样操作云端存储。