繁体   English   中英

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

[英]XA transaction involving JMS, Database and Hazelcast distributed collection

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

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

  1. 消息从Webshere MQ队列推送到MDB
  2. MDB解析消息并将其保存到数据库
  3. MDB从消息中提取一个标识相关消息的特殊密钥,并将该密钥插入特殊的锁定表中,因此,一旦某个节点选择了此密钥,它将处理该节点上的所有相关消息。 顺序处理所有相关消息对于我们的应用程序至关重要。 该表是我们要用hazelcast阻止队列替换的东西之一
  4. 相同的MDB在Webshere MQ主题中发送通知,通知其他已到达工作的JVM,以进行进一步处理。 我们考虑将该主题替换为Hazelcast主题,但这是可选的

以上所有流程都发生在同一XA事务中,因此,一旦其他JVM收到通知,就可以确定锁定表条目可用于拾取。

接收方JVM一旦获得通知,将跳到锁定表上,尝试锁定密钥并处理属于该密钥的所有消息。 消息流不断,因此总是有准备好供所有正在运行的JVM使用的密钥。

我们注意到部分压力测试表明,由于多个线程试图同时锁定键,因此数据库开始承受越来越大的压力,从而影响了应用程序的整体性能。

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

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

我试图在Google上搜索有关如何建立JA,DB和Hazelcast集合参与的XA跨国环境的信息。 不幸的是,有关XA的Hazelcast文档只是几行代码,仅此而已。 我确信我不是唯一面对这个问题的人,我希望在这里有所投入。 不需要有效的解决方案,只需链接到一个很好的例子,或者更多一些如何提示文档以使我动起来就足够了。

预先谢谢你

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM