内存数据网格 Hazelcast 和 Ignite 是大家非常熟悉的两种分布式内存数据网格工具。
Hazelcast 是一款基于 Java的内存数据网格,它的名称和公司的名称相同。hazelcast支持分布式队列,集合,map,线程池,锁,支持事务处理,分布式的监听和事件,支持动态增加集群节点,动态备份数据,动态failover等。
关于Apache Ignite 的中文介绍可以参考李玉珏写的 Apache Ignite(一):简介以及和Coherence、Gemfire、Redis等的比较 等系列文章。Ignite来源于尼基塔·伊万诺夫于2007年创建的GridGain系统公司开发的GridGain软件,2015年1月,GridGain通过Apache 2.0许可进入Apache的孵化器进行孵化,很快就于8月25日毕业并且成为Apache的顶级项目,9月28日即发布了1.4.0版,2016年1月初发布了1.5.0版,迭代速度很快。
两个产品背后的公司Hazelcast和GridGain都有风投的背影。所以产品在开源免费的基础上还会提供商业版的支持。
我没有在实际产品中使用过这两款产品,仅仅关注过这一类的产品,所以并不完全了解它们的详细特性,但是最近的一些有趣的争论引起了我的兴趣,特地跟踪了多个帖子,弄清楚了争论的来龙去脉,特地整理了一下,也算作为我的性能系列的文章的一部分吧。
最近的事件是这两个产品背后的公司进行了激烈的性能之争。
起因是GridGain发布了一篇性能报告: GridGain vs. Hazelcast Benchmarks , 它比较了最新的GridGain Community Edition 1.5.0 和 最新的Hazelcast 3.6-EA2的性能,测试数据显示Ignite的性能要好于Hazelcast。相关的测试代码可以参照 yardstick-ignite 和 yardstick-hazelcast
进一步GridGain还到Hazelcast的用户讨论组中踢馆子,他们把测试结果和代码发布在Hazelcast的邮件列表中,请Hazelcast的人review和提意见。嚣张啊!Hazelcast的CEO Luck把这个帖子从邮件列表中删除了,并说:
我们认为你在我的地盘上发布这样的性能数据是不合适的。 我们将删除这个帖子,请发布在你的地盘上。
当然,这也不是GridGain第一次踢馆子,在2015初Apache孵化器Ignite项目的导师Konstantin Boudnik就到Tachyon 的邮件列表中比较这两个项目的缓存特性差异,也被认为是营销惨遭删帖。
Hazelcast的CEO Luck也进行了有理有据的 反驳 ,它根据GridGain的测试代码在它们的测试环境中进行了测试,根据它们的测试结果,Hazelcast 3.6-EA 也比Ignite 1.4.1快(但是Luck在它的反驳文章中的标题中写的是Ignite 1.5,估计被气晕了)。
他也指出GridGain的测试不公正的地方:
map.put()
代替 map.set()
,但是Ignite的 put
等价Hazelcast的 map.set()
,因为它们才是无返回值的方法 更正了这两处错误,Hazelcast重新做了测试,相关的 代码 和 配置 也发布在github上。
最后他指出GridGain在测试中造假, 不符合Apache孵化器的准则,你不能污蔑啊,不能诽谤啊,造假得出的性能报告有什么意义。
这里是Hazelcast的 测试报告 。
相信Hazelcast CEO的文章鲜明地指出了GridGain错误,扭转了对他们不利的印象,而且反驳的观点也不错。我比较佩服他们争论的方式,比骂街文明多了。
GridGain创始人之一Dmitriy Setrakyan,也是他们的工程EVP,次日又进行了反驳,对Luck的造假指控进行了辩解。首先他对Luck在邮件列表中删除他的帖子耿耿于怀,讽刺删帖行为是商业公司和Apache项目的区别。
GridGain根据Luck博客的反馈又重新进行了测试,结果表明大部分在AWS上的测试Ignite要比Hazelcast快50% ~100%,当然他文章的标题有点夸张,Ignite要比Hazelcast快两倍。
对于Luck指出的错误,他进行了解释:
公说公有理,婆说婆有理,这场争论还会持续下去。对于开发者来说,有竞争未必是一件坏事。