2008-12-15 71 views
1

我們有許多Web服務器,每個服務器運行一個ColdFusion版本。該集羣在其前面有一個負載均衡器。ColdFusion Web應用程序級別查詢緩存

很明顯,這些服務器中的每一個都有自己的CF應用程序,它們在CF應用程序級別上實現了查詢緩存。但是,由於所有這些服務器都爲一個Web應用程序提供服務,因此這些緩存的查詢中的很多會在CF應用程序實例中重複使用。

是否有任何方式在Web應用程序級別(即跨越多個CF實例)實現查詢緩存?或者如果沒有,是否有更好的方法來設置我們的集羣以最大限度地減少我們的數據庫服務器上的負載?

我希望我自己清楚:)

乾杯, 夏蘭

回答

1

決定在我們的每個Web服務器上使用EHCache,因爲它允許部分頁面緩存,並且可以擴展到集中式緩存服務器,例如memcached。到目前爲止非常滿意。

非常感謝所有的建議!

3

你可能會考慮給予memcached一試。

+0

謝謝。我會檢查一下 - 我有一百萬個和一個關於它的問題,但我會先閱讀常見問題解答:-P – 2008-12-15 16:40:49

+0

我們也正在密切關注EHCache(http://ehcache.sourceforge.net/)過程替代。 – 2008-12-22 11:24:09

2

我會看看memcached - 這裏有一個開源項目用於將它集成到ColdFusion中:cfmemcached

如果你碰巧在使用Railo,我聽說它也有一個「集羣」範圍。

如果這兩種方法都不可用或對您有吸引力,您可以選擇設置一臺服務器來處理要緩存的查詢,然後通過Web服務直接從該服務器獲取它們。這樣,您可以將它們緩存在一臺服務器上,這樣可以減少整個羣集的內存佔用量,並且還可以降低對數據庫服務器的訪問頻率。您可能希望將正在處理查詢緩存的服務器緩存到羣集之外,然後將其專用於查詢緩存以及其他任何您想從前置機器卸載而其他機器處理外部流量的機器。

0

如果你打開j2ee會話,會話範圍可以在ColdFusion中聚集。但是,所有的聚集作用域都是將數據複製到服務器上。所以這些查詢仍然會被複制到所有3臺服務器上。所以你會回到你現在的位置。

但是,我只是使用cfquery的CachedWithin屬性,而不是使用應用程序範圍。這樣您就可以讓CF引擎執行實際的緩存管理。保持內存不受控制,並且不會增加在服務器之間複製大量數據的開銷。