【问题标题】:Load balancing and APC负载均衡和 APC
【发布时间】:2012-01-18 03:39:41
【问题描述】:

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

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

我知道 memcached 应该用于分布式缓存,但我认为让每台机器上的 APC 缓存缓存诸如应用程序配置和其他在任何服务器之间不会不同的对象会产生更好的性能。

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

【问题讨论】:

标签: php load-balancing apc


【解决方案1】:

在您的网络外部,您有一个公共 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 中尝试过,但我确信这个概念是相同的。 :)

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 2020-04-17
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多