performance - 这是在大型网站中为动态内容生成静态页面的一种好方法,以及如何正确管理静态页面

标签 performance nginx architecture varnish

我有一个拥有数百万个页面的网站。页面上的内容存储在数据库中,但数据不会经常更改。因此,为了提高wesite的性能并减少Web应用程序的部署成本,我想为动态内容生成静态页面,并在内容更改时刷新页面。但是我非常担心如何管理这些大量的页面。我应该如何存储这些页面?当Web服务器处理许多请求时,是否有可能导致IO问题?有没有更好的解决方案来解决这个问题?我应该使用 Varnish 来解决这个问题吗?

最佳答案

Varnish 看起来是一个很好的用例。基本上,您不会静态地生成完整站点,而是增量地,每次有新请求的内容 Varnish 尚未缓存时。

编辑以涵盖评论:

  • 如果所有 Varnish 节点都关闭,您将无法获取内容,就像数据库关闭或负载平衡器关闭一样。只需使用两个 Varnish 负载平衡即可实现高可用性,例如 keepalived。
  • 如果重新启动 varnish,缓存将被清除,除非您使用 Varnish Plus/Enterprise with MSE。如果您不经常重新启动(配置更改不需要重新启动),这可能不是问题,因为数据库仍然具有重新填充缓存的数据。
  • Varnish 有很多选项可以使内容失效:仅清除一个对象、重新验证、禁止针对整个子域或子树、xkeys 用于基于标签的失效。
  • 关于performance - 这是在大型网站中为动态内容生成静态页面的一种好方法,以及如何正确管理静态页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53046527/

    相关文章:

    sql-server - 动态查询优化

    c# - 从 char[] 创建不安全的字符串

    javascript - 如何在 Chrome 的性能分析器中调试匿名 JavaScript 函数?

    performance - rdpmc 的 CR4.PCE 已清除

    php - 将所有 PHP 请求重定向到 Nginx 重写中的路由器(Tonic Framework)

    nginx - 如何在 nginx "or"语句中使用 "if"运算符?

    nginx - Apache ab 不起作用 - ab : invalid URL when testing python cyclone

    php - Laravel + Vue 前端与可选的服务器端 Blade 渲染解耦

    c# - 具有 Entity Framework 的 WCF 存储库服务模式

    c# - 我如何根据它们传播的客户端应用程序实例对套接字连接进行分组?