云引擎之前的行为是等待所有实例启动成功,才将此次部署操作视为成功,统一切换负载均衡的路由,将不同版本实例并存的时间控制到最短;如果有任何一个实例启动失败,整个部署操作失败,新建的容器会被销毁,不会对线上造成实际的影响。
这种做法的问题主要是对于实例较多的应用,启动过程中会有偶发的错误,导致整个部署失败,体验不是很好。大多数应用对负载均衡切换的时机也没有明确的要求。
新的「平滑部署」模式中,只要有一个实例启动成功,此次部署操作便视作成功,立刻加入到负载均衡中,对外提供服务;如果有实例启动失败,将会自动地不断重试,直到所有实例都被替换成新的版本,可能会有分钟级别的多版本实例并存的情况。
目前控制台和最新版本的命令行工具都会默认使用平滑部署,若希望保持之前的行为,可以在控制台上取消「平滑部署」的勾选,或给命令行工具传递 --atomic
参数。另外 Webhook 后续也会改为使用平滑部署模式。