1

我希望在 PHP 应用程序中编写一个基本的 PHP 文件缓存驱动程序,将所有流量路由到前端控制器。例如,假设使用 apache mod_proxy_balancer 进行以下简化设置:

在此处输入图像描述

在单服务器环境中,我会将请求响应缓存在磁盘上与请求 URI 匹配的目录结构中。然后,像下面这样简单的 apache 重写规则可以允许 apache 返回静态缓存文件(如果它们存在)并完全避免 PHP 进程:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /front_controller.php [L]

显然,这在负载平衡的环境中是有问题的,因为缓存文件只会被写入提供请求并缓存结果的特定 PHP 服务器上的磁盘。

解决问题...

所以,为了解决这个问题,我想我可以敲出一些代码,让各个后端 PHP 服务器向负载均衡器写入/删除缓存数据。但是,由于对 mod_proxy_balancer 的功能(以及任何其他负载平衡选项,真的)一无所知,我需要对以下问题进行一些外部验证:

还有问题...

  1. 是否可以像上面的 RewriteRules 那样进行某种形式的检查,让前端负载均衡器在向其中一个后端服务器发送请求之前提供静态文件?
  2. 这甚至是可取的吗?负载均衡器是否应该被允许专门路由流量而不为提供静态内容而烦恼?
  3. 在 PHP 服务器级别的缓存文件上使用可接受的 TTL 并处理可接受的陈旧缓存重叠级别会更好吗?

最后,如果这太宽泛或已经得到回答,请道歉;由于上述对负载平衡主题的无知,我不确定要搜索什么。

4

2 回答 2

0

对于最简单的解决方案,您可以使用 NFS。通过 NFS 在所有 PHP 服务器上挂载文件系统,它就像本地存储一样,但对所有服务器都是一样的。要更复杂一点,请使用 Nginx 或 Varnish 之类的东西,它们可以缓存 NFS 文件系统上的内容。

使用 memcache 也是一种可行的替代方案,它是一种基于分布式内存的存储系统。memcache 的好处是您不需要管理缓存清除或清除,如果您不想这样做。您可以为每个缓存项设置 TTL,或者如果 memcache 已满,它会自动清除缓存项。

于 2012-02-09T01:37:40.030 回答
0

这听起来像是 Nginx 可以轻松完成的事情,并且无需写入磁盘上的文件。

Nginx 可以做负载均衡和缓存,这里有一个教程:

http://nathanvangheem.com/news/nginx-with-built-in-load-balancing-and-caching

于 2012-02-08T23:30:31.497 回答