7

由于 Hazelcast 2.5 中的一个已知(已修复)错误,我们决定这将是我们项目的下一个升级候选者。但是在加入最新版本(3.2.2)之后,我们的表现很糟糕。

我们使用 Hazelcast 的方式:

  • 两个节点
  • 多个 IMap 实例(总共约 7 个地图)
  • 两个节点都更新地图
  • 地图上有很多读物
  • 启用近缓存以加快读取速度

map.values()使用 Hazelcast 2.5 时,我们提供了所有包含键的列表,而不是使用 ,我们获得了出色的性能map.getAll(containedKeys)。我们通过向 map 添加一个来跟踪 containsKeys 的方式EntryListener,该 map 将 containsKeys 存储在并发集合中。这是由一位同事添加的,感觉就像一个黑客,但就像一个魅力。

现在,当我们升级到 Hazelcast 3.2.2 时,我们会立即看到问题java.io,例如查看 AppDynamics 的以下片段:

com.hazelcast.map.proxy.MapProxyImpl:getAll:326 (method time = 0 ms, total time = 18938 ms)
 com.hazelcast.map.proxy.MapProxySupport:getAllObjectInternal:495 (method time = 0 ms, total time = 18938 ms)
  com.hazelcast.map.MapService:toObject:852 (method time = 0 ms, total time = 18938 ms)
   com.hazelcast.spi.impl.NodeEngineImpl:toObject:156 (method time = 0 ms, total time = 18938 ms)
    com.hazelcast.nio.serialization.SerializationServiceImpl:toObject:221 (method time = 0 ms, total time = 18938 ms)
     com.hazelcast.nio.serialization.StreamSerializerAdapter:read:59 (method time = 0 ms, total time = 18938 ms)
      com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer:read:185 (method time = 0 ms, total time = 18938 ms)
       java.io.ObjectInputStream:readObject:370 (method time = 3398 ms, total time = 18938 ms)
        java.io.ObjectInputStream:readObject:370 (method time = 15540 ms, total time = 15540 ms)

这是我们在 Hazelcast 2.5 中没有看到的,但在 3.2.2 中确实有。它使我们的应用程序完全停止。再次用 2.5 替换 jar(并将 Entry 重命名回 MapEntry),没有任何问题。

这可能是什么原因造成的?也许它不再使用近缓存?

4

1 回答 1

0

你看过这个谷歌团体票问题吗?

https://groups.google.com/forum/#!topic/hazelcast/ivk6hzk2YwA

这里特别看问题的原因。

https://github.com/hazelcast/hazelcast/issues/553

于 2015-03-09T07:38:07.090 回答