2011-12-12 194 views
6

我對服務PHP應用程序的web服務器與負載平衡器建立方案感興趣。負載均衡和APC

負載平衡器後面會有多個APC的網絡服務器。所有請求都必須通過負載均衡器,負載均衡器然後將其發送到其中一個Web服務器進行處理。我知道memcached應​​該用於分佈式緩存,但我認爲在每臺機器緩存上都有APC緩存,例如應用程序配置和其他對象,在任何服務器上的不會會有所不同,這樣會產生更好的性能。

此應用程序還有一個管理員區域。它也可以通過負載平衡器訪問(例如,site.com/admin)。在這種情況下,我怎樣才能撥打apc_clear_cache來清除所有服務器上的APC對象緩存?

+0

這似乎更適合[專業網站管理員](http://webmasters.stackexchange.com)或[服務器故障](http://serverfault.com).. –

+0

您可能想問這對serverfault .COM。 –

回答

6

在您的網絡外部,您有一個公共IP用於將所有請求路由到您的負載均衡器,該負載均衡器負責分發負載循環,因此您無法一次性清除每個服務器上緩存的請求,因爲您不會在任何時候都不知道使用哪一個。但是,在您的網絡中,每臺機器都有自己的內部IP,並且可以直接調用。知道這一點,你可以做一些有趣/奇怪的事情,外部工作。

我喜歡的解決方案是能夠打一個URL並完成一切,如http://www.mywebsite/clearcache.php或類似的東西。如果你也喜歡,請繼續閱讀。記住,如果你喜歡,你可以通過認證,這樣你的管理員就可以實現這一點,或者你可以保護它。

您可以創建邏輯,您可以從外部發出一個請求來清除所有服務器上的緩存。無論哪個服務器收到清除緩存的請求都將具有與所有服務器通信以清除其緩存的相同邏輯。這聽起來有些不可思議,有點科學怪人但在這裏不用的邏輯假設我們有3個服務器採用IPS 10.232.12.1,10.232.12.2,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中嘗試過,但我確定這個概念是相同的。 :)