2010-02-02 66 views
3

我們擁有大量的tomcat服務器集羣,我試圖找到一種有效的方法來在所有這些集羣中共享一個計數。此計數是購買的「小部件」數量,需要在每個頁面視圖中進行檢查。任何服務器都可以完成銷售並增加計數,此時應將新值提供給所有羣集成員。擁有共享對象的Tomcat 6集羣

我們不希望使用數據庫中的計數,因爲整個羣集中的更新之間將存在許多頁面查看,並且對於每個頁面查看而言,對數據庫的get操作似乎沒有必要。

我們有一個廣泛的memcached集羣,我們可以在其中存儲值,在每個頁面視圖中獲取它,任何更新值的人都將新值設置爲集羣。由於每個頁面視圖都有一個緩存,這又浪費了。

我想要做的是在每臺服務器上有一個內存中的值,並且一個多播(或類似的機制)消息告訴所有服務器,他們只是增加了,新的數字是X.這似乎是效率最高,因爲只有在進行更新時纔會執行操作,而不是爲每個頁面視圖執行操作。

你是如何在你的應用程序中處理的?我是否過度思考這個......我們應該把它放在memcached中嗎?

謝謝!

回答

1

如果你已經有了一個memcached基礎設施,我不明白爲什麼你不應該使用它,它將是理想的。無論它會浪費還是在海洋中掉落,只有測試纔會告訴你。 與引入像陶土或其他緩存共享機制這樣的侵入性相比,體系結構也很簡單。

+0

+1對於「無論是浪費還是另一個海洋,只有測試會告訴你」 – 2010-02-03 02:53:02

+0

那麼,無論你如何分割它,它都是浪費......測試將決定多麼浪費。 Memcached顯然是阻力最小的路徑,但我喜歡in-jvm緩存的想法。現在閱讀。 – Matt 2010-02-03 15:45:38

+0

我們決定現在就走簡單的路線,並使用我們的memcached。我們將繼續研究in-jvm緩存產品,但爲了時間的利益,我們將繼續使用我們現在的產品。 – Matt 2010-02-03 18:47:44

2

JBossCacheEhCache都可以在UDP多播模式下運行,在多個虛擬機之間複製內存中緩存。與memcached不同,它們在虛擬機內部運行,因此「緩存獲取」本質上是一項免費操作。他們也是純Java的,所以不需要維護一個單獨的緩存系統。

JBossCache還提供事務和同步/異步操作,所以如果你感興趣的話,我會選擇EHCache。

+0

感謝您的信息。 EhCache很有趣。將它保留在我未來的名單上。 – Matt 2010-02-03 18:48:43

1

看一看Terracotta。它爲您提供分佈式JVM內存模型,以便每個框上的對象的值一次更新。

他們有一個Ehcache的包裝,或者你可以用一些XML配置透明地將它用於你的代碼。

兵馬俑提供商業和開源許可,並且通常情況下,它們有利於商業的淡化開源 - 但是免費開源的肯定會做你的需要,將允許這類應用程式來縮放非常很長的路要走。

+0

謝謝。我很喜歡兵馬俑。我們已經決定採用我們現在所擁有的產品,但是會對即將到來的項目進行評估。 – Matt 2010-02-03 18:49:01