2011-12-12 47 views
6

ben bir PHP uygulaması hizmet veren web sunucuları bir yük dengeleyici ile ayarlanmış bir senaryo ile ilgileniyorum.Yük dengeleme ve APC

yük dengeleyici APC ile birden webserverlarda olacak. Tüm istekler daha sonra işlemek üzere, web sunucularından birine gönderir yük dengeleyici, geçmesi gerekecektir.

Ben memcached dağıtılan önbelleğe alma için kullanılması gerektiğini anlıyorum ama sunucularından herhangi bile daha iyi performans doğuracak karşısında ben farklı DEĞİL olacak uygulama yapılandırmaları ve diğer nesneler gibi her makine önbellek şeylere APC önbelleğini sahip düşünüyorum .

da bu uygulama için bir yönetici alanı vardır. Yük dengeleyici üzerinden de erişilebilir (örneğin, site.com/admin). Böyle bir durumda, nasıl TÜM sunucularında APC nesne önbelleği temizlemek için apc_clear_cache arayabilirim?

+0

Bu, [Pro Web Yöneticileri] (http://webmasters.stackexchange.com) veya [Sunucu Hatası] (http://serverfault.com) için daha uygun görünüyor .. –

+0

Bunu sunucu hatalarından sormak isteyebilirsiniz. .com. –

cevap

6

Ağınızda harici olarak, tüm isteklerinizi, yük yuvarlak robinini dağıtan yük dengeleyicinize yönlendirmek için kullandığınız herkese açık bir IP adresiniz olur, bu nedenle, her sunucuda önbelleğinizi temizlemenizi istemezsiniz. Herhangi bir zamanda hangisinin kullanıldığını bilmiyorum. Ancak, ağınızda her makinenin kendi dahili IP'si vardır ve doğrudan çağrılabilir. Bunu bilerek dışarıdan çalışan bazı komik/garip şeyler yapabilirsiniz.

Sevdiğim bir çözüm böyle gibi http://www.mywebsite/clearcache.php veya bir şey yapmış herşeyi tek bir URL vurmak ve elde edebilmek olmaktır. Bunu da beğenirseniz okumaya devam edin. Bunu isterseniz, yöneticinizin bunu yapmasına izin verebileceğini veya koruyabileceğini unutmayın.

Tüm sunucularda önbelleğinizi temizlemek için harici bir istekte bulunabileceğiniz bir mantık oluşturabilirsiniz. Hangi sunucu önbelleği temizlemek için istek alırsa, önbelleğini temizlemek için tüm sunucularla konuşmak için aynı mantığa sahip olacaktır. Bu garip ve biraz frankenstein geliyor ama burada biz IP'ler 10.232.12.1, 10.232.12.2 ile 3 sunucularını, 10.232.12.3 içten olduğunu varsayarak mantığı şöyledir:

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. 

bu sizin için çalışan varsa bana bildirin. Bunu .NET ve Node.js'de yaptım ama bunu henüz PHP'de denemedim ama eminim ki konsept aynı. :)