【发布时间】:2014-10-02 01:17:52
【问题描述】:
对不起,文字墙;底部有一个摘要。
我正在设计一个将在多个服务器上运行的 Java 应用程序的原型。每个实例都有一个嵌入式 Infinispan 缓存,并且这些缓存被配置为在复制模式下形成一个集群。缓存条目仅从外部系统加载 - 无需使用 cache.put(key, value) 主动添加条目。
为此,我实现了一个自定义 CacheLoader。按需加载值正在工作,但这些条目不会复制到其他活动集群节点。出于测试原因,我尝试使用“put”添加条目 - 这些条目会立即复制。
用户指南向我指出了在节点加入/离开集群时或在写入期间影响集群行为的属性,例如 fetchPersistentState、shared 和 fetchInMemoryState 。后者在我的情况下很有用,因为加入集群的新节点应该接收当前状态。启动期间的初始同步甚至是获取缓存加载器加载的条目。
fetchPersistentState 导致错误,因为我的缓存加载器没有实现 AdvancedCacheLoader - 但由于在调用“加载”后似乎没有调用高级方法,我认为正确实现该接口不会解决我的问题。
我还阅读了有关 ClusterLoader 实现的信息
向集群中的其他成员咨询价值
但是到其他节点的往返会增加处理请求时的响应时间。
尝试只加载一次值的基本原理是,对共享外部系统的调用被认为是相当昂贵的,因此由复制消息创建的增加的集群开销应该仍然比在每个节点。
为了获得某种独立的测试和代码示例,我在 Github 上创建了 infinispan-quickstart/clustered-cache 示例,并根据我的需要对其进行了调整:
https://github.com/flpa/infinispan-quickstart/tree/master/clustered-cache
缓存现在由 CacheLoader 支持,节点定期获取/放置值以演示如何复制“放置”值,但从加载器获取的值不是。
总结一下:
是否可以在复制模式下配置 Infinispan 集群,完全由缓存加载器查找填充并在所有节点上复制这些查找的结果?
编辑:我不小心删除了 Github 分支,所以我从头开始重新创建它,只包括相关的“集群缓存”文件夹并修改了上面的链接。
【问题讨论】:
标签: java infinispan