无服务器平台通过为函数设置严格的最大执行持续时间,并通过运行时监控和资源控制来强制执行这些限制来管理计算时间限制。每个无服务器函数(例如,AWS Lambda、Azure Functions、Google Cloud Functions)都配置了一个超时值,通常范围从几秒到几分钟不等。例如,AWS Lambda 允许最多 15 分钟,Azure Functions 的消耗计划限制为 10 分钟,而 Google Cloud Functions 将执行时间限制为 9 分钟。这些限制确保了高效的资源分配,防止失控进程,并控制提供商的成本。当调用一个函数时,平台会启动一个倒计时计时器。如果该函数未在配置的超时时间内完成,平台将终止该函数,无论其状态如何。
强制执行机制各不相同,但通常结合了计时检查和隔离技术。平台使用轻量级容器或沙箱(如 AWS 中的 Firecracker microVM)来运行函数,如果函数超过其时间限制,这些容器或沙箱会自动销毁。在底层,Linux 控制组 (cgroups) 可能会强制执行 CPU 和内存限制,而平台的调度程序会跟踪跨分布式节点的执行时间。某些提供商会发送终止信号(例如,SIGTERM)以允许函数在最终的 SIGKILL 之前进行清理,但这并非普遍做法。例如,AWS Lambda 在超时后会给函数一个短暂的宽限期来处理关闭逻辑。此外,平台还会监控冷启动和并发执行,以确保没有单个函数垄断资源,这间接支持了对时间限制的遵守。
开发人员必须设计函数以适应这些约束。长时间运行的任务使用扇出或编排工具(例如,AWS Step Functions、Azure Durable Functions)等模式拆分为更小的步骤。例如,一个 20 分钟的视频处理任务可以分成多个块,每个块由一个单独的函数处理。错误处理至关重要:函数应检查点进度(例如,将状态保存到数据库)以便在超时后恢复。日志记录和指标有助于识别瓶颈,而异步工作流(使用 Amazon SQS 等队列)将执行与直接用户请求分离。通过遵守时间限制并利用特定于平台的工具,开发人员可以在无服务器计算的无状态、短暂特性之间平衡功能。