2011-10-08 12 views
3

MemCached文档中提到的数据分布在各个节点上。这是他们对分布式缓存的定义。如果节点A需要节点B上的数据,则数据将从B传输到A.如果A崩溃,则A上存储的所有数据不再可用于B。EhCache是​​否利用MemCached等所有节点的内存?

但是,EhCache有一个不同的定义distributed caching。基本上,它比分布式缓存更像共享内存。如果节点A修改了一些数据,节点B将看到该修改。如果A崩溃,存储在所述共享存储器中的任何数据A保持提供给节点B.

这使我两个问题:

  1. 如果我有3个节点A,B,C各自具有1GB的内存,看起来MemCached似乎会增加内存,并使它看起来像节点的总共3 GB的内存。但是,EhCache似乎并未添加3 GB,而是在每个节点之间最多允许1 GB的共享内存。它是否正确?

  2. 如果答案是肯定的,那么EhCache和MemCached实际上是互补而不是竞争是否正确?

回答

1

我有一些专家两者都有。

我会对你的问题说'是'。

我一直在使用ehcache和Hibernate。它将在集群中的多个服务器节点上的中央数据库中找到的数据缓存在内存中。理由当然是减少数据库访问。如果缓存的值由一个节点写入,则应该在其他节点上使该值无效,以强制它们从数据库重新读取值,然后重新缓存该值。

Memcached我用作数据源。这是一个简单的key = value数据库。在每个服务节点上定义一个可以使用的memcached节点列表。然后它会写入一些节点(我猜想通过循环法)。该键具有有关存储值存储在哪个memcached节点的信息。

所以根据我的经验,memcached是一个经常分布式的数据库(不是关系类型,但仍然是一个数据库),而ehcache更像是一个传统的缓存。

4

说到Ehcache做什么,因为我不是Memcache的专家。

Ehcache是​​一个“分层缓存”。它允许您在每个层级上扩展和扩展。如果您有3个服务器节点的Ehcache(实际上服务器层是TSA,Terracotta服务器阵列),那么每个服务器节点都将拥有唯一的数据,因此不包括可交换到磁盘的内容,您将拥有3gig。可以将TSA配置为使用磁盘持久性进行HA和/或主动被动故障转移。随着BigMemory的插入,您可以将这些层级中的任何一层扩展到数百个RAM,而不用担心GC问题。

那么为什么分层缓存很酷?这就是它如何在客户端使用内存。您可以拥有连贯的数据,多达数百个演出,仅需几秒钟即可在堆上进行处理,在远程层上远离堆本地层或毫秒。所有的数据都可以是HA。

你可以阅读多了解一些这方面的东西在这里:

http://scaleaholic.blogspot.com/2010/09/little-bit-about-bigmemory-for-ehcache.html

这里:

http://scaleaholic.blogspot.com/2011/08/what-is-terracotta.html

,当然还有: ehcache.org 和 terracotta.org

+0

那么,你是说如果TSA节点有1 GB,EhCache节点仍然可以容纳1 GB自己的数据,并且TSA节点将保留1GB的内存数据并将剩余的2 GB溢出(或多或少)? – JVerstry

相关问题