2017-12-30 23 views
0

PHP +データベースサーバーを実行し、データベーススキーマとPHPソースを変更する更新プログラムを展開するとします。あなたはそれを定期的に行います。PHPサーバへの更新をアトミックに、つまり整合性を保持する方法

問題は、更新中にサービスが一時的に不整合な状態になり、結果としてクライアントがランダムエラーを取得することです。まず、スキーマの更新中にDBテーブル間の不一致が発生した後、DBとソースの不一致、そして最後にソース自体の更新中に、ファイルが非常に短時間で空になり、モジュール間で矛盾します。更新中にクライアントにエラーが発生する可能性があります。

質問は、これを防止する最善の方法は何ですか?

私が考えている解決策:サーバーのルート.htaccessを、更新期間中HTTP 503 Service unavailableを返すものに置き換えてから元のものに戻します(スクリプトはこれをすべて実行します)。クライアントは数秒以内に再試行することができます。たとえば、503は10秒以内に再試行することを意味し、3回以内に再試行します。

潜在的な問題の1つは、htaccessがスワップされる前にすでにいくつかの要求が進行中であるため、すべての要求が処理されるまで待つ方法が必要です。最も問題となるのは、長いファイル転送です。クライアントにファイルを提供するのに数分かかるとしたら、サーバーが数分間503状態になることを意味します。

さらに、PHPのための特別なソリューションはありますか?

答えて

1

2台のサーバーがあります。フェールオーバー時にアップデートを実行し、フェールオーバーし、メインボックスでアップデートを実行してフェイルバックします。サーバーを更新している間に、サーバーのクラウドインスタンスをスピンアップしてトラフィックを取得することもできます。私はそれがダウンタイムがあなたにかかっているものに依存すると思います。しばらくの間はやっていけないほどコストがかからないなら、 Googleや何かであなたのDNSを指す!

これが収入の場合は、とにかく2台のサーバーをセットアップすることをお勧めします。何か問題が起こったときにもう一度立ち直るようにしてください。

関連する問題