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