我们有一个应用程序在1或2个节点上运行,具体取决于环境,具有基于Hazelcast的共享缓存。
应用程序上的一个请求会在此缓存上触发大约1000个请求(所有缓存命中)。
在单节点配置中,这很有效。具体来说,每个请求需要不到10毫秒。
但是如果我们使用2个节点,则每个缓存请求大约需要20-200ms。我们认为这是因为Hazelcast从远程节点获取数据,这当然涉及网络流量。因此我们将其配置为使用NearCache,根据我们的理解,这应该导致与单个本地缓存大致相同的访问速度。但它并没有,它似乎根本不会对性能产生影响。
所以现在我想知道:
我们使用以下配置初始化缓存:
HazelcastConfiguration.getOrCreateCache(
cacheName,
new CacheConfig<K, CR>()
.setNearCacheConfig(new NearCacheConfig())
.setExpiryPolicyFactory(
HazelcastConfiguration.createExpiryPolicyFactory(expiryAfterModification)),
cacheManager
);
答案 0 :(得分:1)
这取决于很多东西,但是20 / 200ms很多。当我们在1个标准1 GbE网络上运行4节点集群基准测试(4个双插槽至强机器)时,99百分位数远低于1毫秒。我们在这里谈论没有近距离缓存。
近缓存应该提供非常好的性能,因为如果数据是本地缓存的,那么调用是本地的+操作执行的整个内部基础结构被跳过(至少对于IMap和近缓存;不完全确定缓存。
你能尝试点击同一组密钥吗?只是为了确保你正在接近缓存。
您使用什么作为关键和价值?它们是大型还是序列化不友好?
我还在遇到问题;快速尝试IMap并启用近缓存,并检查是否看到很大差异。