2011-12-12 18 views
6

私はPHPアプリケーションを提供するWebサーバーがロードバランサで設定されているシナリオに興味があります。ロードバランシングとAPC

ロードバランサの後ろにAPCを持つ複数のWebサーバが存在します。すべてのリクエストは、ロードバランサを通過しなければならず、ロードバランサは処理するためにWebサーバーの1つにそれを送信します。

私はmemcachedを分散キャッシュに使うべきだと理解していますが、各マシンキャッシュにAPCキャッシュを持たせることはアプリケーション設定やその他のオブジェクトのようになります。NOTは、 。

このアプリケーションの管理者エリアもあります。また、ロードバランサ(site.com/adminなど)を介してアクセスします。このような場合、に電話してALLサーバーのAPCオブジェクトキャッシュをクリアするにはどうすればよいですか?

+0

これは、[Pro Webmasters](http://webmasters.stackexchange.com)または[Server Fault](http://serverfault.com)に適しているようです。 –

+0

あなたはserverfault .com。 –

答えて

6

外部のネットワークでは、負荷ラウンドロビンを分散するロードバランサにすべてのリクエストをルーティングするために使用するパブリックIPを使用しているため、外部からは、外部から、各サーバーのキャッシュを一度に1つずつクリアする要求を、ある時点でどちらが使用されているのかわかりません。ただし、ネットワーク内では、各マシンに独自の内部IPがあり、直接呼び出すことができます。これを知っていると、あなたは外部で仕事をする面白い/奇妙なことをすることができます。

私が好きな解決策は、単一のURLをヒットして、http://www.mywebsite/clearcache.phpなどのようなものをすべて実行できるようにすることです。あなたもそれが好きなら、読んでください。あなたが好きな場合は、あなたの管理者がこれを打つことができますが、あなたはそれを保護することができますので、これを認証させることができます。

外部からすべてのサーバーでキャッシュをクリアする要求を外部から行うことができるロジックを作成できます。サーバーがキャッシュをクリアする要求を受信した場合でも、すべてのサーバーと通信してキャッシュをクリアするロジックが同じになります。これは奇妙なビットフランケンシュタインに聞こえるが、ここで我々はIPアドレス10.232.12.1、10.232.12.2と3台のサーバー、10.232.12.3内部で持っていると仮定すると、ロジックを行く:

1) All servers would have two files called "initiate_clear_cache.php" and "clear_cache.php" that would be the same copies for all servers. 

2) "initiate_clear_cache.php" would do a file_get_contents for each machine in the network calling "clear_cache.php" which would include itself 
for example: 
file_get_contents('http://10.232.12.1/clear_cache.php'); 
file_get_contents('http://10.232.12.2/clear_cache.php'); 
file_get_contents('http://10.232.12.3/clear_cache.php'); 

3) The file called "clear_cache.php" is actually doing the cache clearing for its respective machine. 

4) You only need to make a single request now such as http://www.mywebsite/initial_clear_cache.php and you are done. 

はこれがあなたのために働くなら、私に教えてくださいを。私はこれを.NETとNode.jsで同様に行ってきましたが、PHPでこれを試したことはありませんが、概念は同じです。 :)