在负载平衡的服务器环境中PHP请求文件缓存

时间:2012-02-08 21:09:33

标签: php load-balancing mod-proxy-balancer

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

进行以下简化设置

enter image description here

在单服务器环境中,我会在与请求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 个答案:

答案 0 :(得分:0)

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

Nginx可以进行负载平衡和缓存,这是一个关于它的教程:

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

答案 1 :(得分:0)

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

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