我们有8个使用Nginx的REST-ish API服务器,使用FastCGI和PHP-FPM来处理请求。我们目前正在使用Nginx的FastCGI缓存(如的指令fastcgi_cache_path
)。这意味着将缓存API响应,但是每个服务器都有一个单独的缓存。
是否有一种在所有八台服务器之间共享缓存存储的好方法?
我们已经考虑过将Redis用作共享存储,但是可用的模块似乎需要更改应用程序。在某些情况下,我们可能希望将响应缓存在我们控制范围之外(通过HTTP到外部API)。理想情况下,可以使用替代品来替代FastCGI和HTTP响应的Nginx内置缓存。
为什么不在前端层(Nginx)而不是后端层(PHP应用程序)进行缓存?
—
Max Kochubey 2014年
@hangover我没有理由重新发明轮子。Nginx缓存运行良好且快速。如果我们完全可以避免通过应用程序运行请求的开销,那么我们可以使事情保持良好状态和快速性。Nginx在5毫秒内响应了我们的缓存请求。即使启动PHP应用程序以提供缓存的响应,启动它的速度也可能比原来慢10倍。Nginx缓存现在对我们来说运作良好,我们只需要在许多服务器之间分配该缓存即可。
—
布拉德(Brad)2014年
好的,那么您可以尝试使用第三方Nginx SRCache模块将缓存的内容存储在专用的Memcached和Redis中。
—
Max Kochubey 2014年
@Brad这很hacky,所以我不能将其作为答案:我们目前有一个每晚运行的脚本,该脚本在我们服务器上的nginx缓存目录之间使用rsync,以使每个目录与其他所有文件中的最新缓存文件保持最新。脚本以优美的nginx重新启动和成功检查结束。就像我说的那样,它很hacky,但是在高吞吐量系统上对我们有用。
—
mVChr 2014年
@mVChr有趣。您是否尝试过连续运行rsync或类似工具?最后,我最终使Redis可以正常工作,但是由于整个Redis集合必须在内存中,因此这并不允许很大的缓存。16GB可以快速填满我的应用程序。
—
布拉德(Brad)2014年