7

継続的インテグレーションのセットアップはありません(まだ)。しかし、非常に頻繁に展開したい。1日1回かそこら。

別の Postgres サーバーを備えたかなり標準的な Django アプリケーションがあります。通常のレンタル VM を使用します (Amazon や Rackspace は使用しません)。

アプリケーションのダウンタイムを最小限に抑えるにはどうすればよいでしょうか? ダウンタイムをゼロにするのが最善です。2 つの同等のアプリケーションと 2 つのデータベース サーバーのセットアップを考え、1 つの app/db サーバー ペアを次々とデプロイしました。

問題は、データの一貫性を保つことです。1 つの app/db サーバー ペアが更新されている間、古いコードでサーバー ペアがユーザーにサービスを提供できます。しかし、ユーザーがデータベースに書き込むと、更新されたペアに切り替えるときにデータが失われます。特にスキーマの移行をプッシュする場合。

どうすればこれを処理できますか? これは非常に一般的な問題ですが、良い答えが見つかりません。この問題をどのように処理しますか?

4

1 に答える 1

2

スキーマの移行がない場合に備えて、実用的なシナリオを示します。

スーパーバイザーなどで制御する 2 つのバージョンの django プロセス ( A および B ) を保持します。すべてのリクエストをAに転送するdjangoプロセスの前にnginxプロセスを保持します。したがって、バージョンBをサーバーにアップロードし、スーパーバイザーでdjangoプロセスBを開始し、nginxのconfファイルをBを指すように変更してから、 nginxプロセス..

スキーマの移行がある場合、事態は複雑になります。オプションは次のとおりです。

  • mongoDB などの NoSQL ソリューションの使用を検討できます (この場合、単一の DB インスタンスを保持できます)。
  • 後で新しいデータベースにプッシュできるように、アップロード中にすべての書き込みリクエストを手動で記録する方法を見つけてください。
于 2013-01-21T15:08:48.060 に答える