2011-12-12 34 views
6

Estoy interesado en un escenario en el que los servidores web que sirven una aplicación PHP estén configurados con un equilibrador de carga.Equilibrio de carga y APC

Habrá múltiples servidores web con APC detrás del equilibrador de carga. Todas las solicitudes deberán pasar por el equilibrador de carga, que luego lo enviará a uno de los servidores web para su procesamiento.

entiendo que memcached se debe utilizar para el almacenamiento en caché distribuido, pero yo creo que tener la memoria caché de APC en cada caché máquina de cosas como las configuraciones de aplicaciones y otros objetos que NO ser diferentes a través de cualquiera de los servidores produciría un rendimiento aún mejor .

También hay un área de administrador para esta aplicación. También se accede a través del equilibrador de carga (por ejemplo, site.com/admin). En un caso como este, ¿cómo puedo llamar al apc_clear_cache para borrar el caché de objetos APC en TODOS los servidores?

+0

Esto parece más apropiado para [Pro Webmasters] (http://webmasters.stackexchange.com) o [Server Fault] (http://serverfault.com) .. –

+0

Es posible que desee preguntar esto en serverfault .com. –

Respuesta

6

Externamente en su red tiene una IP pública que usa para enrutar todas sus solicitudes a su equilibrador de carga que distribuye carga por turno, por lo que no puede solicitar borrar su caché en cada servidor de a uno por vez No sé cuál se está utilizando en un momento dado. Sin embargo, dentro de su red, cada máquina tiene su propia IP interna y se puede llamar directamente. Sabiendo esto, puedes hacer cosas raras/extrañas que funcionan externamente.

Una solución que me gusta es poder presionar una sola URL y hacer todo como http://www.mywebsite/clearcache.php o algo así. Si te gusta eso también, sigue leyendo. Recuerda que puedes autenticarte si quieres para que tu administrador pueda acceder a esto o como lo protejas.

Puede crear una lógica en la que pueda realizar una solicitud externa para borrar su caché en todos los servidores. Cualquiera que sea el servidor que reciba la solicitud para borrar el caché tendrá la misma lógica para comunicarse con todos los servidores para borrar su caché. Esto suena raro y un poco frankenstein pero aquí va la lógica asumiendo que tenemos 3 servidores con direcciones IP 10.232.12.1, 10.232.12.2, 10.232.12.3 internamente:

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. 

que me haga saber si esto funciona para usted. He hecho esto en .NET y Node.js de forma similar, pero aún no lo he probado en PHP, pero estoy seguro de que el concepto es el mismo. :)

Cuestiones relacionadas