apc_compile_file を使用してアプリ全体のオペコード キャッシュを手動で埋めてから、新しいリリースに切り替える
-
26-09-2019 - |
質問
タイトルどおりのことを行うための素晴らしいシステムやアイデアを持っている人はいますか?
PHP で記述され、Apache によって提供される Web アプリの実稼働バージョンをリリース 1234 からリリース 1235 に切り替えたいと考えていますが、その前に、すべてのファイルがすでにオペコード キャッシュ (APC) にある必要があります。切り替え後、リリース 1234 からのファイルの古いキャッシュ エントリを削除します。
私が考える限り、あるバージョンから次のバージョンにアトミックに切り替える簡単な方法が 3 つあります。
- /live などのシンボリック リンクを持ちます。これは常にドキュメント ルートですが、あるバージョンから次のバージョンを指すように変更されます。
同様に、 ディレクトリ /live は常にドキュメント ルートですが、使用します
MV ライブ旧バージョン && MV 新バージョン ライブ
新しいバージョンに切り替えるには。
- Apache 設定を編集してドキュメント ルートを新しいバージョンに変更し、Apache を再起動します。
3を実行する必要がないことが望ましいと思いますが、すべてのphpファイルをプリコンパイルし、リリースを切り替えるために1または2を使用することはとにかく思いつきません。
それでは、誰かがオプション 3 に頼っても大丈夫だと私に説得してくれるでしょうか、それとも 1 または 2 を使用する方法を教えてくれるでしょうか、あるいは私が考えていない他のオプションを明らかにしてくれるでしょうか?
解決
正確になぜあなたはこれをしたいですか?
私は新しいリリースに切り替えると、私はちょうど、私のApacheを停止し、私のVCSからチェックアウトを介してサーバ上のPHPファイルを置き換えるとApacheを再起動します。これは主に、それもスクリプト可能だが、これをやってのけるために30秒未満かかります。いくつかまたは全くないユーザーが存在する時に実行されるすべて。その後、オペコードキャッシュは空で、誰かがファイルを使用するとすぐに自分自身を記入します。
たぶん、最初のいくつかのヒットは、最適な性能を持っていないだろうが、それはそれほど悪いことではないはずです。私の生産システムでは誰もこの短いパフォーマンスの低下に気付いていません。そして、その中でいくつかの本当に重い負荷システムがある。
あなたも、ユーザーに任意の邪魔エラーメッセージを回避するために、ファイルを交換しながら、サーバー上の画面「すぐに戻って...アップグレード」シンプルを配置することができます。
他のヒント
次にスイッチの後、古いを削除 リリースからのファイルのためのキャッシュエントリ 1234ます。
あなただけのすべてのキャッシュ全体またはnoneをクリアすることができます。それは、選択プロセスではありません。これは、問題へのアプローチを変更することがあります。プリコンパイルが最優先される場合は、スイッチオーバー時に、サーバーをダウンさせることを余儀なくされてます。