展開プロセスを完全には理解していないと思います。これが私が知っていることです:
- ホットデプロイメントを行う必要がある場合、つまりライブのコードを変更する必要がある場合、モジュールをリロードすることでそれを行うことができますが、
imp.reload
変更したモジュールをリロードする代わりに、アプリケーションを再起動する必要があります。- 理想的には、実行中のコードはコード リポジトリのクローンである必要があり、デプロイが必要なときはいつでも変更をプルするだけです。
ここで、 (8011、8012 などのポートで)wsgi
リバース プロキシの背後で実行されているアプリの複数のインスタンスがあるとします。また、 1 秒あたりのリクエスト数nginx
を想定してみましょう。5
この場合、アプリケーションの実行中のすべてのインスタンスでコードをどのように更新すればよいでしょうか。
- すべてのインスタンスを停止し、すべてを更新してから再起動すると、確かにいくつかのリクエストが失われます
- 各インスタンスを 1 つずつ更新すると、すべてが更新されるまで、インスタンスは一貫性のない状態になります (一部は古いコードを実行し、一部は新しいコードを実行します)。リクエストが更新されたインスタンスにヒットし、その後の(および関連する)リクエストが古いインスタンス(まだ更新されていない)にヒットすると、間違った結果が得られます。
このようなビジーなアプリケーションがホットデプロイされる方法を誰かが完全に説明できますか?