2014-06-17 16 views
7

Do lỗi đã biết (cố định) trong Hazelcast 2.5, chúng tôi đã quyết định đây sẽ là ứng cử viên nâng cấp tiếp theo cho dự án của chúng tôi. Nhưng sau khi giảm trong phiên bản mới nhất (3.2.2), chúng tôi đã có hiệu suất khủng khiếp.Nâng cấp giảm hiệu suất từ ​​Hazelcast 2.5 đến 3+

Cách chúng ta đang sử dụng Hazelcast:

  • Hai nút
  • Nhiều trường hợp IMAP (khoảng 7 bản đồ trong tổng số)
  • Cả hai nút cập nhật bản đồ
  • Rất nhiều lần đọc trên bản đồ
  • gần bộ nhớ cache được bật để tăng tốc độ đọc

Sử dụng Hazelcast 2.5, chúng tôi đã có hiệu suất tuyệt vời khi, thay vì sử dụng map.values(), chúng tôi cung cấp danh sách tất cả các khóa có chứa map.getAll(containedKeys). Cách chúng tôi theo dõi các phím chứa bằng cách thêm EntryListener vào bản đồ lưu trữ các khóa chứa trong một tập hợp đồng thời. Điều này đã được thêm vào bởi một đồng nghiệp và cảm thấy giống như một hack, nhưng hoạt động như một say mê.

Bây giờ khi chúng tôi nâng cấp lên 3.2.2 Hazelcast chúng tôi ngay lập tức nhìn thấy vấn đề với java.io, ví dụ nhìn vào đoạn mã sau đây từ 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) 

Đây là điều mà chúng ta chưa từng thấy trong Hazelcast 2.5, nhưng có trong 3.2.2. Nó nghiền ứng dụng của chúng tôi thành một bế tắc hoàn toàn. Thay thế các jar với 2.5 một lần nữa (và đổi tên Entry trở lại MapEntry) và không có gì là sai.

Điều gì có thể gây ra điều này? Có lẽ nó không sử dụng bộ nhớ cache gần nữa?

+0

Có một cơ hội để nhanh chóng xây dựng bản chụp của riêng bạn và thử nó? Tôi biết có một lỗi cận cảnh nhưng không chắc chắn nếu nó áp dụng cho tình huống này. – noctarius

+0

Tôi đã vá lỗi này: https://github.com/hazelcast/hazelcast/pull/2523 nó cố định loadClass nhưng readObject này bây giờ là nút cổ chai. Xin vui lòng chỉ cho tôi một bản vá/hướng có thể. –

+1

Tuần tự tiêu chuẩn hóa Java cũng sẽ luôn là nút cổ chai. Nếu bạn muốn tốc độ cao chỉ không sử dụng nó hoặc ít nhất là sử dụng j.i.Externalizable. – noctarius

Trả lời

Các vấn đề liên quan