【问题标题】:Backward compatible postgresql update in a scaled spring microservice扩展的 Spring 微服务中向后兼容的 postgresql 更新
【发布时间】:2021-09-09 01:44:07
【问题描述】:

我有一个在 Kubernetes 中运行的 Spring 微服务,它可以水平扩展到多个 pod。所有服务实例都指向一个 PostgreSQL 数据库。我正在尝试更新表中一列的名称。绕过它的最佳方法是什么?

我主要关心表更新的时间,但一些服务实例仍然有旧代码引用以前的列名,事情会中断。这似乎是一个非常常见的用例,但我找不到任何具体的东西。

【问题讨论】:

    标签: spring database postgresql microservices database-migration


    【解决方案1】:

    我看到了执行此迁移的 2 个选项:

    • 您可以添加一个新列(使用您的新名称),而不是更新现有列,然后部署使用新列的应用程序,然后更新表以删除旧列。如果您没有在查询中使用列位置或类似的东西,这应该可以正常工作。
    • 如果您有毫秒级延迟要求并且数据库不是那么大,您可以创建一个现有数据库的副本,以便在更新原始数据库时为查询提供服务。最后,您部署使用旧数据库但使用新列名的应用程序。无论数据库类型如何,这都有效。

    【讨论】:

    • 第二个选项对我来说不可行。在第一个选项中,问题是在部署过程中会有一些容器运行旧代码和一些容器运行新代码的状态。所以表数据将被损坏。一些数据(来自旧应用程序)将输入数据将登陆新应用程序的旧列和请求最终将在新列中输入数据
    • 在迁移期间和迁移之后,您可以启动数据迁移过程,这将完全同步两个数据库(只需将数据从旧数据库复制到新数据库)。最终,它们都将是相同的。我相信部署将持续几分钟,因此影响可能会被每日流量的极小部分所感知
    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    相关资源
    最近更新 更多