我有一个从J2EE提供的慢慢发展的动态网站。服务器的响应时间和负载容量不足以满足客户需求。此外,临时请求可能会意外地影响在同一应用程序服务器/数据库上运行的其他服务。我知道原因,不能在短期内解决它们。我理解HTTP缓存提示(expiry,etags ....),并且出于这个问题的目的,请假设我已经最大限度地减少了负载。
我正在考虑对系统中的所有URL进行强力遍历以填充缓存,然后将缓存内容复制到客户端附近的地理分散缓存服务器。我在考虑Squid或Apache HTTPD mod_disk_cache。我想准备一个副本并(手动)复制缓存内容。我不需要奴隶之间的联邦或情报。当数据发生变化,缓存失效时,我会刷新主缓存并更新奴隶版本,可能每晚一次。
有人这样做过吗?这是个好主意吗?我还应该调查其他技术吗?我可以编程,但我更喜欢配置开源技术解决方案
由于
答案 0 :(得分:0)
之前我曾使用Squid来减少动态创建的RSS Feed的负载,并且效果很好。只需要仔细配置和调整就可以按照自己的方式工作。
答案 1 :(得分:0)
使用已准备好的缓存服务器是一个很好的主意(我使用wget和Squid做了同样的事情)。但是,在这种情况下可能没有必要。
听起来您的数据是相当静态的,问题是服务器负载,而不是网络带宽。通常,问题存在于以下两个方面之一:
这是JSP-specific overview of caching options。
通过简单地缓存查询结果,我看到了巨大的性能提升。即使添加持续时间为60秒的缓存也可以大大减少数据库服务器的负载。 JSP有几种内存缓存选项。
另一个可用的区域是输出缓存。这意味着页面的内容只创建一次,但输出多次使用。这大大减少了Web服务器的CPU负载。
我的经验是使用ASP,但在JSP页面上可以使用完全相同的机制。根据我的经验,即使是少量的缓存,您也可以期望每秒最大请求数增加5-10倍。
答案 2 :(得分:0)
我会在这里使用分层缓存;如您的建议,在您的应用服务器前部署Squid作为反向代理服务器,但随后在指向您的原始缓存的每个客户端站点部署Squid。
如果地理延迟不是一个大问题,那么你可能就像你计划的那样只是启动原始缓存,然后让远程缓存根据客户端请求使自己完全脱离。换句话说,除了启动原始缓存之外,只需在客户端部署缓存就可能需要做的事情。