在多容器Docker设置中运行Django迁移

时间:2017-11-08 17:20:58

标签: django docker infrastructure

允许Django应用程序的多个实例同时运行相同的数据库迁移是否安全?

情景说明

这是一个设置,其中Django应用程序的多个实例在负载均衡器后面运行。当Docker容器的更新版本可用时,每个旧Docker镜像都将替换为新版本。

Distributed Django application diagram

如果存在新的Django迁移,则需要运行它们。这引出了一个问题:允许多个容器同时运行迁移(if ((editText.getInputType() == InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS)) { // logic code execute } )是否安全?

关于这个问题的答案,我有两个假设。

  1. 是的,这是安全的。由于数据库级别锁定,迁移不会发生冲突,最终会运行一个迁移脚本,而另一个迁移脚本会报告没有要迁移的迁移。
  2. 不,这不安全。这两次迁移在尝试修改数据库时可能会相互冲突。

1 个答案:

答案 0 :(得分:1)

不,同时在所有容器中运行迁移是不安全的,因为您最终可能会两次应用相同的迁移。

有两种可能的情况:

  1. 应用迁移两次(例如,添加表列)会违反数据库约束,因此只有运行迁移的第一个容器才能完成迁移。在这种情况下,其他容器将会死亡,尽管您的业务流程系统可能会重新启动它们。

  2. 两次应用迁移并不违反任何约束,因此可以多次应用。在这种情况下,您最终可以获得重复的数据。

  3. 在任何情况下,您都应该尝试只有一个容器同时应用迁移。