当容器应用在非活动期间缩放到零时,下一个传入请求将触发 冷启动。 冷启动是一个耗时的过程,包括拉取容器镜像、预配资源以及启动应用程序代码。
这种延迟会影响用户体验,尤其是需要快速响应时间的应用程序。 冷启动在涉及大型容器映像、复杂应用程序初始化或 ML/AI 工作负载的方案中通常最为明显。
本指南可帮助你缓解 Azure 容器应用中的冷启动时间。
优化容器映像大小
机器学习和 AI 密集型工作负荷通常与大型容器映像相关联。 尽可能将这些图像的大小减少到最小,并避免使用不必要的库。
通常,图像在从训练阶段过渡到推理阶段时,只需进行微小的调整。 请务必审核容器,以便在准备容器以供推理使用时,删除模型开发所需的开发工具和依赖项。
避免远端映像注册表
使用靠近你的容器应用环境的容器注册表。 通常,这意味着要使用部署在环境所在的同一区域中的 Azure 容器注册表,或使用具有全局分发功能的高级注册表。
使用工件流式处理
Azure 容器注册表 提供映像流式处理 ,最多可将映像启动速度提高 15%。
注释
只有使用 无服务器 GPU 才能进行工件流式处理。
实施自定义运行情况运行状况探测或及早开始侦听
启用入口时,Azure 容器应用会自动设置 存活探针。 映像和应用程序在启动映像后需要很长时间才能启动,这可能会导致容器出现问题。 正在启动的应用程序会使运行情况探测失败,容器应用可能会将其终止。
若要解决容器应用过早终止映像的问题,请实施自定义运行情况探测,延长启动时间。 或者,您可以在启动周期初期侦听专用目标端口,以便在端口打开后简化连接并初始化应用程序。
客户端调整
冷启动时间因应用程序而异。 为了尽量减少对延迟的感知,请微调客户端以适应该延迟。
向用户发出信号,表明某个请求可能需要更长的时间,并实施重试至关重要。 也可以改进代码,避免出现超过应用程序正常处理能力的意外超时。
应用程序端检测
若要排查性能问题,请针对应用程序生命周期中的每个阶段实现应用程序端性能指标和日志记录。
主动唤醒应用
如果上述建议未提供所需的性能,请在任何实际使用情况之前唤醒应用。 例如,请考虑在上午 9 点安排一个任务,以在员工开始工作日之前唤醒应用程序。 这种方法可以消除冗长的冷启动,同时仍能在应用程序不使用时实现缩放到零成本节约。