了解 Infinispan 的完整架构?

Understanding the full architecture of Infinispan?

我正在与一个客户一起开始一个项目,其中的核心部分是大型数据集的高性能缓存。我目前正在研究各种 OSS 项目,Infinispan 看起来非常有趣。然而,我还没有找到关于可能的缓存配置等的良好“架构”级别概述。 我们的要求基本是:

  1. 能够创建本地(库)堆上 (Java) L1 缓存、堆外或可能的持久化 L2 缓存以及可能的分布式 L3 缓存。
  2. L1 和 L2 缓存需要是“独占的”,即 L1 的条目不应出现在 L2 缓存中,因为这会占用太多内存。
  3. L1 缓存最好使用最新和最有效的逐出算法之一(在我看来 TinyFLU 是一个很好的选择)。

任何人都可以提供一些指导 if/how 这些东西可以用 Infinispan 存档,我可以在哪里阅读如何创建多层组合库 + 分布式设置,如所述(是手册唯一资源或者还有其他更多“架构”级别的资源我也可以使用)?

分布式缓存可能满足大部分要求(Distributed Cache Documentation)

在分布式缓存中,您的数据被分区并存储在不同的节点中。读取时,如果节点是该密钥的所有者,它会从本地内存(on-heap 或 off-heap)读取,否则,它将对该密钥的所有者进行 RPC。 (所以,你的 L3 缓存)。

关于L2需求,可以通过持久化存储来实现(Persistence Storage Documentation) with passivation enabled. Passivation will ensure your data lives in memory or in the disk. Data will only be stored in the disk when the eviction strategy removes it from memory (Eviction Documentation)。

L1需求可以通过启用L1缓存来部分实现(L1 Cache for Distributed Cache Documentation)。当从远程节点读取数据时,它存储在本地内存中。该L1数据永远不会进入持久性存储并且当驱逐需要释放一些 space 或数据由本地或远程节点更新时,它会被删除。


另一种选择是复制缓存 (Replicated Cache Documentation)。复制缓存在所有节点中保留完整数据集的副本。使用驱逐和持久性存储,它确保您的读取将在内存或磁盘中找到数据,并且不需要 RPC 来获取数据。缺点是写入,必须同步所有节点。