获取动态HTTP内容以生成复制HTTP静态内容

获取动态HTTP内容以生成复制HTTP静态内容,http,dynamic,caching,replication,Http,Dynamic,Caching,Replication,我有一个缓慢发展的动态网站,由J2EE提供服务。服务器的响应时间和负载能力不足以满足客户端的需要。此外,临时请求可能会意外地影响在同一应用服务器/数据库上运行的其他服务。我知道原因,短期内无法解决。我理解HTTP缓存提示(到期、etags…),出于这个问题的目的,请假设我已经尽了最大可能减少负载 我正在考虑对系统中的所有URL进行暴力遍历,以初始化缓存,然后将缓存内容复制到客户端附近的geodispersed缓存服务器。我在考虑Squid或ApacheHttpd mod_disk_缓存。我想初始

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

我正在考虑对系统中的所有URL进行暴力遍历,以初始化缓存,然后将缓存内容复制到客户端附近的geodispersed缓存服务器。我在考虑Squid或ApacheHttpd mod_disk_缓存。我想初始化一个副本并(手动)复制缓存内容。我不需要奴隶之间的联盟或情报。当数据发生更改,缓存失效时,我将刷新主缓存并更新从版本,可能每晚更新一次

有人这样做过吗?这是个好主意吗?我还应该研究其他技术吗?我可以对此进行编程,但我更喜欢配置开源技术解决方案


谢谢

我以前用过它来减少动态创建的RSS提要的负载,而且效果很好。只需进行一些仔细的配置和调整,就可以让它按您想要的方式工作。

使用带预处理的缓存服务器是一个很好的主意(我使用wget和Squid也做了同样的事情)。然而,在这种情况下,它可能是不必要的

听起来您的数据是相当静态的,问题是服务器负载,而不是网络带宽。一般来说,问题存在于以下两个方面之一:

  • 数据库服务器上的数据库查询加载
  • web/应用服务器上的业务逻辑负载
  • 这是一本书

    通过简单地缓存查询结果,我看到了巨大的性能提升。即使添加持续时间为60秒的缓存,也可以显著降低数据库服务器上的负载。JSP有几个用于内存缓存的选项

    另一个可用的领域是输出缓存。这意味着页面的内容只创建一次,但输出会被多次使用。这大大降低了web服务器的CPU负载


    我的经验是使用ASP,但JSP页面上也有完全相同的机制。根据我的经验,即使使用少量缓存,每秒的最大请求数也会增加5-10倍。

    我在这里使用分层缓存;按照您的建议,在应用服务器前面部署Squid作为反向代理服务器,然后在指向源缓存的每个客户端站点部署Squid


    如果地理延迟不是什么大问题,那么您可能只需要按计划启动源缓存,然后让远程缓存根据客户端请求启动源缓存就可以了。换句话说,除了启动源缓存外,只需在客户端部署缓存就可以了。

    问题当然是#1和#2:响应时间通常是几十秒(请不要问)。如前所述,我无法在短期内解决这些问题(或者更确切地说,我正在解决这些问题,但它们有很多,而且它们不是基于JSP的,而且。我有美国、欧洲和亚洲用户的客户,因此我非常希望在启动缓存后复制缓存。对于内部公司用户,类似Akamai的服务是不合适的。我想要tar,压缩缓存,然后用FTP把它传还给奴隶。在其他情况下,缓存服务器(而不是应用程序)需要位于DMZ上。听起来您已经选择了代理服务器解决方案。代理实现问题的最佳答案是serverfault.com。我的拙见是,在设计和实现分布式代理服务器时,最好是在应用程序中编写一些缓存代码。缓存API适用于所有主要框架。