由於Hazelcast 2.5中的已知(固定)錯誤,我們決定這將成爲我們項目的下一個升級候選者。但是在下載最新版本(3.2.2)之後,我們表現糟糕。從Hazelcast 2.5的性能降低升級到3+
我們使用Hazelcast方式:
- 兩個節點
- 多個IMAP實例(總共約7地圖)
- 兩個節點更新地圖
- 很多在地圖上讀
- 啓用near-cache加速讀取
使用Hazelcast 2.5時,我們有很好的表現,而不是使用map.values()
,我們提供了所有包含的密鑰列表map.getAll(containedKeys)
。我們通過將EntryListener
添加到將所包含的鍵存儲在併發集中的映射來跟蹤包含的鍵的方式。這是由一位同事添加的,感覺像一個黑客,但像一個魅力。現在
,當我們升級到3.2.2 Hazelcast我們立即看到問題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)並沒有什麼錯誤。
這可能是什麼原因造成的?也許它不再使用near-cache了?
是否有機會快速構建自己的快照並嘗試使用?我知道有一個nearcache錯誤,但不知道它是否適用於這種情況。 – noctarius
我已經修補了這個:https://github.com/hazelcast/hazelcast/pull/2523它修復了loadClass,但是這個readObject現在是瓶頸。請指點我可能的補丁/方向。 –
那麼Java標準序列化將永遠是瓶頸。如果你想要高速,就不要使用它,或者至少使用j.i.Externalizable。 – noctarius