LiquiBase和Kubernetes数据库滚动更新

时间:2018-06-24 08:43:54

标签: kubernetes liquibase

比方说,我有一个数据库,该数据库具有v1架构,并且该应用程序与该v1架构紧密耦合。也就是说,如果数据库中的记录与实体类不匹配,则会引发SQLException。

我应该如何部署更改数据库架构的更改,以及部署具有竞争条件的应用程序。即用户查询应用程序中不再存在的字段。

1 个答案:

答案 0 :(得分:3)

这个问题实际上并不是特定于kubernetes的,它发生在具有多台服务器的任何系统中-kubernetes只是因为它的自动转换而使其变得更加集中。您的问题中的“紧密耦合”一词是此处 real 问题的遗忘。

也就是说,“答案”实际上取决于以下哪种心理模型对您的团队更合适:

  • 不要使两个连续的模式相互矛盾
  • 使用“维护”页面,将流量从豆荚中移开,直到豆荚完全铺开
  • 只接受SQLException并向使用者添加更好的重试逻辑

我们使用第一个,因为kubernetes的推出已融入我们的工程文化中,并且我们知道,pod-old和pod-new将同时运行,因此架构更改需要逐步进行,向后兼容至少一代Pod。

但是,有时我们只接受为此付出的工程成本比发生特定突破性变化所需的500倍成本更高,因此我们欺骗并降低了复制品的比例,然后将其推出并警告我们的监测团队将是例外,但它们会崩溃。我们之所以能够做到这一点,部分是因为客户端内置了重试逻辑。