我们有一个庞大的tomcat服务器集群,我正在尝试找到一种在所有服务器之间共享计数的有效方法。此计数是购买的“小部件”的数量,并且需要针对每个页面视图进行检查。任何服务器都可以完成销售并增加该计数,此时新值应该可供所有集群成员使用。
我们不想使用数据库中的计数,因为群集中的更新之间会有很多页面查看,并且对于每个页面视图都不需要对db进行get操作。
我们有一个广泛的memcached集群,我们可以在其中存储值,在每个页面视图上获取它,更新值的任何人都将新值设置到集群。由于每个页面视图都有一个缓存获取,这似乎又浪费了。
我想要做的是在每台服务器上都有一个内存中的值,并且多播(或类似机制)消息告诉所有服务器它们只是递增而新的数字是X.这似乎是最多的因为只有在进行更新时才采取行动,而不是为每个页面视图做好工作。
您是如何在应用程序中处理此问题的?我是不是在想这个......我们应该把它扔进memcached吗?
谢谢!
答案 0 :(得分:2)
JBossCache和EhCache都可以在UDP组播模式下运行,在多个虚拟机之间复制内存缓存。与memcached不同,它们在VM内部运行,因此“缓存获取”本质上是一种免费操作。它们也是纯java,所以不需要维护单独的缓存系统。
JBossCache还提供事务和同步/异步操作,所以如果您感兴趣,我会选择EHCache。
答案 1 :(得分:1)
看看Terracotta。它为您提供了一个分布式JVM内存模型,因此每个框上的对象值立即更新。
他们有一个Ehcache包装器,或者你可以使用一些XML配置透明地使用它。
Terracotta提供商业和开源许可证,通常,他们淡化开源以支持商业广告 - 但免费的开源肯定会做你需要的,并允许你的应用程序扩展非常很长的路。
答案 2 :(得分:1)
如果你已经有一个memcached基础设施,我不明白为什么你不应该使用它,这将是理想的。如果它浪费或者在海洋中再次下降,只有测试会告诉你。 与引入像兵马俑或其他缓存共享机制一样具有侵入性的东西相比,该架构也将变得简单。