涉及JMS,数据库和Hazelcast分布式集合的XA事务

时间:2017-10-27 07:58:48

标签: java hazelcast xa

我们的一个应用程序预计很快会出现大量负载增加,我正在评估Hazelcast分布式集合,以帮助我们消除一些现有的数据库瓶颈。

我们的应用程序的多个实例正在一堆不同的主机上运行以进行水平扩展。应用程序的不同模块部署到多个Webshere Application Server,以将负载分散到多个JVM。典型的工作流程包括:

  1. 消息从Webshere MQ队列推送到MDB
  2. MDB解析消息并将其保存到数据库
  3. MDB从消息中提取标识相关消息的特殊密钥,并将该密钥插入特殊锁定表中,这样一旦某个节点获取了这样的密钥,它就会处理该节点上的所有相关消息。按顺序处理所有相关消息对我们的应用至关重要。 此表是我们要用淡黑色阻塞队列取代的内容之一
  4. 相同的MDB在Webshere MQ主题中发送通知,通知其他JVM工作到达以进行进一步处理。 我们考虑将此主题替换为Hazelcast主题,但这是可选的
  5. 所有上述流程都在同一个XA事务中发生,因此一旦其他JVM收到通知,就可以确定锁定表条目是否可用于提取。

    接收JVM一旦收到通知,就会跳转锁定表,试图锁定密钥并处理属于该密钥的所有消息。存在持续的消息流,因此所有正在运行的JVM都可以准备好接收密钥。

    我们注意到部分压力测试由于多个线程试图锁定密钥,同时数据库开始受到影响我们应用程序整体性能的越来越大的压力。

    有一些这样的信号量表控制顺序处理,这就是我们考虑转移到内存数据网格中。

    以上就是我们的故事。从理论上讲,这似乎是一个好主意,我希望实现性能提升不一定是因为减少网络流量,因为无论如何都会发生这种情况,但至少通过在多个资源上分散压力。

    我试图google关于如何设置JA,DB和Hazelcast集合参与的XA跨国上下文。不幸的是,关于XA的Hazelcast文档只是几行代码,仅此而已。我相信我不是唯一一个面临这个问题的人,我希望在这里提供一些意见。不需要一个有效的解决方案,只需链接一个好的例子或者更多如何提示文档来让我移动就足够了。

    提前谢谢你

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

如果你使用JTXA和Hazelcast资源适配器(github.com/hazelcast/hazelcast-ra),Hazelcast将成为整个JTXA交易的一部分,可以包括任何类型的交易。