PHP +データベースサーバーを実行し、データベーススキーマとPHPソースを変更する更新プログラムを展開するとします。あなたはそれを定期的に行います。PHPサーバへの更新をアトミックに、つまり整合性を保持する方法
問題は、更新中にサービスが一時的に不整合な状態になり、結果としてクライアントがランダムエラーを取得することです。まず、スキーマの更新中にDBテーブル間の不一致が発生した後、DBとソースの不一致、そして最後にソース自体の更新中に、ファイルが非常に短時間で空になり、モジュール間で矛盾します。更新中にクライアントにエラーが発生する可能性があります。
質問は、これを防止する最善の方法は何ですか?
私が考えている解決策:サーバーのルート.htaccess
を、更新期間中HTTP 503 Service unavailable
を返すものに置き換えてから元のものに戻します(スクリプトはこれをすべて実行します)。クライアントは数秒以内に再試行することができます。たとえば、503は10秒以内に再試行することを意味し、3回以内に再試行します。
潜在的な問題の1つは、htaccessがスワップされる前にすでにいくつかの要求が進行中であるため、すべての要求が処理されるまで待つ方法が必要です。最も問題となるのは、長いファイル転送です。クライアントにファイルを提供するのに数分かかるとしたら、サーバーが数分間503状態になることを意味します。
さらに、PHPのための特別なソリューションはありますか?