Infinispan 是一个 Java 数据网格平台。它提供了一个用于管理缓存数据的缓存接口。
${build.fullName} 中使用以下 Infinispan 缓存容器:
web 用于 Web Session 集群ejb 用于 Stateful Session Bean 集群hibernate 用于 Entity 缓存singleton 用于 Singleton 缓存每个缓存容器都会定义一个 "repl" 和 "dist" 缓存。这些缓存不应被用户应用程序直接使用。
如需了解更多与 Infinispan 功能和配置选项相关的信息,请参阅 Infinispan 文档。
使用 Infinispan 在 ${build.shortName} 中可以使用两种不同方式配置集群。具体到您的应用程序,正确的方法取决于您的要求。每个模式在可用性、一致性、可靠性和可扩展性之间有不同的权衡。在选择集群模式前,您必须确定网络最重要的功能,并平衡这些要求。
复制模式会在集群中自动探测并添加新实例。对这些实例所做的更改将复制到集群中的所有节点上。因为其需要通过网络复制的信息数量,复制模式通常适用于小集群。Infinispan 可以配置为使用 UDP 多播,从而可以缓解网络通讯阻塞的问题。
分布模式允许 Infinispan 线性扩展集群。分发模式使用一致的哈希算法来确定应放置新节点的位置。要保留的信息副本数量是可配置的。在保持的副本数、数据保持的时间以及性能之间需要有一个权衡:保持更多副本会降低性能,但在服务器出现故障时会降低数据丢失的机会。哈希算法也可以用于减少网络的流量,它可以在不进行多播或存储元数据的情况下定位条目。
当集群有超过 6-8 个节点时,应该考虑使用分布 (dist) 模式作为缓存策略。当使用分布模式时,数据只会分发到集群中的一个节点子集,而不是所有节点(默认复制模式)。
复制可以在同步或异步模式下执行,具体使用哪种模式取决于您的要求和您的应用程序。 当使用同步复制时,处理用户请求的线程会被阻断,直到复制成功为止。 只有在复制成功后,响应才会发回到客户端,并释放线程。 同步复制对网络流量有影响,因为它需要来自集群中每个节点的响应。 但是,它的优点在于确保对集群中的所有节点都进行了所有修改。
异步复制在后台执行。Infinispan 有一个复制队列,供后台线程用于执行复制。复制操作会基于时间或队列大小而触发。复制队列可以增加性能,因为集群节点之间不需要进行通讯。异步复制的缺点是复制无法保证准确。失败的复制尝试不会实时通知,而只是记录在日志中。
缓存容器是子系统使用的缓存存储库。对于 Infinispan,默认缓存容器在配置 xml 文件中定义。一个缓存会被定义为默认缓存,这是将用于集群的缓存。