实例隔离概述

随着AI Agent的普及,为了满足AI Sandbox对独立隔离运行环境的需求,函数计算推出了实例隔离功能,即一个实例始终只能处理一个请求或一个会话内的所有请求,直到实例释放。旨在提供一个安全、可靠、弹性、低成本的沙箱运行时环境。

实例隔离模式

不隔离

函数计算默认不隔离,基于请求最大程度复用实例,一个实例同时并发/累计可以处理1~N个请求。

请求隔离

一个用户请求(request) 独占并绑定一个函数实例。

会话隔离

一个用户会话(Session) 独占并绑定一个函数实例。

适用场景

  1. 多租隔离:为不同的租户提供独立环境,防止实例复用时租户间的数据泄漏。如 AI Agent 场景。

  2. 安全隔离场景:完全隔离状态(如内存、临时文件等),避免不同请求间的数据残留。例如处理敏感数据(如加密密钥、用户隐私信息),要求每次执行后彻底清理环境。如任务场景如流水线构建场景、文生图场景。

  3. 短期任务且低并发场景:任务执行时间极短(如毫秒级),且并发量极低,复用实例的收益小于创建新实例的开销。如单次触发的临时清理文件场景。

  4. 资源释放和清理:依赖外部资源(如数据库连接,GPU 设备),需要保证每次执行后资源完全释放。

  5. 避免跨请求的副作用的场景:代码中存在全局变量依赖外部资源(如数据库连接,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 超时时间的机制来判定当前会话生命周期是否结束。请求/会话生命周期结束时,相应实例的生命周期也结束,立即释放。

使用限制

  1. 实例规格限制:2 Core 及以上的规格才能使用实例隔离功能(包括创建函数、更新函数的场景)

  2. 请求级别隔离:仅用于单实例单并发场景。使用了该功能后,函数计算强制配置单实例并发度=1,客户不可再编辑修改。

  3. 会话隔离:需要客户前置配置会话亲和特性。使用了该功能后,函数计算强制配置单实例 Session并发度=1,客户不可再编辑修改。

  4. 内置运行时:内置运行时不支持 MCP SSE 会话隔离。

  5. 函数类型限制:除任务函数外,其他类型的函数都支持实例隔离功能。

计费说明

请求隔离

请求隔离费用 = 函数实例在请求期间的费用

会话隔离

会话隔离费用 = 函数实例在会话生命周期内的费用

关于弹性实例(闲置)和弹性实例(活跃)的计算规则,请参考计费概述