我们支持使用 Spring Boot 用 Java 编写并部署在 OpenShift 中的多个微服务。一些微服务与数据库通信。我们经常在单个部署中的多个 Pod 中运行单个微服务。当每个微服务启动时,它会启动 liquibase,它会尝试更新数据库。问题是有时一个 pod 在等待更改日志锁定时会失败。当这种情况发生在我们的生产 OpenShift 集群中时,我们预计其他 pod 在重新启动时会失败,因为与更改日志锁定问题相同。因此,在最坏的情况下,所有 Pod 都将等待解除锁定。
我们希望 Liquidbase 在每个 Pod 启动时自动准备我们的数据库模式。
在每个微服务中存储这个逻辑是否好?出现liquidbase changelog lock问题如何自动解决?我们是否需要将数据库准备逻辑放在单独的部署中?
所以也许我应该解释一下我的问题。在微服务架构方面运行数据库迁移的最佳方法是什么?也许我们不应该在每个 pod 中使用数据库迁移?也许最好用单独的部署来完成,或者用一些根本不在 OpenShift 中的额外 Jenkins 工作来完成?