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