我们的一个应用程序预计很快会出现大量负载增加,我正在评估Hazelcast分布式集合,以帮助我们消除一些现有的数据库瓶颈。
我们的应用程序的多个实例正在一堆不同的主机上运行以进行水平扩展。应用程序的不同模块部署到多个Webshere Application Server,以将负载分散到多个JVM。典型的工作流程包括:
所有上述流程都在同一个XA事务中发生,因此一旦其他JVM收到通知,就可以确定锁定表条目是否可用于提取。
接收JVM一旦收到通知,就会跳转锁定表,试图锁定密钥并处理属于该密钥的所有消息。存在持续的消息流,因此所有正在运行的JVM都可以准备好接收密钥。
我们注意到部分压力测试由于多个线程试图锁定密钥,同时数据库开始受到影响我们应用程序整体性能的越来越大的压力。
有一些这样的信号量表控制顺序处理,这就是我们考虑转移到内存数据网格中。
以上就是我们的故事。从理论上讲,这似乎是一个好主意,我希望实现性能提升不一定是因为减少网络流量,因为无论如何都会发生这种情况,但至少通过在多个资源上分散压力。
我试图google关于如何设置JA,DB和Hazelcast集合参与的XA跨国上下文。不幸的是,关于XA的Hazelcast文档只是几行代码,仅此而已。我相信我不是唯一一个面临这个问题的人,我希望在这里提供一些意见。不需要一个有效的解决方案,只需链接一个好的例子或者更多如何提示文档来让我移动就足够了。
提前谢谢你
答案 0 :(得分:0)
我建议你看看XA测试类:
https://github.com/hazelcast/hazelcast/tree/master/hazelcast/src/test/java/com/hazelcast/xa
此外,这里有一些代码示例: https://github.com/hazelcast/hazelcast-code-samples/tree/master/transactions
答案 1 :(得分:0)
如果你使用JTXA和Hazelcast资源适配器(github.com/hazelcast/hazelcast-ra),Hazelcast将成为整个JTXA交易的一部分,可以包括任何类型的交易。