随着AI Agent的普及,为了满足AI Sandbox对独立隔离运行环境的需求,函数计算推出了实例隔离功能,即一个实例始终只能处理一个请求或一个会话内的所有请求,直到实例释放。旨在提供一个安全、可靠、弹性、低成本的沙箱运行时环境。
实例隔离模式
不隔离
函数计算默认不隔离,基于请求最大程度复用实例,一个实例同时并发/累计可以处理1~N个请求。
请求隔离
一个用户请求(request) 独占并绑定一个函数实例。
会话隔离
一个用户会话(Session) 独占并绑定一个函数实例。
适用场景
多租隔离:为不同的租户提供独立环境,防止实例复用时租户间的数据泄漏。如 AI Agent 场景。
安全隔离场景:完全隔离状态(如内存、临时文件等),避免不同请求间的数据残留。例如处理敏感数据(如加密密钥、用户隐私信息),要求每次执行后彻底清理环境。如任务场景如流水线构建场景、文生图场景。
短期任务且低并发场景:任务执行时间极短(如毫秒级),且并发量极低,复用实例的收益小于创建新实例的开销。如单次触发的临时清理文件场景。
资源释放和清理:依赖外部资源(如数据库连接,GPU 设备),需要保证每次执行后资源完全释放。
避免跨请求的副作用的场景:代码中存在全局变量依赖外部资源(如数据库连接,GPU 设备),需要保证每次执行后资源完全释放。
实现原理
背景与挑战
基于请求触发、闲时释放实例降本的设计初衷,函数计算的运行时实例通常都是短生命周期,显然不满足会话隔离场景的长周期实例保活需求。
会话保持机制
为了解决以上问题,函数计算支持弹性实例在请求结束后自动转化为闲置状态,实现低成本实例保活(闲置期间vCPU资源使用不收费,内存仅收1/10费用,GPU资源根据卡型不同,仅收1/8~1/5的费用),当Session TTL/Session idle超时后,会话生命周期结束,实例开始释放,直至缩容到最小实例数,整个转化过程除了计费侧感知其它都对用户透明。
如果设置的最小实例数≥1,当有请求/后台任务触发时,实例迅速唤醒,热启动转为弹性实例活跃状态,当请求/后台任务结束时,活跃弹性实例自动转化为闲置状态,直到Session TTL/Session idle超时,实例开始释放,直到缩容到最小实例数为止。
隔离性保证机制
通过函数计算自动设置单实例并发度=1(请求隔离场景),自动设置单实例 Session 并发度=1(会话隔离场景),实现函数计算一个实例始终只处理一个请求/会话。
生命周期映射捆绑
将请求/会话的生命周期和实例的生命周期分别一一映射,引入 Session idle 和 Session TTL 超时时间的机制来判定当前会话生命周期是否结束。请求/会话生命周期结束时,相应实例的生命周期也结束,立即释放。
使用限制
实例规格限制:仅2 Core 及以上的规格才能使用实例隔离功能(包括创建函数、更新函数的场景)
请求级别隔离:仅用于单实例单并发场景。使用了该功能后,函数计算强制配置单实例并发度=1,客户不可再编辑修改。
会话隔离:需要客户前置配置会话亲和特性。使用了该功能后,函数计算强制配置单实例 Session并发度=1,客户不可再编辑修改。
内置运行时:内置运行时不支持 MCP SSE 会话隔离。
函数类型限制:除任务函数外,其他类型的函数都支持实例隔离功能。
计费说明
请求隔离
请求隔离费用 = 函数实例在请求期间的费用
会话隔离
会话隔离费用 = 函数实例在会话生命周期内的费用
关于弹性实例(闲置)和弹性实例(活跃)的计算规则,请参考计费概述。