在我们的项目中,我们正在测试事务如何在分布式环境中工作。作为项目的一部分,我们正在测试GridGain 6.5.5的开源版本。GridGain事务问题
我们在下面的测试用例面临很多问题:
- 我们没有任何额外的规则测试缓存。
- 缓存存储一个id-String作为键,BigDecimal作为一个值存储。
- 我们正在对来自6,12和18个客户端的第一个缓存的值进行基本操作(加法和减法)的测试。一个操作看起来像“从A中减去X,将X加到B中”。
- GridGain应用程序在WildFly中作为.war文件进行部署。
- 客户端使用HTTP通过部署的GridGain连接到WildFly并发送要执行的操作列表(我们正在测试具有1个操作,50,500,1000,5000操作的批处理)。
- 我们正在使用事务测试群集多节点模式,我们已经使用的配置文件被进一步附加。
- 我们已经分别测试了悲观和乐观的交易。
- 如果结果值等于虚拟模式,我们称结果值为“一致”:一个客户端,批次= 1,一个节点。我们有一个用于交叉检查的虚拟程序(其在此模式下的结果总是等于本地模式下的GridGain)。
的问题是:
- 如果我们在做交易的,是(从一个密钥值中减去,添加到另一个),我们面临着两个问题:死锁和不一致的,如果我们没有得到死锁。不一致的值的数量很少,但我们无法避免它 - 每1000个键值约为12。
- 如果我们改变我们的请求以便在每个客户端按键排序(所以操作顺序可能会改变),我们可以避免死锁和不一致。但是,我们又遇到了另外一个问题:如果该批次至少有500个,那么我们就会发生无法结束的交易失败。如果批量很小,我们就会完全失败GridGain(它不响应当前查询)。
- 一切工作非常缓慢,我们几乎没有在同一时间的CPU负载(批次= 1000操作约6秒)。可以吗?
我们的硬件:
8X戴尔M620刀片,256GB内存,2×8核至强E2650v2,万兆以太网网络。
附:
- GridGain乐观的配置:https://gist.github.com/al-indigo/a2824aa62a3af8b18932
- GridGain悲观配置:相同,但与
- GridGain日志第二个问题:https://gist.github.com/al-indigo/233058772418fba8d341
只要我们注意到,僵局解决方案不起作用,当然我们开始避免以手动方式死锁(如你所说)。尽管如此,在传统的DBMS中使用了一些算法:http://en.wikipedia.org/wiki/Deadlock_provision。所以我们认为它也可以在GridGain中。 但这不是主要观点。 主要问题是相当少量的数据处理失败(日志附加到原始问题)和速度。 下面是我们使用的示例代码(configgain for gridgain也在这个问题中):https://gist.github.com/al-indigo/438559003a7821c9779e – 2014-11-24 16:33:25
您可以添加测试用具代码吗?我们试图以与您相同的方式重现它是至关重要的。 – Dmitriy 2014-11-24 20:31:08
我不确定我们可以因为NDA。一般来说,我们使用Ansible和我们自己的剧本来部署所有内容并运行测试。自测试开始以来,除GridGain和Java客户端应用程序之外,其他软件层没有任何影响。我可以(私下 - 请给我一个链接到你的电子邮件)我们的中间结果表,以证明一切工作没有预期的那么快。 – 2014-11-25 12:16:58