Infinispan vs memcached用于高并发性需求

时间:2016-07-07 13:49:14

标签: caching memcached infinispan

我的Web应用程序维护以高频率读/写的域实体的内存缓存。要使应用程序成为群集,我需要同步/外部化此缓存。

考虑到以下应用事实,这将是memcached和infinispan中更好的选择 -

  • 缓存将以每秒高频率读/写
  • 如果无限期,数据需要近实时跨节点复制
  • 如果复制速度很慢,
  • 高并发写入不应该产生冲突问题。

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

1 个答案:

答案 0 :(得分:5)

不幸的是,我不是Memcached专家,但是让我告诉你更多关于一些基本概念的内容,以便为你的用例选择最佳选择...

首先,集中式与分散型 - 如果您的系统中只有一个节点,它会更快(正如您所说没有复制)。但是,如果节点关闭会发生什么?或者另一种情况 - 如果节点满了将会发生什么(正如您所说,您将每秒执行大量读/写操作)?一种解决方案是使用主/从复制,其中写入以异步方式传播到从属节点。如果节点已关闭,此解决方案将为您节省成本,但如果节点已满,则不会有任何好处(如果主节点已满,则奴隶将在几分钟后完成)。

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

回到您的场景 - 如果一个损坏的节点对您来说不是问题(例如,您可以自动切换到其他数据源)并且您的数据不会增长 - 请继续使用1节点解决方案或主节点/ slave复制。如果您的数据需要非常一致 - 请确保您正在进行同步复制(可能还有交易,但您需要参考用户手册以获取指导)。否则,我建议选择一个更通用的解决方案,它允许您在不关闭整个系统的情况下添加/删除节点,并且可以选择同步/异步复制。

根据我的经验,人们过分关注数据的一致性,而应该更关注可扩展性。最后一条建议 - 请在评估任何解决方案之前定义您的性能标准(例如,我的写入不需要超过X并且读取时间不超过Y.定义您的标准的置信水平(我需要99.5%)读数小于X)。