GCP Cloud Run 与 PostgreSQL - 如何进行迁移?

nie*_*sch 2 postgresql flyway google-cloud-platform google-cloud-run

我们正在从我们的第一个云运行项目开始。过去我们将 postgres 与 spring boot 结合使用。当应用程序启动时,我们通过 Flyway(类似于 liquibase)运行迁移。

现在有了云运行,由于以下(角落)情况,这种方法可能会达到极限:

  • 多个传入请求(http、消息)路由到并行实例,这些实例可以在引导容器时并行执行相同的迁移。这将导致失败消息或 http 错误的异常和重试
  • 每次容器启动时,引导程序上的飞路检查都会减慢冷启动时间,如果我们没有“热”实例的持续流量,这可能会很大

将 springboot/flyway 和 postgres 作为跨实例共享的后备数据库,什么是一个好方法?当你用 nosql 数据存储替换 postgres 时,会出现类似的问题,我想如果你想要/需要迁移新结构......

现在我能想到:

  • 在云修订版本被替换之前,将 postgres 模式迁移作为部署管道的一部分,这会带来新的挑战(回滚等)

请分享你的想法?期待您的答复吗?马塞尔

Pen*_*m10 5

对于在提交或回滚时引入重大更改的迁移,必须完全停止,当然还要相应地计划回滚。

另请注意,提交/推送不应立即触发新的迁移。通常,这些不是进入生产的常规 CI/CD 管道的一部分。

部署服务后,您可以创建新修订版并分配一个标签,该标签允许您在不提供流量的情况下通过特定 URL 访问该修订版。

一个常见的用例是运行和控制对此容器的首次访问。然后,您可以使用该标记将流量逐渐迁移到带标记的修订版,并回滚带标记的修订版。

要将现有服务的新版本部署到生产环境:

gcloud beta run deploy myservice --image IMAGE_URL  --no-traffic --tag TAG_NAME
Run Code Online (Sandbox Code Playgroud)

该标签允许您直接测试(或通过此迁移运行 - 第一个请求)特定 URL 上的新版本,而无需提供流量。URL 以您提供的标签名称开头:例如,如果您gree在服务 myservice 上使用标签名称 n,则您将在 URL 处测试标记的修订版本https://green---myservice-abcdef.a.run.app