2010-02-02 31 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