当在谷歌中搜索Apache Ignite时,发生了一个奇怪的事:Hazelcast的广告跑到了列表的顶部,建议说Hazelcast比Ignite快50%:
要注意的***个疑点是当你点击链接时,显示的是Hazelcast与一年前发布的Ignite的1.5版本的比较!另外,一段时间内吹嘘自己也是可以的,但是可笑的是这持续了一年而不在页面中更新基准测试结果。 那好,这可能是Hazelcast营销团队的疏忽,既然这样了,那么就有必要帮助他们展示一下Ignite和Hazelcast***版本的当前状态。
常规测试
对像Apache Ignite或者Hazelcast这样的分布式平台进行测试的最简单方式是,启动一个拥有若干节点的集群然后运行一个客户端进程产生负载再收集测试结果。作为基准,在AWS上准备了一个拥有四台机器/数据节点的集群,然后负载来自一个单一客户端机器(或者说应用)。Yardstick作为测试框架,所有的参数和操作方法如下所示:
根据给定的配置,按照在Amazon上运行Yardstick的说明,可以再现如下数据:
非常明显,在大多数的基本操作中Ignite 1.9.0版本都显著优于Hazelcast 3.8.1版本,部分场景中甚至领先160%。 同时,也可以发现在部分原子操作中,Hazelcast领先Ignite大约4%,老实说,知道Ignite还有性能改进空间非常好,Hazelcast没有让Ignite的性能工程师轻松起来。 然而,发现性能缺陷之后,决定在一个更高的负载下执行同样的测试集,这样会更接近生产场景-负载由8台客户端机器产生(或者说应用)而不是一台客户机,结果令人振奋!下一章中会看到。
高压测试
上面的Yardstick配置只修改了如下的部分:
在客户机数量从1个增加到8个之后,再现了如下的结果:
这是从一台客户机上获取的数据,要想获得一秒内的操作总数,只需要累加即可。从目前这个结果来看,在高负载下,在任何场景的每项测试中Ignite都领先于Hazelcast。 比如,Ignite的ANSI-99 SQL引擎领先Hazelcast的基于谓词的查询引擎200%,而在只有一个客户端的场景中,这个差距只有80%。 甚至,Ignite在先前的atomic-put-get-bs-6场景原子测试中,由落后Hazelcast4%到领先Hazelcast42%。
结论
在产品化时可能总是要决定使用哪个产品,但是一个黄金法则是不要盲目相信厂商提供的官方数据。掌握所有的信息后了解一个产品,然后在自己的场景中进行测试,只有这样,才能知道哪个产品更适合自己。