java - 使用带有 LMAX 干扰器的 Hazelcast 地图 - 性能影响
问题描述
我们需要运行订单管理器应用程序的主动-主动实例以实现弹性。在我们的团队中,Hazelcast 是用于跨弹性实例共享状态的首选分布式缓存。
在应用程序中,我使用单写模式和 LMAX 中断器库。所以基本上我有一个繁忙的旋转主线程,它从中断器(环形缓冲区)读取传入的订单事件并快速处理它而不涉及任何阻塞操作。
现在唯一的问题是,一旦我的主线程接收到一个事件,它首先在 Hazelcast 分布式映射中执行查找(以获取当前订单的状态),并且 hazelcast 查找是一个相对较慢的操作(~5-10 毫秒) . 我想了解:
1)如果这仍然是可以接受的事情,即在使用 LMAX 破坏器时从分布式地图中读取
2) 另外,由于 Hazelcast 调用是涉及分布式锁的线程安全的,并且 LMAX 人员建议避免在主业务线程中使用与线程相关的锁,以便 CPU 优化的代码缓存保持热状态,因此从 LMAX Disruptor 的主处理线程调用 hazelcast 是一种反模式?
有人可以在上面加上他们的 2 美分吗?
解决方案
我会说这是不可接受的,当然。IMap 不仅无限期阻塞,它还进行网络调用。
我认为一种方法是
- 要么将 IMap 访问分离到另一个线程,并使用单独的环形缓冲区中的异步事件与它通信
- 或订阅 IMap 条目侦听器并将数据存储在内存中(如果合适)。
推荐阅读
- metadata - joomla 3 上每篇文章的唯一元数据
- hibernate - HqlParser 扩展以检查以 [ ] 开头的字段?
- qt - 为 60 个 QImage 工作后,“qimage out of memory 返回 null image”
- sql - 如何在雅典娜中从 PostgreSQL 修复到 Presto?
- android - Android模拟器捏缩放屏幕上的任何地方(mac OS)
- python - 如何使用 PIL 定义图像角颜色?
- yocto - bitbake 配方中的可选依赖项
- firebase - Firebase Firestore 上出现不需要的幽灵数据
- python - 迭代扩展列表
- android - 在 Flutter 中调用 MethodChannel 时在 Android 中获取没有虚拟方法 getSavedStateRegistry()?