允许多个实例的Django应用程序同时运行相同的数据库迁移是否安全? 场景描述 这是一个设置,其中多个Django应用程序实例在负载均衡器后面运行。当Docker容器的更新版本可用时,旧Docker镜像将被替换为新版本。 如果存在新的Django迁移,则需要运行它们。这引出了一个问题:允许多个容器同时运行迁移 (python manage.py migrate) 是否安全? 我对这个问题的答案有两个假设。 是的,很安全。由于数据库级别锁定,迁移无法冲突,最终将运行一个迁移脚本,而另一个报告没有迁移要应用。 不,这不安全。两个迁移可能会互相冲突,因为它们试图修改数据库。
不,同时在所有容器中运行迁移是不安全的,因为您可能会多次应用相同的迁移。有两种可能情况:第一种情况是多次应用迁移(例如添加表列)会违反数据库约束,因此仅第一个运行迁移的容器能够成功完成迁移。在这种情况下,其他容器将停止运行,尽管您的编排系统可能会重新启动它们。第二种情况是多次应用迁移不会违反任何约束,因此可以多次应用。在这种情况下,您可能会出现重复数据。无论如何,您应该尝试同时只有一个容器应用迁移。