Nginx缓存在多个服务器之间共享


9

我们有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年

1
好的,那么您可以尝试使用第三方Nginx SRCache模块将缓存的内容存储在专用的Memcached和Redis中。
Max Kochubey 2014年

1
@Brad这很hacky,所以我不能将其作为答案:我们目前有一个每晚运行的脚本,该脚本在我们服务器上的nginx缓存目录之间使用rsync,以使每个目录与其他所有文件中的最新缓存文件保持最新。脚本以优美的nginx重新启动和成功检查结束。就像我说的那样,它很hacky,但是在高吞吐量系统上对我们有用。
mVChr 2014年

@mVChr有趣。您是否尝试过连续运行rsync或类似工具?最后,我最终使Redis可以正常工作,但是由于整个Redis集合必须在内存中,因此这并不允许很大的缓存。16GB可以快速填满我的应用程序。
布拉德(Brad)2014年

Answers:


1

关于此问题,似乎在https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-1/上有一篇相当新的博客文章。如果您运行两个以上的nginx缓存服务器,则第一个示例可能会很有用。

尤其是对于我当前的用例来说,帖子的第二部分听起来很有趣,在该用例中,我想自动将更改的项目重新爬到缓存中。

它也应该与NGINX的开源版本一起使用。基本上,它通过代理从每个NGINX服务器(Nginx-Cache1-> NGinx-Cache2-> Origin-Server)级联的请求来工作,每个服务器从相关的上游缓存,如果需要,也可以创建HA群集。 https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-2/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.