2016-07-07 26 views
0

我的web应用程序在内存缓存中维护以高频读取/写入的域实体。为了使应用程序成簇,我需要同步/外部化这个缓存。Infinispan vs memcached用于高并发需求

这将是当中的memcached更好的选择和考虑的Infinispan以下应用facts-

  • 缓存将被读取/每秒
  • 高频书面如果Infinispan的,数据需要跨节点复制接近实时时间
  • 如果复制速度慢,并发写入不应该产生冲突问题。

我觉得memcached将很好的解决这个问题,因为它是集中式的,不需要像infinispan这样的复制延迟。专家可以就此提供意见吗?

+0

提到了一个很好的比较[这里](http://vschart.com/compare/jboss-infinispan/vs/memcached),这可能也有帮助。 – phoenixSid

回答

4

可惜我不是一个Memcached的专家,但让我告诉你更多关于一些基本概念,让你可以选择适合您的使用情况下,最好的选择...

首先,集中分散VS - 如果你有只有一个节点在你的系统中,它会更快(正如你所说没有复制)。但是,如果节点停机会发生什么?或者另一种情况 - 如果节点变满(如你所说你会每秒执行很多读/写操作)会发生什么?一种解决方案是使用主/从复制,其中写入异步地传播到从节点。如果节点已关闭,此解决方案将节省您的时间,但如果节点已满(如果主节点已满,从站将在几分钟后满),则不会有任何好处。

数据一致性 - 如果系统中有多个节点,则数据可能不同步。想象一下,在2个节点和连接到每个节点的客户端之间进行异步复制。两个客户端在相同的时刻执行写入同一个密钥。看起来似乎不大可能,但相信我,高度并发的读取和写入会发生。解决这个问题的唯一方法是在大多数节点启动并运行的情况下(或者称为共识)使用同步复制。

回到您的方案 - 如果一个损坏的节点对您来说不是问题(例如,您可以自动切换到其他某个数据源)并且数据不会增长 - 继续执行1节点解决方案或主/从属复制。如果您的数据需要强烈一致 - 请确保您正在进行同步复制(并且可能与事务处理有关,但您需要参阅用户手册以获取指导)。否则,我会建议选择更多功能的解决方案,这将允许您添加/删除节点而不会占用整个系统,并且可以选择同步/异步复制。

根据我的经验,人们对数据一致性的关注太多,而应该更关心可伸缩性。最后一条建议 - 请在评估任何解决方案之前定义您的绩效标准(例如,我的写作需要不超过X并且不超过Y.也要为您的标准定义置信水平(我需要99.5%读取小于X)