2

我们有一个应用程序在 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
        );
4

1 回答 1

1

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

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

您可以尝试敲击同一组键吗?只是为了确保您正在访问附近的缓存。

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

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

于 2015-06-17T12:46:04.907 回答