ColdFusion Web应用程序级别查询缓存

时间:2008-12-15 14:23:35

标签: performance caching coldfusion cluster-computing

我们有许多Web服务器,每个服务器都运行一个版本的ColdFusion。群集前面有一个负载均衡器。

显然,这些服务器中的每一个都有自己的CF应用程序运行,这实现了CF应用程序级别的查询缓存。但是,由于所有这些服务器都为一个Web应用程序提供服务,因此许多缓存查询都在CF应用程序实例中重复。

有没有办法在Web应用程序级别实现查询缓存,即跨多个CF实例。或者如果没有,是否有更好的方法来设置我们的集群以最小化数据库服务器上的负载?

我希望自己明确表示:)

干杯, 夏兰

5 个答案:

答案 0 :(得分:3)

您可以考虑尝试memcached

答案 1 :(得分:2)

我会看看memcached - 有一个开源项目,可以在这里将它集成到ColdFusion中:cfmemcached

如果你碰巧使用Railo,我听说它也有一个“集群”范围。

如果这两个服务器都不可用或没有吸引力,您可以设置一个服务器来处理要缓存的查询,然后直接通过Web服务从该服务器获取它们。这样,您可以将它们缓存在一台服务器上,这将减少整个群集的内存占用量,并降低访问数据库服务器的频率。您可能希望将处理查询缓存的服务器从群集中移出,然后将其专门用于查询缓存以及其他任何您希望从前置机器卸载的其他内容,而其他服务器处理外部流量。

答案 2 :(得分:1)

决定在我们的每个Web服务器上使用EHCache,因为它允许部分页面缓存,并且可以扩展到集中式缓存服务器,例如memcached。到目前为止非常满意。

非常感谢所有的建议!

答案 3 :(得分:0)

您可以跨服务器集群并在服务器之间共享应用程序范围,但您必须使用企业版ColdFusion。更多信息请访问:http://livedocs.adobe.com/coldfusion/7/htmldocs/00001774.htm

答案 4 :(得分:0)

如果打开j2ee会话,会话范围可以在ColdFusion中进行聚类。但是,所有集群作用域都是在服务器之间复制数据。因此,查询仍将在所有3台服务器上复制。所以你会回到现在的位置。

但是,我只使用cfquery的CachedWithin属性而不是使用应用程序范围。这样您就可以让CF引擎进行实际的缓存管理。防止内存失控,并且不会增加在服务器之间复制大量数据的开销。