基準(zhǔn)測試:Apache Ignite仍然領(lǐng)先于Hazelcast
當(dāng)在谷歌中搜索Apache Ignite時,發(fā)生了一個奇怪的事:Hazelcast的廣告跑到了列表的頂部,建議說Hazelcast比Ignite快50%:
要注意的***個疑點(diǎn)是當(dāng)你點(diǎn)擊鏈接時,顯示的是Hazelcast與一年前發(fā)布的Ignite的1.5版本的比較!另外,一段時間內(nèi)吹噓自己也是可以的,但是可笑的是這持續(xù)了一年而不在頁面中更新基準(zhǔn)測試結(jié)果。 那好,這可能是Hazelcast營銷團(tuán)隊的疏忽,既然這樣了,那么就有必要幫助他們展示一下Ignite和Hazelcast***版本的當(dāng)前狀態(tài)。
常規(guī)測試
對像Apache Ignite或者Hazelcast這樣的分布式平臺進(jìn)行測試的最簡單方式是,啟動一個擁有若干節(jié)點(diǎn)的集群然后運(yùn)行一個客戶端進(jìn)程產(chǎn)生負(fù)載再收集測試結(jié)果。作為基準(zhǔn),在AWS上準(zhǔn)備了一個擁有四臺機(jī)器/數(shù)據(jù)節(jié)點(diǎn)的集群,然后負(fù)載來自一個單一客戶端機(jī)器(或者說應(yīng)用)。Yardstick作為測試框架,所有的參數(shù)和操作方法如下所示:
根據(jù)給定的配置,按照在Amazon上運(yùn)行Yardstick的說明,可以再現(xiàn)如下數(shù)據(jù):
非常明顯,在大多數(shù)的基本操作中Ignite 1.9.0版本都顯著優(yōu)于Hazelcast 3.8.1版本,部分場景中甚至領(lǐng)先160%。 同時,也可以發(fā)現(xiàn)在部分原子操作中,Hazelcast領(lǐng)先Ignite大約4%,老實說,知道Ignite還有性能改進(jìn)空間非常好,Hazelcast沒有讓Ignite的性能工程師輕松起來。 然而,發(fā)現(xiàn)性能缺陷之后,決定在一個更高的負(fù)載下執(zhí)行同樣的測試集,這樣會更接近生產(chǎn)場景-負(fù)載由8臺客戶端機(jī)器產(chǎn)生(或者說應(yīng)用)而不是一臺客戶機(jī),結(jié)果令人振奮!下一章中會看到。
高壓測試
上面的Yardstick配置只修改了如下的部分:
在客戶機(jī)數(shù)量從1個增加到8個之后,再現(xiàn)了如下的結(jié)果:
這是從一臺客戶機(jī)上獲取的數(shù)據(jù),要想獲得一秒內(nèi)的操作總數(shù),只需要累加即可。從目前這個結(jié)果來看,在高負(fù)載下,在任何場景的每項測試中Ignite都領(lǐng)先于Hazelcast。 比如,Ignite的ANSI-99 SQL引擎領(lǐng)先Hazelcast的基于謂詞的查詢引擎200%,而在只有一個客戶端的場景中,這個差距只有80%。 甚至,Ignite在先前的atomic-put-get-bs-6場景原子測試中,由落后Hazelcast4%到領(lǐng)先Hazelcast42%。
結(jié)論
在產(chǎn)品化時可能總是要決定使用哪個產(chǎn)品,但是一個黃金法則是不要盲目相信廠商提供的官方數(shù)據(jù)。掌握所有的信息后了解一個產(chǎn)品,然后在自己的場景中進(jìn)行測試,只有這樣,才能知道哪個產(chǎn)品更適合自己。