Hazelcast NearCache对性能没有预期的影响

时间:2015-06-17 11:34:30

标签: java caching hazelcast near-cache

我们有一个应用程序在1或2个节点上运行,具体取决于环境,具有基于Hazelcast的共享缓存。

应用程序上的一个请求会在此缓存上触发大约1000个请求(所有缓存命中)。

在单节点配置中,这很有效。具体来说,每个请求需要不到10毫秒。

但是如果我们使用2个节点,则每个缓存请求大约需要20-200ms。我们认为这是因为Hazelcast从远程节点获取数据,这当然涉及网络流量。因此我们将其配置为使用NearCache,根据我们的理解,这应该导致与单个本地缓存大致相同的访问速度。但它并没有,它似乎根本不会对性能产生影响。

所以现在我想知道:

  • 如何检查NearCache配置是否确实有效?
  • 如何获得接近本地缓存的读取性能,但是(异步)更新(/异步)与/所有远程缓存进行通信,我认为通过配置NearCache可以获得这些缓存?

我们使用以下配置初始化缓存:

HazelcastConfiguration.getOrCreateCache(
                cacheName,
                new CacheConfig<K, CR>()
                        .setNearCacheConfig(new NearCacheConfig())
                        .setExpiryPolicyFactory(
                                HazelcastConfiguration.createExpiryPolicyFactory(expiryAfterModification)),
                cacheManager
        );

1 个答案:

答案 0 :(得分:1)

这取决于很多东西,但是20 / 200ms很多。当我们在1个标准1 GbE网络上运行4节点集群基准测试(4个双插槽至强机器)时,99百分位数远低于1毫秒。我们在这里谈论没有近距离缓存。

近缓存应该提供非常好的性能,因为如果数据是本地缓存的,那么调用是本地的+操作执行的整个内部基础结构被跳过(至少对于IMap和近缓存;不完全确定缓存。

你能尝试点击同一组密钥吗?只是为了确保你正在接近缓存。

您使用什么作为关键和价值?它们是大型还是序列化不友好?

我还在遇到问题;快速尝试IMap并启用近缓存,并检查是否看到很大差异。