2011-12-12 150 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中尝试过,但我确定这个概念是相同的。 :)