3

MemCached文档提到数据分布在节点之间。这就是他们对分布式缓存的定义。如果节点 A 需要节点 B 上的数据,则数据从 B 传输到 A。如果 A 崩溃,则存储在 A 上的所有数据都不再可供 B 使用。

但是,EhCache 对分布式缓存有不同的定义。基本上,它更像是共享内存而不是分布式缓存。如果节点 A 修改了一些数据,节点 B 将看到该修改。如果 A 崩溃,存储在共享内存中的任何数据 A 仍然可供节点 B 使用。

这让我想到了两个问题:

  1. 如果我有 3 个节点 A、B、C,每个节点都有 1GB 内存,那么 MemCached 似乎会将内存加起来,使其看起来总共有 3GB 内存用于节点。但是,EhCache 似乎没有添加 3 GB,而是允许每个节点之间最多 1 GB 的共享内存。它是否正确?

  2. 如果对 1. 的回答是肯定的,那么得出 EhCache 和 MemCached 实际上是互补而非竞争的结论是否正确?

4

2 回答 2

4

说到 Ehcache 的作用,因为我不是 Memcache 方面的专家。

Ehcache 是一种“分层缓存”。它允许您在每一层进行纵向扩展和横向扩展。如果您有 3 个 Ehcache 服务器节点(实际上服务器层是 TSA,Terracotta 服务器阵列),每个服务器节点都将具有唯一的数据,因此不包括可以交换到磁盘的数据,您将拥有 3gig。TSA 可以配置为使用磁盘持久性进行 HA 和/或主动被动故障转移。插入 BigMemory 后,您可以将这些层中的任何一个扩展到数百 gig 的 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

于 2011-10-09T00:28:33.097 回答
2

我对两者都有一些经验。

我会对你的两个问题说“是”。

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

Memcached 我用作数据源。这是一个简单的键=值数据库。在每个服务节点上,您定义一个它可以使用的 memcached 节点列表。然后它将写入某个节点(我猜是循环法)。键包含有关值存储在哪个 memcached 节点上的信息。

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

于 2011-10-17T23:25:05.957 回答