我们正在运行的 API 有时会在某些时段出现非常大的流量。正常情况下使用varnishstat我们可以看到需要0个后端连接。我们将此解释为 Varnish 能够成功地提供缓存中的所有数据。
当流量激增时,我们会看到后端连接激增,这反过来会打开数据库连接,导致数据库资源激增。 Varnish 似乎在高流量时被绕过。
我们调整了 MySQL 中的 max_connections 设置并调整了两个 varnish 配置文件。我们运行 4 个线程池,最小 200 个线程,最大 4000 个。我们为 varnish 分配了大量内存(15GB 中的 8GB)。
问题是为什么后端连接的流量激增如此之多?这肯定是 Varnish 应该防止的。我假设我们的配置出了问题,但无法找到有关我们可以更新哪些内容的帮助,以防止大量请求在高流量时绕过 Varnish 。
感谢任何帮助
最佳答案
大多数峰值后端连接与您的 Varnish 配置关系不大,但与站点的缓存能力有很大关系。
- 是否有 Cookie 会阻止您有效地进行缓存?您可以选择剥离它们或删除除所选之外的所有内容, Varnish 网站上有这两种方法的示例。
- 进行 varnishstat 并检查高峰期间的命中率。这是一个好的缓存命中率吗?和低负载时一样吗?如果在低负载下它相同或更高,那么随时可以轻松改进它。
- 执行
varnishtop -i txurl
查看哪些请求最常发送到后端服务器。也许是因为 header 错误而没有缓存某些 URL?也许有些页面可以缓存更长时间?也许页面的某些部分可以通过 ESI 进行缓存? - 确保您的 Varnish 在高峰期间不会崩溃(使其缓存为空)。您可以通过
cat syslog | grep "varnish"
查看崩溃信息
关于mysql - 高流量下的 Varnish 高数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17482618/