2012-01-05 18 views
2

私は3つのWebサーバーの負荷分散アプリケーションを持っています。私は3つのWebサーバーすべてで同時にキーでキャッシュを削除する必要があるボタンをクリックする必要があります。たとえば、currentTemperatureという名前のキャッシュがあります。ボタンをクリックすると、3つのWebサーバーすべてでcache ["currentTemperature"]が削除されます。私は、他のキャッシュ項目をプロセスで削除したくありません。ロードバランスされたアプリケーションでキーによるキャッシュを削除するにはどうすればよいですか?

アイデア?

答えて

1

負荷分散されたWebファームを実行すると、各サーバーには独自のキャッシュがあります。 1つの可能性は、元の「キャッシュの削除」要求に応答したWebサーバーが他のサーバーに対して同じ要求を行うようにするメカニズムを実装することです。しかし、これはかなり複雑になり、管理が難しくなります。各サーバーは、連絡先の他のサーバーを知るために、ファーム内の他のサーバーについて「知る」必要があります。

サーバーの完全なリストを(おそらく直接内部IPアドレスによって)保存し、現在のサーバーを自動的に検出するためのキャッシュ消去コードを書き込むために何かを設定ファイル(またはデータベース)に入れた場合、同じコードすべてのサーバーに展開できます。

また、簡単な方法で簡単に使用できます。内部IPのリストを保持し、特定の要求がWebサーバーによって処理されたときに、その要求をすべての内部IPに送信するようにします。要求を処理するコードは、各サーバーからの無限ループの要求を回避するための内部要求か外部要求かを知る必要があります。これは、内部リクエストであることを示すクエリー・ストリング内の名前/値のペアで実行できます。これは、ブラウザーからの要求には含まれません。

これはかなり理論的な議論ですが、それはあなたのために働くかもしれない何かのように聞こえるのですか?

注:キャッシュは、各Webサーバー上のIISアプリケーション内で実行され、個別のカスタムサービスレイヤー内では実行されないものとします。

+0

キャッシュクリアの無限ループの可能性に言及して+1 – Leon

0

どのようなメカニズムでも、キャッシュをクリアする必要のあるすべてのサーバーについて知っておく必要があります。

各サーバーが他のすべてのサーバーを認識するのではなく、キャッシュクリア要求をキューに入れてファーム内の各サーバーに送信する一元化されたプロセス(service/app/anything)があります。

ロジックを1か所に持たせることで、無限ループ(各サーバーが他のサーバーを更新し、オリジナルを更新するなど)を避け、最小限の変更でスケールアップできます。

Webサーバーは、キューを管理する責任を負いません。キャッシュクリアイベントを一部の集中処理に渡すだけです。

関連する問題