Infinispan 与 memcached 的高并发需求

Infinispan vs memcached for high concurrency need

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

考虑到以下应用事实,在 memcached 和 infinispan 中哪个更好-

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

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

首先,集中式与分散式——如果你的系统中只有一个节点,它会更快(正如你所说的没有复制)。但是,如果节点关闭会发生什么?或者另一种情况——如果节点变满会发生什么(正如你所说,你每秒将执行很多 read/writes)?一种解决方案是使用 master/slave 复制,其中写入异步传播到从节点。如果节点已关闭,此解决方案将为您提供帮助,但如果节点已满,则不会有任何好处(如果主节点已满,从属节点将在几分钟后变满)。

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

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

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