1

すべてのトラフィックをフロントコントローラーにルーティングするPHPアプリケーションで基本的なPHPファイルキャッシングドライバーを作成しようとしています。たとえば、apachemod_proxy_balancerを使用した次の簡略化されたセットアップを想定します。

ここに画像の説明を入力してください

単一サーバー環境では、リクエストURIに一致するディレクトリ構造のディスクにリクエスト応答をキャッシュします。次に、次のような単純なapache書き換えルールにより、apacheは静的キャッシュファイル(存在する場合)を返し、PHPプロセスを完全に回避できます。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /front_controller.php [L]

明らかに、これは負荷分散環境では問題があります。これは、キャッシュファイルが、要求が処理されて結果がキャッシュされた特定のPHPサーバー上のディスクにのみ書き込まれるためです。

問題を解決する..。

したがって、この問題を解決するために、いくつかのコードをノックアウトして、個々のバックエンドPHPサーバーにキャッシュデータをロードバランサーに書き込み/削除させることができると考えました。ただし、mod_proxy_balancerの機能(および実際には他の負荷分散オプション)についてはほとんど知らないため、次の質問に対する外部検証が必要です。

そして質問...

  1. 上記のRewriteRulesのような何らかの形式のチェックを実行して、バックエンドサーバーの1つにリクエストを送信する前に、前面のロードバランサーに静的ファイルを提供させることは可能ですか?
  2. これもお勧めですか?ロードバランサーがトラフィックを排他的にルーティングし、静的コンテンツの提供に煩わされないようにする必要がありますか?
  3. PHPサーバーレベルでキャッシュされたファイルに許容可能なTTLを使用し、許容されたレベルの古いキャッシュの重複を処理する方がよいでしょうか。

最後に、これが広すぎるか、すでに回答されている場合は、お詫びします。負荷分散の問題に関する前述の無知の結果として、何を検索すればよいのかよくわかりません。

4

2 に答える 2

0

これは、Nginxが簡単に実行できることのように聞こえ、ディスク上のファイルに書き込む必要がなくなります。

Nginxは負荷分散とキャッシュを行うことができます。これに関するチュートリアルは次のとおりです。

http://nathanvangheem.com/news/nginx-with-built-in-load-balancing-and-caching

于 2012-02-08T23:30:31.497 に答える
0

最も単純なソリューションとして、NFSを使用できます。すべてのPHPサーバーにNFS経由でファイルシステムをマウントします。これはローカルストレージのように機能しますが、すべてのサーバーで同じです。もう少し洗練されたものにするために、NFSファイルシステム上にあるものをキャッシュできるNginxやVarnishのようなものを使用してください。

memcacheの使用も実行可能な代替手段であり、分散メモリベースのストレージシステムです。memcacheの良いところは、必要がなければキャッシュのクリアやパージを管理する必要がないことです。キャッシュされたアイテムごとにTTLを設定できます。または、memcacheがいっぱいになると、キャッシュされたアイテムが自動的に削除されます。

于 2012-02-09T01:37:40.030 に答える