2011-04-19 88 views
6

我正在尋找一種解決方案來共享在不同主機上運行的兩個tomcat Web應用程序之間的緩存。該緩存正在用於數據同步,因此必須保證兩個tomcat實例之間的緩存始終保持最新狀態。 (對不起,我不是100%確定這個要求的正確術語是否是「一致性」,或者像ACID屬性那樣更具體)。另一個要求當然是訪問緩存的速度應該很快,寫入次數大致相等。我確實可以訪問共享文件系統,這是一個考慮因素。Tomcat Web應用程序之間的共享緩存

我已經看過類似ehcache的東西,但爲了獲得Web應用程序之間的共享緩存,我需要在Terracotta環境之上實現或使用新的ehcache緩存服務器。前者(兵馬俑)似乎對此過度殺傷,而緩存Web服務器似乎不會提供我想要的快速性能。

我看過的另一個解決方案是在像Redis或memcachedb這樣的快速鍵值存儲之上構建一些簡單的東西。 Redis在內存中,但可以輕鬆配置爲集中緩存,而memcachedb是基於磁盤的持久緩存,可以工作,因爲我擁有共享文件系統。

我在尋找如何最好地解決這個問題的建議。該解決方案需要成爲相對成熟的技術,因爲它將用於生產環境。

在此先感謝!

+0

也許您需要詳細說明緩存「100%始終保持最新狀態」。確保這一點的唯一方法是在正在使用時鎖定緩存項,這意味着它不再是緩存。您可能可以使用zookeeper來滿足同步需求,而memcache可以作爲緩存,但這取決於您的需求。 – sbridges 2011-04-19 04:52:04

+0

緩存是放在tomcat的前面還是後面?即您是否需要緩存輸出或輸入? – 2011-04-19 07:17:25

+0

本質上,我試圖完成的是分佈式Tomcat應用程序的數據庫級別的線程安全性。但我真的不想使用數據庫鎖定甚至表級鎖定。因此,我試圖實現一種「記錄級」鎖定機制,爲了使其在多個Tomcat實例中工作,鎖定機制必須能夠被所有實例訪問 - 因此想到了一個共享的「緩存」也是爲什麼我把它放在引號中,因爲它可能不是正確的術語。 – cambo 2011-04-21 14:52:38

回答

4

我很確定,如果您需要分佈式緩存,則不需要兵馬俑或ehcache服務器。 Ehcache與four replication mechanisms之一會做。

但是,根據你寫的內容,我想你不僅僅是在尋找一個緩存。 Memcached/Ehcache就是您可能稱爲緩存層爲您的應用程序的示例 - 僅此而已。

如果你發現自己在使用像'Guaranteed''最新''ACID'這樣的詞,你最好使用像Oracle Times Ten/MySQL Cluster/Redis這樣的內存數據庫以及基於磁盤的持久性存儲。

+0

這實際上就是我們使用的內存數據庫表,我們也可以使用持久存儲的快速鍵/值存儲來補充它。 – cambo 2011-04-28 18:42:39

3

您可以使用memcached(不是memcachedb)進行快速高效的緩存。除非你想要持久緩存,否則Redis或memcachedb可能會過度殺傷。 Memcached可以非常容易地集羣,您可以使用spymemcached java客戶端來訪問它。 Memcacached非常成熟,運行數十萬臺,即使不是數百萬臺生產服務器。在生產過程中可以通過Nagios和Munin系統進行監控。

相關問題