caching - Infinispan 与 memcached 满足高并发需求

标签 caching memcached infinispan

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

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

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

我觉得memcached可以很好地解决这个问题,因为它是集中式的,并且不需要像infinispan那样的复制延迟。专家能否对此发表意见?

最佳答案

不幸的是,我不是 Memcached 专家,但让我告诉您更多有关一些基本概念的信息,以便您可以为您的用例选择最佳选项...

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

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

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

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

关于caching - Infinispan 与 memcached 满足高并发需求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38247225/

相关文章:

Spring、Infinispan 和 JBoss 7 集成

java - 在不影响上次修改时间戳的情况下从 Infinispan 缓存中获取条目

asp.net-mvc - 当用户没有互联网时,是否可以从缓存中设置自定义错误页面

java - 无限跨度 : Local cache only

caching - 如何在 SAP Commerce (hybris) 中创建新的缓存区域

mysql - memcached数据会在内存中停留多久

ruby - 如何测量 Ruby 对象的大小?

javascript - 如何清除chrome上的js内存

caching - 为什么我们在 mips 中使用写缓冲区?[缓存]

c# - ASP.net 如何在控件公共(public)属性上输出缓存 webusercontrol