Infinispan 是一个 Java 数据网格平台。它提供了一个 JSR-107兼容缓存接口来管理缓存数据。

${build.fullName}使用以下 Infinispan 缓存容器:

每个缓存容器定义了一个“REPL”和“DIST”缓存。这些高速缓存不应该由用户应用程序直接使用。

如需了解更多相关信息,请参阅 Infinispan Documentation

集群模式

集群可以在使用 Infinispan 的 ${build.shortName} 中通过两种不同的方式进行配置。您的应用程序需要使用的方法取决于您的需求。每个模式都需要在可用性、一致性,可靠性和可扩展性间之间进行折衷。选择群集模式之前,需要确定对于您的网络,什么功能是最重要的,并对这些功能要求加以平衡。

复制模式

复制模式将自动检测并在集群上增加新的实例。这些实例所作的更改将被复制到集群中的所有节点。复制的模式通常适用于小型集群,因为需要在网络间进行复制在信息量较小。Infinispan 可以被配置为使用UDP组播,这可以减轻网络拥堵的程度。

分布模式

分布模式允许 Infinispan 线性缩放集群。分布模式使用一致的散列算法,以确定在一个集群的什么地方放置新节点。要保持的信息拷贝数是可配置的。在确定拷贝数量时需要在数据的保存时间和性能之间作出一个平衡,需要保存的副本数量越多,对性能的影响越大,但这可以减少在服务器发生故障时导致数据丢失的可能性。散列算法可以在不需要进行多播或保存元数据的情况下来查找表项,从而减少网络流量。

当集群的规模超过 6 到 8 个节点时,应该考虑使用分配(DIST)模式作为缓存策略。当使用分布模式时,数据只会在群集内的一部分节点间进行分布,而不是分布到所有节点(默认的复制模式)。

同步和异步复制

复制可以用同步模式或异步模式,选择哪种模式取决于您的要求和应用程序。在使用同步复制时,处理用户请求的线程会被阻塞,直到复制已经成功。只有当复制成功后,一个响应才会发送回客户端并释放线程。同步复制对网络通信有影响,因为它需要从群集中的所有节点发出的响应。它的优点是,可以确保所有的修改已经应用到集群中的所有节点。

异步复制是在后台进行的。Infinispan 具有一个复制队列,后台线程使用它来进行复制。复制可基于时间触发,或基于队列的大小触发。使用复制队列可以提高性能,因为它不需要在集群节点间进行通讯。异步复制的缺点是它不是非常准确。失败的复制尝试会被写入日志,而不需要进行实时通知。

缓存容器

缓存容器是由一个子系统使用的缓存存储库。Infinispan 的默认缓存容器的在配置XML文件中定义。一个缓存会被定义为默认缓存,它会作为集群的缓存。