允许Django应用程序的多个实例同时运行相同的数据库迁移是否安全?
情景说明
这是一个设置,其中Django应用程序的多个实例在负载均衡器后面运行。当Docker容器的更新版本可用时,每个旧Docker镜像都将替换为新版本。
如果存在新的Django迁移,则需要运行它们。这引出了一个问题:允许多个容器同时运行迁移(if ((editText.getInputType() == InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS)) {
// logic code execute
}
)是否安全?
关于这个问题的答案,我有两个假设。
答案 0 :(得分:1)
不,同时在所有容器中运行迁移是不安全的,因为您最终可能会两次应用相同的迁移。
有两种可能的情况:
应用迁移两次(例如,添加表列)会违反数据库约束,因此只有运行迁移的第一个容器才能完成迁移。在这种情况下,其他容器将会死亡,尽管您的业务流程系统可能会重新启动它们。
两次应用迁移并不违反任何约束,因此可以多次应用。在这种情况下,您最终可以获得重复的数据。
在任何情况下,您都应该尝试只有一个容器同时应用迁移。