【问题标题】:To understand Infinispan Behavior in Rebalancing & Async mode了解 Rebalancing & Async 模式下的 Infinispan 行为
【发布时间】:2018-04-20 00:40:19
【问题描述】:

我是 Infinispan 的新手。即使在通过 Infinispan 用户指南和谷歌搜索之后,我也无法弄清楚 Infinispan 在以下情况下的行为:

1) 进行再平衡时是否锁定 HotRod 客户端读取?

2) Infinispan 在 REPL 模式下如何在 HotRod 客户端使用 async 和 nearCache 运行? (我发现如果nearCache被禁用,那么它可以获取数据,但不能使用nearCache。它与nearCache更新有什么关系吗?)

服务器代码:

GlobalConfigurationBuilder globalConfig = GlobalConfigurationBuilder.defaultClusteredBuilder();
globalConfig.transport().clusterName("infiniReplicatedCluster").globalJmxStatistics().enable().allowDuplicateDomains(Boolean.TRUE);
ConfigurationBuilder configBuilder = new ConfigurationBuilder();
EmbeddedCacheManager embeddedCacheManager = new DefaultCacheManager(globalConfig.build());

configBuilder.dataContainer().compatibility().enable().clustering().cacheMode(CacheMode.REPL_ASYNC)
    .async().replQueueInterval(120, TimeUnit.SECONDS).useReplQueue(true).hash();
embeddedCacheManager.defineConfiguration("TestCache", configBuilder.build());

Cache<String, TopologyData> cache = embeddedCacheManager.getCache("TestCache");
cache.put("00000", new TopologyData());

HotRodServerConfiguration build = new HotRodServerConfigurationBuilder().build();
HotRodServer server = new HotRodServer();
server.start(build, embeddedCacheManager);

客户代码:

ConfigurationBuilder remoteBuilder = new ConfigurationBuilder();
remoteBuilder.nearCache().mode(NearCacheMode.EAGER).maxEntries(100);
RemoteCacheManager remoteCacheManager = new RemoteCacheManager(remoteBuilder.build());
remoteCache = remoteCacheManager.getCache("TestCache");
System.out.println(remoteCache.get(fetchKey));

使用上面的代码,下面列出了场景和结果(所有运行都进行了多次,导致相同的结果):

-没有 nearCache 1 Key --> 得到了预期的值

-with nearCache (LAZY/EAGER) 1 key --> null

-在同一次运行中,两次相同的 Key 使用 nearCache (LAZY/EAGER) --> null(第一次) - 预期值(下一次)

需要澄清:如果一个示例代码重新验证 HotRod 客户端在 DIST 模式下的负载平衡(RoundRobin)行为。 (我能够成功地使用 REPL 模式检查它,并且它的工作原理与它声称的一样)

【问题讨论】:

  • 从配置来看,您似乎使用的是较旧的 Infinispan 版本,因为我们在较新的 Infinispan 版本中删除了复制队列。您只需将缓存设置为异步复制即可。如果我是你,我会看看最新的 Infinispan 稳定版本是否存在问题,即 9.1.2

标签: infinispan infinispan-9 near-cache hot-rod


【解决方案1】:
  1. Infinispan 中的状态传输是非阻塞的
  2. 不确定我是否完全理解:您的意思是说,当在 Hot Rod 客户端上启用近缓存时,从异步 REPL 缓存中读取不起作用?它只是挂起吗?你有可以分享的代码吗?

澄清:Hot Rod 以 DIST 和 REPL 模式(REPL 只是一种特殊的 DIST 模式,其中所有者的数量等于集群的大小)根据密钥进行哈希处理,并且只会使用 Round Robin 如果主节点没有响应。

【讨论】:

  • 这意味着它不是 100% 循环。首先,主节点将尝试返回该值。如果万一失败,则仅适用循环。我的理解正确吗?如果是,那么任何时候,对于特定密钥,该密钥的主要所有者都会为所有请求提供服务。
  • &你能解释一下主要所有者还活着但没有响应的情况吗(&HotRod客户端必须去从其他可用节点获取密钥)?
  • 是的,你的理解是正确的。至于第二个q,在客户端和服务器之间的网络上可能由于各种原因无法响应;节点间通信可能使用不同的交换机。此外,节点可能过载或执行 GC 和客户端超时(如果其超时设置较低)。这是网络,可能会发生奇怪的事情。
  • @RadimVansa : & 在上述情况下 ASYN 应该如何表现? & 如果这是预期的行为,那么为什么它在第一次使用 nearCache 时给出“null”?
  • @J.P 即使缓存是异步的,读取 (get()) 也是同步的。随意提交 JIRA 并添加重现此内容的测试用例。
猜你喜欢
  • 2018-06-25
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2012-12-20
相关资源
最近更新 更多