mysql - 高流量下的 Varnish 高数据库连接

标签 mysql apache caching varnish varnish-vcl

我们正在运行的 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/

相关文章:

MySQL 5.7 Windows,表键问题?

mysql - SQL 的 Replace() 如何匹配?

regex - 如何在 Apache RewriteRule 中向正则表达式添加 +(加号)?

javascript - 缓存动态加载的图像

c# - ASP.NET MVC : How to distinguish between two pages with same virtual absolute path when removing one from the output cache

c++ - 缓存行中存储了多少数组?

mysql - MySQL 会自动优化子查询吗?

MySQL 显示重复项

java - Dspace安装成功但部署后不显示页面

php - WampServer橙色图标