Djangoアプリケーションの複数のインスタンスが同じデータベースの移行を同時に実行できるようにしても安全ですか?マルチコンテナDockerの設定でDjangoの移行を実行する
シナリオの説明
これは、Djangoアプリケーションの複数のインスタンスがロードバランサの背後で実行されている設定です。 Dockerコンテナの更新されたバージョンが利用可能になると、古いDockerイメージのそれぞれが新しいバージョンに置き換えられます。
新しいDjangoのマイグレーションが存在する場合、それらを実行する必要があります。これは、複数のコンテナが同時に移行(python manage.py migrate
)を実行できるようにするのは安全ですか?
私はこの質問に対する答えが何であるかについて2つの仮説を持っています。
- はい、安全です。データベースレベルのロックにより、移行は競合することはなく、最後に1つの移行スクリプトが実行され、もう1つは適用する移行がないことを報告します。
- これは安全ではありません。 2つの移行は、データベースを変更しようとするときに互いに競合する可能性があります。