缓存:多网站环境中的 Nginx 上的 Varnish 与 fastcgi_cache

缓存:多网站环境中的 Nginx 上的 Varnish 与 fastcgi_cache

我设置了 VPS 并安装了多个网站。其中一些网站是 WP 网站,还有一些是其他动态网站。

我对添加某种反向代理/缓存层感兴趣。但是我不想缓存所有网站...

我看到很多人推荐使用 Varnish。我发现 Varnish 的问题是它占用 80 端口并缓存所有内容。

当我在寻找解决方案或避免某些网站缓存的方法时,我发现了 fastcgi_cache。显然,您可以直接通过 Nginx 缓存到文件中,然后静态地提供它。我还看到过可以从 Nginx 缓存到 memcached 中,但我还不知道怎么做。

无论如何,以下是我的选择:1. 使用 Varnish 并以某种方式调整配置文件以根据域名传递请求。2. 在 Nginx 上使用 fastcgi_cache。3. 使用三明治。让 Nginx 监听端口 80,提供静态文件并将所有 php 文件发送到另一个端口上的 Varnish,这会将所有未缓存的用户传递到另一个 Nginx 实例。

您认为我应该怎么做?

谢谢。

答案1

您可以让 Varnish 根据域名传递一些请求,这非常容易,并且 Varnish 不会明显减慢您未缓存的网站的速度。

您只需在 vcl_recv 中添加一些 VCL 代码即可:

if (req.http.Host == "www.pass_this_thru.com") {
    return(pass);
}

答案2

我认为这取决于您预计获得的负载,但两个系统选择的模型在架构上是不同的。

首先,nginx 使用基于事件的模型来处理请求,而 Varnish 使用基于线程的模型。

Varnish 将其缓存内容放置在非常高效的 critbit 树中。我找不到 nginx 使用的是什么实现。

nginx 应该更高效,因为它使用基于非阻塞事件的模型来均匀分布负载,尽可能减少争用,但是如果从缓存中查找时间太慢,您可能会认为它会抵消一切。

Varnish 创建线程池(通常包含多个线程,约 500 个)来处理多进程。这里的成本在于上下文切换,特别是当您有许多请求需要处理时。

我认为,随着您扩大核心数量以应对竞争,Varnish 的性能会更好,而且其非常好的缓存算法使其查找和响应非常快。如果您拥有大量核心并且需要交付大量流量/内容,请使用 Varnish。

另一方面,Nginx 在管理资源方面采用了一种不那么强硬的方法,我认为低功耗系统上的小型/中型缓存可能会在效率和每秒请求数方面产生更好的价值。

总体而言,Varnish 在专用系统上效果最佳,至少2 个 CPU/核心。随着 CPU 的增加,它将线性扩展。

Nginx 可能最适合在缓存压力不那么大的小型多角色系统上运行。它也可以线性扩展,但我怀疑它的缓存算法和实现不如 varnish 好,当流量达到高水平时,这可能会成为性能瓶颈。

答案3

我想你会对此感兴趣:测试结果:Nginx 和 Varnish

相关内容