代码之家  ›  专栏  ›  技术社区  ›  Matt

具有共享对象的Tomcat6集群

  •  3
  • Matt  · 技术社区  · 15 年前

    我们有一个很大的Tomcat服务器集群,我正在努力寻找一种在所有服务器中共享计数的有效方法。此计数是购买的“小部件”数量,需要检查每个页面视图。任何服务器都可以完成该计数的销售和增量,此时新值应该对所有集群成员可用。

    我们不想使用数据库中的计数,因为在整个集群中的更新之间会有许多页面视图,对于每个页面视图,对数据库执行get操作似乎是不必要的。

    我们有一个广泛的memcached集群,我们可以在其中存储值,在每个页面视图中获取它,并且任何更新该值的人都会将新值设置到集群。这再次显得浪费,因为每个页面视图都有一个缓存GET。

    我想做的是在每台服务器上都有一个内存值,多播(或类似的机制)消息告诉所有服务器它们刚刚增加,新的数字是x。这似乎是最有效的,因为只有在进行更新时才执行操作,而不是为每个页面视图执行操作。

    您是如何在应用程序中处理这个问题的?我是不是想的太多了…我们应该把它扔进memcached吗?

    谢谢!

    3 回复  |  直到 12 年前
        1
  •  1
  •   leeeroy    15 年前

    如果您已经有了memcached基础设施,我不明白为什么您不应该使用它,它将是这方面的理想选择。不管是浪费还是海洋中的另一滴,只有测试才能告诉你。 与引入像赤陶或另一种缓存共享机制这样的侵入性机制相比,该架构也将非常简单。

        2
  •  2
  •   skaffman    15 年前

    两个 JBossCache EhCache 可以在UDP多播模式下操作,跨多个虚拟机复制内存缓存。与memcached不同,它们在虚拟机内部操作,因此“cache get”本质上是一个自由操作。它们也是纯Java,因此不需要维护单独的缓存系统。

    jbosscache还提供事务和同步/异步操作,所以如果您感兴趣的话,我会选择ehcache。

        3
  •  1
  •   Jonathan Hedley    15 年前

    看看 Terracotta . 它为您提供了一个分布式JVM内存模型,因此每个框上的对象值都会立即得到更新。

    它们在ehcache周围有一个包装器,或者您可以用一些XML配置对代码透明地使用它。

    Terracotta提供商业和开放源码许可证,通常情况下,他们会降低开放源码,转而支持商业——但免费的开放源码肯定会满足您的需求,并允许您的应用程序扩展 非常 很长的路。