首页 > 解决方案 > 使用带有 LMAX 干扰器的 Hazelcast 地图 - 性能影响

问题描述

我们需要运行订单管理器应用程序的主动-主动实例以实现弹性。在我们的团队中,Hazelcast 是用于跨弹性实例共享状态的首选分布式缓存。

在应用程序中,我使用单写模式和 LMAX 中断器库。所以基本上我有一个繁忙的旋转主线程,它从中断器(环形缓冲区)读取传入的订单事件并快速处理它而不涉及任何阻塞操作。

现在唯一的问题是,一旦我的主线程接收到一个事件,它首先在 Hazelcast 分布式映射中执行查找(以获取当前订单的状态),并且 hazelcast 查找是一个相对较慢的操作(~5-10 毫秒) . 我想了解:

1)如果这仍然是可以接受的事情,即在使用 LMAX 破坏器时从分布式地图中读取

2) 另外,由于 Hazelcast 调用是涉及分布式锁的线程安全的,并且 LMAX 人员建议避免在主业务线程中使用与线程相关的锁,以便 CPU 优化的代码缓存保持热状态,因此从 LMAX Disruptor 的主处理线程调用 hazelcast 是一种反模式?

有人可以在上面加上他们的 2 美分吗?

标签: javaperformancedisruptor-pattern

解决方案


我会说这是不可接受的,当然。IMap 不仅无限期阻塞,它还进行网络调用。

我认为一种方法是

  • 要么将 IMap 访问分离到另一个线程,并使用单独的环形缓冲区中的异步事件与它通信
  • 或订阅 IMap 条目侦听器并将数据存储在内存中(如果合适)。

推荐阅读