GCP Cloud 运行 with PostgreSQL - 如何进行迁移?
GCP Cloud Run with PostgreSQL - how to do migrations?
我们开始第一个云 运行 项目。过去我们将 postgres 与 spring boot 结合使用。当应用程序启动时,我们通过 flyway(类似于 liquibase)进行了迁移 运行ning。
现在使用云 运行,由于以下(角落)情况,这种方法可能会达到极限:
- 多个传入请求(http、消息)路由到并行实例,这些实例可以在 bootstrapping 容器时并行执行相同的迁移。这将导致异常和重试失败消息或 http 错误
- bootstrap 上的 flyway 检查会在每次容器启动时额外减慢冷启动时间,如果我们没有“热”实例的持续流量,这可能会很多
将 springboot/flyway 和 postgres 作为跨实例共享的支持数据库的好方法是什么?当您用 nosql 数据存储替换 postgres 时会出现类似的问题我猜如果您 want/need 迁移新结构....
现在我能想到:
- 在云修订被替换之前迁移 postgres 架构作为部署管道的一部分,这会带来新的挑战(回滚等)
请分享您的想法?期待您的回答?
马塞尔
对于在提交或回滚时引入重大更改的迁移,必须完全停止,当然,回滚也要相应地计划。
还要注意,commit/push 不应立即触发新的迁移。这些通常不是投入生产的常规 CI/CD 管道的一部分。
部署服务后,您可以创建一个新修订并分配一个标签,允许您在特定 URL 访问修订而无需服务流量 。
一个常见的用例是 运行 并控制对该容器的首次访问。然后,您可以使用该标记将流量逐渐迁移到标记的修订版,并回滚标记的修订版。
要将现有服务的新修订版部署到生产环境中:
gcloud beta run deploy myservice --image IMAGE_URL --no-traffic --tag TAG_NAME
该标记允许您直接测试(或 运行 通过此迁移 - 第一个请求)特定 URL 的新修订,而无需提供流量。 URL 以您提供的标签名称开头:例如,如果您在服务 myservice 上使用标签名称 gree
n,您将在 URL https://green---myservice-abcdef.a.run.app
我们开始第一个云 运行 项目。过去我们将 postgres 与 spring boot 结合使用。当应用程序启动时,我们通过 flyway(类似于 liquibase)进行了迁移 运行ning。
现在使用云 运行,由于以下(角落)情况,这种方法可能会达到极限:
- 多个传入请求(http、消息)路由到并行实例,这些实例可以在 bootstrapping 容器时并行执行相同的迁移。这将导致异常和重试失败消息或 http 错误
- bootstrap 上的 flyway 检查会在每次容器启动时额外减慢冷启动时间,如果我们没有“热”实例的持续流量,这可能会很多
将 springboot/flyway 和 postgres 作为跨实例共享的支持数据库的好方法是什么?当您用 nosql 数据存储替换 postgres 时会出现类似的问题我猜如果您 want/need 迁移新结构....
现在我能想到:
- 在云修订被替换之前迁移 postgres 架构作为部署管道的一部分,这会带来新的挑战(回滚等)
请分享您的想法?期待您的回答? 马塞尔
对于在提交或回滚时引入重大更改的迁移,必须完全停止,当然,回滚也要相应地计划。
还要注意,commit/push 不应立即触发新的迁移。这些通常不是投入生产的常规 CI/CD 管道的一部分。
部署服务后,您可以创建一个新修订并分配一个标签,允许您在特定 URL 访问修订而无需服务流量 。
一个常见的用例是 运行 并控制对该容器的首次访问。然后,您可以使用该标记将流量逐渐迁移到标记的修订版,并回滚标记的修订版。
要将现有服务的新修订版部署到生产环境中:
gcloud beta run deploy myservice --image IMAGE_URL --no-traffic --tag TAG_NAME
该标记允许您直接测试(或 运行 通过此迁移 - 第一个请求)特定 URL 的新修订,而无需提供流量。 URL 以您提供的标签名称开头:例如,如果您在服务 myservice 上使用标签名称 gree
n,您将在 URL https://green---myservice-abcdef.a.run.app