2011-12-12 2 views
6

PHP 응용 프로그램을 제공하는 웹 서버가 부하 분산 장치로 설정된 시나리오에 관심이 있습니다.부하 분산 및 APC

부하 분산 장치 뒤에 APC가있는 여러 웹 서버가 있습니다. 모든 요청은로드 밸런서를 거쳐야하며,로드 밸런서는로드 밸런서를 처리 할 웹 서버 중 하나에 보냅니다.

나는 memcached를 분산 캐싱을 위해 사용되어야한다는 것을 이해하지만, 서버 중 하나가 더 나은 성능을 얻을 것이다 걸쳐 나는 다른되지 것입니다 응용 프로그램 구성 및 기타 개체와 같은 각 시스템 캐시 일에 APC 캐시를 가지고 생각 .

이 응용 프로그램의 관리자 영역도 있습니다. 로드 밸런서를 통해 액세스 할 수도 있습니다 (예 : site.com/admin). 이와 같은 경우에 ALL 서버에서 apc_clear_cache을 호출하여 APC 개체 캐시를 지우려면 어떻게해야합니까?

+0

이것은 [Pro 웹 마스터] (http://webmasters.stackexchange.com) 또는 [Server Fault] (http://serverfault.com)에 더 적합 해 보입니다. –

+0

serverfault에서이 질문을 할 수 있습니다. .com. –

답변

6

외부 네트워크에서로드 라운드 로빈을 배포하는로드 균형 조정기로 모든 요청을 라우팅하는 데 사용하는 공용 IP가 있으므로 외부에서 돈을 지불하지 않아도 각 서버의 캐시를 한 번에 지우도록 요청할 수는 없습니다. 주어진 시간에 어떤 것이 사용되는지를 알지 못합니다. 그러나 네트워크 내에서 각 시스템은 고유 한 내부 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에서는 이것을 시도하지 않았지만 개념은 동일하다. :)

관련 문제