使用YCSB检测MongoDB
英文原文:
http://blog.mongodirector.com/how-to-benchmark-mongodb-with-ycsb/
?
當(dāng)談到系統(tǒng)性能特性,大多數(shù)DBaaS提供商提供他們預(yù)置系統(tǒng)的有限信息。的確,基于在這樣一個(gè)系統(tǒng)下給定的大量參數(shù)的部署,很難準(zhǔn)確的討論云的實(shí)際吞吐量和延時(shí)。虛擬化環(huán)境、不可預(yù)測的負(fù)載、網(wǎng)絡(luò)延時(shí)、不同地址位置只是考慮的一部分。
?
然而對(duì)于你的MongoDB部署的真實(shí)性能有一個(gè)公正的理解是個(gè)好注意:以至于你可以基于你的應(yīng)用需求準(zhǔn)確預(yù)置;以至于你可以真實(shí)的比較大量的DBaaS提供商,確保最實(shí)惠。
這篇博文是在你的MongoDB集群上運(yùn)行一些基本的性能檢測的入門。詳細(xì)講述如何配置和運(yùn)行YCSB基準(zhǔn)測試并解釋了結(jié)果。靈感來自于當(dāng)前的MongoDB博客關(guān)于MongoDB 3.0性能提高。
YCSB是一個(gè)流行的Java開源規(guī)范和由雅虎開發(fā)的程序套件,用于比較大量NoSQL數(shù)據(jù)庫的相對(duì)性能。這些工作負(fù)載用于大量NoSQL數(shù)據(jù)庫的比較研究。
?
部署YCSB
這部分和接下來的部分將會(huì)引導(dǎo)你,在你鐘愛的DBaaS提供商系統(tǒng)上,一步步安裝、配置和運(yùn)行YCSB測試。
為了運(yùn)行負(fù)載測試,你需要一個(gè)客戶端機(jī)器,與你的MongoDB集群在相同的地理位置最好,可以避免網(wǎng)絡(luò)延時(shí)。選擇一個(gè)合適的配置運(yùn)行多線程,恰當(dāng)?shù)募虞d你的MongoDB集群。該機(jī)器需要安裝有當(dāng)前版本的Java、Maven和git。
步驟:
-
如果Java、Maven或git還沒有在你的系統(tǒng)上安裝,安裝他們。參照你的操作系統(tǒng)對(duì)應(yīng)的可用文檔。確保安裝了與你的Java版本兼容的Maven版本。測試所有的依賴正常工作。例如:
| 1 | $?javac?-version |
| 1 | javac?1.8.0_25 |
| 1 | $?mvn?-version |
| 1 2 3 4 5 6 | Apache?Maven?3.3.1?(cab6659f9874fa96462afef40fcf6bc033d58c1c;?2015-03-14T01:40:27+05:30) Maven?home:?/usr/local/Cellar/maven/3.3.1/libexec Java?version:?1.8.0_25,?vendor:?Oracle?Corporation Java?home:?/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre Default?locale:?en_US,?platform?encoding:?UTF-8 OS?name:?"mac?os?x",?version:?"10.10.2",?arch:?"x86_64",?family:?"mac" |
| 1 | $?git?-version |
| 1 | git?version?1.9.5?(Apple?Git-50.3) |
-
正如Github頁YCSB的建議,你可以wget下YCSB的tar壓縮包。但是我們推薦從源文件構(gòu)建。步驟已在YCSB的MongoDB README文檔化。這將幫助我們之后對(duì)云提供商啟用MongoDB驗(yàn)證。
| 1 2 3 | git?clone?git://github.com/brianfrankcooper/YCSB.git cd?YCSB mvn?clean?package |
-
注意:如果你的`mvn clean package`或`mvn clean install`命令失敗,根據(jù)位于“mapkeeper”包的錯(cuò)誤,在pom.xml的root層刪除或注釋“mapkeeper”條目的兩個(gè)實(shí)例。查看這里Github問題獲取更多信息。
-
一旦構(gòu)建成功,我們現(xiàn)在準(zhǔn)備運(yùn)行YCSB測試!
啟用驗(yàn)證
大多數(shù)MongoDB提供商默認(rèn)提供MongoDB驗(yàn)證并無法禁用它。不幸的是,YCSB當(dāng)前不支持MongoDB驗(yàn)證。客戶端實(shí)現(xiàn)現(xiàn)在主要使用廢棄的API調(diào)用。為了滿足我們的需求,我們添加了一個(gè)新的MongoDB專屬YCSB屬性,'mongodb.auth'和幾行代碼支持它。這個(gè)修改非常簡單并且在這里可以找到不同。默認(rèn)MongoDB專屬YCSB屬性在這里列出。
再次使用mvn構(gòu)建包,修改完成。參考上面部分關(guān)于如何使用Maven構(gòu)建YCSB。
?
運(yùn)行測試
YCSB wiki這部分詳細(xì)列出了接下來的活動(dòng)。我們將在這里簡要描述下。
-
下一步是選擇你要運(yùn)行的負(fù)載類型。花時(shí)間閱讀和理解YCSB wiki的核心負(fù)載部分。它們總結(jié)在這里:
-
負(fù)載A:重更新負(fù)載:50/50%混合讀/寫
-
負(fù)載B:讀為主負(fù)載:95/5%混合讀/寫
-
負(fù)載C:只讀:100%讀
-
負(fù)載D:最新讀負(fù)載:更多流量在當(dāng)前插入
-
負(fù)載E:短距離:短程查詢
-
負(fù)載F:讀-修改-寫:讀、修改和更新存在的記錄
-
-
顯然個(gè)體工作負(fù)載可以使用核心屬性調(diào)整。你可能想選擇一個(gè)負(fù)載,調(diào)整屬性匹配你應(yīng)用程序的特性。例如,對(duì)比研究選擇了大批有趣的“調(diào)整過的”負(fù)載。也參考了在第一部分提到的MongoDB博客。例如,對(duì)于我們的測試我們將采用負(fù)載A帶有默認(rèn)讀/寫比率。
-
選擇操作的數(shù)量(屬性“operationcount”)以致測試運(yùn)行適當(dāng)?shù)臅r(shí)間。30分鐘內(nèi)完成測試不是系統(tǒng)一般性能的好的指示。
-
選擇適當(dāng)數(shù)量的YCSB運(yùn)行的線程。這真的依賴于你的客戶端機(jī)器有多好,你的MongoDB集群可以承受多少負(fù)載和你的實(shí)際應(yīng)用多么有代表性。我們將對(duì)大量的線程運(yùn)行基準(zhǔn)測試。
-
運(yùn)行負(fù)載階段。選擇一個(gè)接近你想運(yùn)行的操作數(shù)量的記錄數(shù)量(屬性“recordcount”)來插入數(shù)據(jù)庫。選擇適當(dāng)數(shù)量的線程以便插入不會(huì)花費(fèi)很長時(shí)間。例如:
| 1 2 3 | ./bin/ycsb?load?mongodb?-s?-P?workloads/workloada?-p?recordcount=10000000?-threads?16?-p mongodb.url="mongodb://user:pwd@server1.example.com:9999,server2.example.com:9999/dbname"?-p mongodb.auth="true" |
-
-
‘load‘標(biāo)記表名它是一個(gè)導(dǎo)入操作。
-
‘s‘標(biāo)記以10秒的間隔打印狀態(tài)。
-
‘recordcount‘被設(shè)置為1千萬。
-
‘threads‘設(shè)置客戶端線程數(shù)量為16
-
‘mongodb.auth‘是啟用MongoDB驗(yàn)證的屬性。
-
-
記得
-
重定向標(biāo)準(zhǔn)輸出到一個(gè)文件
-
使用‘screen‘或一個(gè)等價(jià)的方法,以便當(dāng)運(yùn)行這些操作的時(shí)候你的會(huì)話不會(huì)丟失。
-
-
一旦數(shù)據(jù)導(dǎo)入階段完成,你準(zhǔn)備運(yùn)行你的負(fù)載。例如:
| 1 2 3 | ./bin/ycsb?run?mongodb?-s?-P?workloads/workloada?-p mongodb.url="mongodb://user:pwd@server1.example.com:9999,server2.example.com:9999/dbname"?–p mongodb.auth="true"?-p?operationcount=10000000?-threads?2 |
-
使用大量的線程重復(fù)運(yùn)行。記住重定向結(jié)果以便你之后可以比較它們。例如,我們用2、4、8、16和32個(gè)線程重復(fù)測試。
?
分析結(jié)果
這篇YCSB?wiki頁面的最后部分談到了分析結(jié)果。最有趣的一些信息是整體吞吐量(Overall Throughput)和95/99%百分比延時(shí)(Percentile Latencies)。直到當(dāng)收益變平和延時(shí)不可接受時(shí),通常增加線程數(shù)量增加了吞吐量。例如,這張圖描述了對(duì)一個(gè)我們要檢測的測試系統(tǒng),吞吐量和延時(shí)和線程數(shù)的對(duì)比。選擇的負(fù)載是負(fù)載A和大約3百萬操作。
Throughput/Latency vs #Threads
對(duì)于MongoDB服務(wù)器從負(fù)載的角度,從圖中可以推斷出16個(gè)線程也能是熱點(diǎn)區(qū)域:超過了它,對(duì)于線程數(shù)呈指數(shù)增長,吞吐量的線是平的,而延時(shí)變得無法接受的大。
?
一些觀點(diǎn):
-
為了云上系統(tǒng)性能的更好的圖片,自動(dòng)化并重復(fù)這些測試應(yīng)該在一天的不同點(diǎn)。我們注意到性能的特性會(huì)在這一天顯著變化。
-
當(dāng)比較兩個(gè)潛在的DBaaS提供商,確保在相同的地理位置選擇你的客戶端機(jī)器和DBaaS集群。集群應(yīng)該有類似的配置。也要記住在一天的不同時(shí)間運(yùn)行測試。
?
接下來
這是一些我們需要研究的事情,因?yàn)槲覀冊(cè)谶@個(gè)方面做了更多工作:
-
從多臺(tái)機(jī)器并行運(yùn)行負(fù)載:當(dāng)嘗試加載一個(gè)高容量的MongoDB集群,單一一臺(tái)客戶端機(jī)器無法滿足。YCSB當(dāng)前沒有提供容易的方法并行從多臺(tái)機(jī)器運(yùn)行負(fù)載。然而可以手動(dòng)完成。當(dāng)嘗試加載數(shù)據(jù)到一個(gè)大型集群時(shí)也是有用的。
-
數(shù)據(jù)集大小:數(shù)據(jù)庫的大小相對(duì)MongoDB系統(tǒng)的內(nèi)存將完全改變吞吐量/延時(shí)特性,對(duì)于大型數(shù)據(jù)集MongoDB只得命中磁盤。
-
個(gè)體記錄的大小:當(dāng)記錄尺寸很大,尤其當(dāng)它接近最大支持的尺寸時(shí),對(duì)于性能特性是有趣的。這可能對(duì)主要做讀-修改-回寫操作(像負(fù)載F)的應(yīng)用程序是關(guān)鍵性的。
-
不同的MongoDB驅(qū)動(dòng):因?yàn)槲覀儺?dāng)前正對(duì)比較兩個(gè)不同的DBaaS提供商感興趣,我們沒有嘗試使用更多有效的數(shù)據(jù)庫驅(qū)動(dòng)。顯然使用最新和更有效的驅(qū)動(dòng)可以獲得更好的絕對(duì)數(shù)。對(duì)應(yīng)用程序嘗試抽取系統(tǒng)的最后價(jià)值是有趣的。這篇博文談到了使用一個(gè)異步的MongoDB驅(qū)動(dòng)通過YCSB的性能提升度量。
-
不同的檢測工具:Sysbench對(duì)于MongoDB我們發(fā)現(xiàn)是有趣的。我們正在看其他的。
本文轉(zhuǎn)自UltraSQL51CTO博客,原文鏈接:http://blog.51cto.com/ultrasql/1740989 ,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的使用YCSB检测MongoDB的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Silverlight4Beta之Com
- 下一篇: 政府工作报告透露哪些信号?投资主线是什么