2011-12-12 15 views
6

Sono interessato a uno scenario in cui i server Web che servono un'applicazione PHP sono configurati con un servizio di bilanciamento del carico.Bilanciamento del carico e APC

Ci saranno più server Web con APC dietro il bilanciamento del carico. Tutte le richieste dovranno passare attraverso il servizio di bilanciamento del carico, che quindi lo invierà a uno dei server Web da elaborare.

Capisco che memcached dovrebbe essere utilizzata per il caching distribuito, ma penso che avere la cache APC su ogni cose di cache macchina come le configurazioni delle applicazioni e altri oggetti che NON essere diversi attraverso uno dei server sarebbe cedere prestazioni ancora migliori .

C'è anche un'area amministratore per questa applicazione. È anche accessibile tramite il servizio di bilanciamento del carico (ad esempio, site.com/admin). In un caso come questo, come posso chiamare lo apc_clear_cache per cancellare la cache dell'oggetto APC sui server ALL?

+0

Questo sembra più appropriato per [Pro Webmasters] (http://webmasters.stackexchange.com) o [Server Fault] (http://serverfault.com) .. –

+0

Si consiglia di chiedere questo su serverfault .com. –

risposta

6

Esternamente nella rete è presente un IP pubblico che si utilizza per instradare tutte le richieste al servizio di bilanciamento del carico che distribuisce il round robin di carico in modo che all'esterno non sia possibile effettuare una richiesta per svuotare la cache su ciascun server uno alla volta perché non si so quale viene utilizzato in un dato momento. Tuttavia, all'interno della rete, ogni macchina ha il proprio IP interno e può essere richiamata direttamente. Sapendo questo puoi fare cose divertenti/strane che funzionano esternamente.

Una soluzione che mi piace è poter colpire un singolo URL e ottenere tutto come http://www.mywebsite/clearcache.php o qualcosa del genere. Se ti piace anche quello, continua a leggere. Ricorda che puoi averlo autenticato se lo desideri, in modo che il tuo amministratore possa colpirlo o comunque proteggerlo.

È possibile creare la logica in cui è possibile effettuare esternamente una richiesta per svuotare la cache su tutti i server. Qualunque server riceva la richiesta di svuotare la cache avrà la stessa logica per parlare con tutti i server per svuotare la cache. Questo suona strano e un po 'Frankenstein, ma qui va la logica assumendo abbiamo 3 server con 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. 

farmi sapere se questo funziona per voi. Ho fatto questo in .NET e Node.js simili ma non ho ancora provato questo in PHP, ma sono sicuro che il concetto è lo stesso. :)

Problemi correlati