我希望在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(以及任何其他负载平衡选项)的功能大多无知,我需要对以下问题进行一些外部验证:
最后,如果这是太宽泛或已经得到回答,请道歉;由于我之前对负载均衡主题的无知,我不确定要搜索什么。
答案 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已满,它会自动清除缓存的项。