负载均衡和APC

时间:2011-12-12 02:32:34

标签: php load-balancing apc

我对使用负载均衡器设置为PHP应用程序提供服务的Web服务器感兴趣。

在负载均衡器后面会有多个带有APC的Web服务器。所有请求都必须通过负载均衡器,然后负载均衡器将其发送到其中一个Web服务器进行处理。

我知道memcached应​​该用于分布式缓存,但我认为在每台机器上都有APC缓存缓存诸如应用程序配置和其他任何服务器上 NOT 不同的对象之类的东西产量甚至更好。

此应用程序还有一个管理员区域。它也可以通过负载均衡器(例如,site.com/admin)访问。在这种情况下,如何调用apc_clear_cache清除所有服务器上的APC对象缓存?

1 个答案:

答案 0 :(得分:6)

在您的网络外部,您有一个公共IP,用于将您的所有请求路由到负载均衡器并分配负载循环,因此您无法在每个服务器上请求清除缓存,因为您不能知道在任何给定时间使用哪一个。但是,在您的网络中,每台计算机都有自己的内部IP,可以直接调用。知道了这一点,你可以做一些有趣/奇怪的事情,在外部工作。

我喜欢的解决方案是能够点击一个网址并完成所有工作,例如http://www.mywebsite/clearcache.php或类似的东西。如果您也喜欢,请继续阅读。请记住,如果您愿意,可以对此进行身份验证,以便您的管理员可以点击这个或者保护它。

您可以创建逻辑,从外部发出一个请求以清除所有服务器上的缓存。无论哪个服务器收到清除缓存的请求,都会使用相同的逻辑与所有服务器通信以清除其缓存。这听起来很奇怪,有点弗兰肯斯坦,但这里的逻辑假设我们有3台服务器内部IP为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中尝试过这个,但我确信这个概念是一样的。 :)