1

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

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

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

我希望我说清楚了:)

干杯,Ciaran

4

5 回答 5

3

你可以考虑试试memcached 。

于 2008-12-15T14:58:42.307 回答
2

我会看看 memcached - 这里有一个用于将它集成到 ColdFusion 中的开源项目:cfmemcached

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

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

于 2008-12-31T03:30:03.680 回答
1

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

非常感谢所有的建议!

于 2009-04-07T08:19:18.063 回答
0

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

于 2009-01-14T00:07:00.913 回答
0

如果您打开 j2ee 会话,会话范围可以聚集在 ColdFusion 中。但是集群范围所做的只是跨服务器复制数据。因此查询仍将被复制到所有 3 台服务器上。所以你会回到你现在的位置。

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

于 2009-01-16T22:19:09.703 回答