Cloud Run部署耗时异常增加问题求助及优化建议咨询
问题回应与优化建议
是否有其他用户遇到相同问题
是的,2024年8月中旬有不少Cloud Run用户反馈类似的多实例部署延迟问题:原本并行启动的实例变为串行等待就绪,导致单服务部署耗时从数分钟增至7-8分钟。推测这是Cloud Run底层调度策略的灰度调整,这类调整有时不会即时同步到公开变更日志中。
优化部署耗时的建议
1. 并行部署两个Cloud Run服务
你的Cloud Build流程当前是顺序部署两个服务,可改为并行执行,利用Cloud Build的waitFor字段让两个部署步骤同时启动,直接将总部署时间从两个服务的耗时之和缩短为单个服务的最长耗时:
steps: # 保留前面的mvn、docker build、push步骤 - name: gcr.io/cloud-builders/gcloud args: ['run', 'deploy', '$_SCHEDULED_SERVICE', '--image', '$_DEPLOY_REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/$REPO_NAME-$COMMIT_SHA', '--region', '$_DEPLOY_REGION', '--platform', '$_PLATFORM'] id: deploy-scheduled - name: gcr.io/cloud-builders/gcloud args: [ 'run', 'deploy', '$_BACKEND_SERVICE', '--image', '$_DEPLOY_REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/$REPO_NAME-$COMMIT_SHA', '--region', '$_DEPLOY_REGION', '--platform', '$_PLATFORM' ] id: deploy-backend waitFor: ['-'] # 表示不等待任何前置步骤,与deploy-scheduled并行执行
2. 修改部署命令的等待策略
默认gcloud run deploy会等待所有实例就绪后才返回,可添加--no-wait参数让命令立即完成,避免Cloud Build步骤卡在等待实例启动上:
gcloud run deploy $_SCHEDULED_SERVICE \ --image $_DEPLOY_REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/$REPO_NAME-$COMMIT_SHA \ --region $_DEPLOY_REGION \ --platform $_PLATFORM \ --no-wait
注意:使用该参数后,Cloud Build步骤会提前结束,但实际部署仍在后台进行,需确保后续流程不依赖部署完成状态。
3. 优化启动探针配置
当前探针配置的最长等待时间为initialDelaySeconds + periodSeconds * failureThreshold = 60 + 30*3 = 150秒,且每个实例都需通过探针检查才能就绪,可针对性调整:
- 缩短初始延迟:测试应用实际启动到能响应
/login端点的时间,将initialDelaySeconds从60调整为更精准的值(比如30秒),避免不必要的等待。 - 改用轻量健康检查端点:
/login可能涉及数据库连接、会话初始化等重操作,建议新增一个仅返回200的轻量端点(如/healthz)作为探针路径,减少探针响应时间。 - 调整探针周期:将
periodSeconds从30缩短至10,加快探针检查频率,尽早确认实例就绪状态。
调整后的探针示例:
initialDelaySeconds: 30 timeoutSeconds: 10 periodSeconds: 10 failureThreshold: 3 httpGet: path: /healthz port: 5000
4. 分阶段调整最小实例数
先以1个最小实例完成部署,再扩容至6个,避免部署阶段同时启动多个实例带来的调度延迟:
- 部署时临时设置
--min-instances=1 - 部署完成后,再执行更新命令设置
--min-instances=6
示例Cloud Build步骤:
# 第一步:以1个实例部署服务 - name: gcr.io/cloud-builders/gcloud args: ['run', 'deploy', '$_SCHEDULED_SERVICE', '--image', '$_DEPLOY_REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/$REPO_NAME-$COMMIT_SHA', '--region', '$_DEPLOY_REGION', '--platform', '$_PLATFORM', '--min-instances=1'] # 第二步:扩容至6个实例 - name: gcr.io/cloud-builders/gcloud args: ['run', 'services', 'update', '$_SCHEDULED_SERVICE', '--region', '$_DEPLOY_REGION', '--platform', '$_PLATFORM', '--min-instances=6']
5. 优化镜像拉取效率
虽然你未修改镜像构建流程,但可检查以下点加速镜像拉取:
- 确认使用区域化Artifact Registry(与Cloud Run同区域),减少跨区域网络延迟。
- 采用Docker多阶段构建减小镜像体积,仅保留运行时必需的文件和依赖。
内容的提问来源于stack exchange,提问作者Julio Melo
相关产品推荐
相关产品推荐

