Varnish 与其他反向代理的比较

Varnish 与其他反向代理的比较

我正在与一家组织合作,该组织已部署 Varnish 作为其所有网络流量的缓存反向代理。他们的流量由大量客户生成的动态网站组成,而通常的静态资产集合则挂在一边。

虽然我试着喜欢 Varnish(我认为原则上它具有非常好的架构),但我在管理它和解决问题时遇到了一些麻烦,所以我想知道它是否真的是正确的选择。我过去曾使用 Squid 作为反向代理,但作用不同,所以我没有明确的比较基础。

我的问题针对的是那些在生产中部署过 Varnish 或认真评估过它和其他替代方案的人:你是坚持使用 Varnish 还是最终使用了其他反向代理?你坚持使用 Varnish 或更换它的关键点是什么?如果你使用了其他方案,你最终使用了什么?

答案1

嗯,我在我的网络服务器上运行 Varnish,主要是为了性能原因,尽管它的负载平衡功能也很方便。

我的用例是在Django的网站,它对页面加载性能有奇效。我能够直接从缓存中提供大多数页面,并且可以轻松处理大量访问者。

我选择 Varnish 的原因主要是性能/可扩展性。主要有以下几点:

  • Varnish 让内核管理虚拟内存,而 Squid 尝试保留单独的磁盘和内存缓存,这可能会导致内核和 Squid 对将什么内容分页到磁盘发生争吵。
  • Varnish 使用 VCL,它自己的特定领域配置语言,它通过 C 编译为机器代码。如果您的配置中有很多逻辑(条件标头剥离等),那么这是一个非常实际的性能优势。

根据我的经验,在大多数情况下,Varnish 的性能比 Squid 略好,在流量高峰时性能要好得多。另一方面,正确配置 Varnish 需要搜索一些邮件列表,因为网络上没有像 Squid 那样多的现成的、适合您特定用例的文档——主要是因为 Varnish 是一个相当年轻的项目。

答案2

我花了很长时间尝试让 Varnish 1.x 在标准的 Linux/Dell 硬件上稳定运行,但它总是以某种奇怪的方式挂起,并且它的看门狗会重新启动它。这很好,除了来之不易的缓存没有在其他地方持久保存...

话虽如此,你真的在​​用正确的工具吗?如果你想要一个反向代理,它将缓存请求的结果(假设您提供了高质量的缓存标头),那么 varnish 是一个不错的选择。希望它在 2.0 版本中更加稳定

但是,如果您正在运行 *onRails 站点并且希望在多个后端服务器上实现负载平衡,那么 HAProxy 或 Nginx 可能是最佳选择。如果您不需要任何复杂的 URL 逻辑(重定向、正则表达式匹配以重写旧 URL 等),那么 HAProxy 就很合适。如果您确实需要更强大的功能,那么可以尝试 nginx。

相关内容