负载均衡和APC

6

我对一种将服务PHP应用程序的Web服务器设置为负载均衡器的情景很感兴趣。

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

我知道应该使用memcached进行分布式缓存,但我认为每台机器上的APC缓存可以缓存诸如应用程序配置和其他对象之类的东西,并且这些东西在任何服务器上都不会有所差异,这可以提高性能。

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


这似乎更适合Pro WebmastersServer Fault - Jared Farrish
你可能想在serverfault.com上提问。 - Mike Purcell
1个回答

6
在您的网络中,您有一个公共IP用于将所有请求路由到负载均衡器,该负载均衡器会循环分配负载,因此在外部,您无法逐个请求清除每个服务器上的缓存,因为您不知道任何时候正在使用哪个服务器。但是,在您的网络内,每台机器都有自己的内部IP,并且可以直接调用。了解这一点后,您可以做一些有趣/奇怪的事情,这些事情在外部确实起作用。
我喜欢的解决方案是能够点击单个URL并完成所有操作,例如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中尝试过,但我相信概念是相同的。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接