收集动态 HTTP 内容以生成复制 HTTP 静态内容

收集动态 HTTP 内容以生成复制 HTTP 静态内容

[我在 stackoverflow.com 上问过这个问题,但他们认为这个列表会更好]

我有一个由 J2EE 提供的缓慢发展的动态网站。服务器的响应时间和负载能力不足以满足客户需求。此外,临时请求可能会意外地影响在同一应用程序服务器/数据库上运行的其他服务。我知道原因,但无法在短期内解决。我了解 HTTP 缓存提示(到期、etags……),出于这个问题的目的,请假设我已经最大限度地利用了减少负载的机会。

我正在考虑对系统中的所有 URL 进行强力遍历以准备缓存,然后将缓存内容复制到客户端附近的地理分散缓存服务器。我正在考虑 Squid 或 Apache HTTPD mod_disk_cache。我想准备一个副本并(手动)复制缓存内容。我不需要从服务器之间的联合或智能。当数据发生变化,使缓存无效时,我将刷新主缓存并更新从服务器版本,可能每晚一次。

有人设置过 http 缓存然后复制它吗?这是个好主意吗?还有其他我应该研究的技术吗?我可以编程,但我更喜欢开源技术解决方案的配置。

谢谢

ps 背景:根本问题当然是:

  1. 数据库服务器上的数据库查询负载。
  2. 您的网络/应用程序服务器上的业务逻辑负载。

响应时间通常为数十秒(请不要问)。如前所述,我无法在短期内解决这些问题(或者说,我正在解决这些问题,但这些问题很多,而且它们不是基于 JSP 的......)。我的客户有美国、欧洲和亚洲用户,因此我非常希望在准备好缓存后复制缓存。对于内部企业用户,类似 Akamai 的缓存并不合适。我想将缓存打包、压缩并通过 FTP 将其返回到从属服务器。在其他情况下,缓存服务器(而不是应用程序)需要位于 DMZ 上

答案1

理论上,一个 bigwget -r文件加上一个 tarball 包就可以解决问题。但实际上,如果你能用 wget 运行(没有实际的内容更改),你通常可以同样轻松地创建一个基本静态的网站(用静态页面替换动态页面)。

如果您对地理位置不是那么热衷,那么一个过度缓存的 varnish 设置就可以完成这项工作——当缓存页面的数据发生变化时,您可以使用 varnish 自动使缓存条目无效,从而实现一些很棒的功能。我不确定您对地理位置的需求是什么。如果您认为它会将性能从“不可接受”变为“可接受”,那可能性很小;而如果您需要地理位置的原因与您当前的性能问题无关,那么您可能需要决定两害相权取其轻——使用 varnish 修复站点性能问题,或者修复应该使用地理位置修复的问题。对于需要花费数秒(!)才能呈现页面的站点,必须有相当大问题才能优先修复。

我看到一位客户在一个运行在线商店的效率极低的 Tomcat 网站上使用了这种 varnish 技巧;他们缓存了所有内容(使用 ESI 来处理客户登录操作),并且让管理界面 prod varnish 在有人更改产品价格或描述时说“清除这些 URL”。这很丑陋,但效果很好,足以让他们维持运营,直到他们的应用程序修复。

答案2

您是否考虑过使用http://memcached.org/

相关内容