日前,來自Aerospike公司的Anshu和Rajkumar在High Scalability網(wǎng)站上發(fā)表文章宣稱其能 以1.68美元/小時(shí)的成本獲取百萬TPS,受此影響,Redis Labs的Itamar Haber 利用非基準(zhǔn)測(cè)試程序,在作者看來基準(zhǔn)測(cè)試程序往往是一個(gè)陷阱,那么Redis的測(cè)試結(jié)果到底如何呢?
以下為原文:
前不久有一天,我看到 來自Aerospike公司的Anshu和Rajkumar寫的文章。非常喜歡這篇文章,給我印象特別深刻的是他們對(duì)EC2實(shí)例的重度調(diào)整繼而突破100萬大關(guān),但我一直在想——Redis怎么做?
我本來可以做一個(gè)成熟的基準(zhǔn)測(cè)試程序,但一個(gè)成熟的基準(zhǔn)測(cè)試程序既耗時(shí)又耗資源。而且這還不考慮開始的意想不到的困難。 真正的基準(zhǔn)測(cè)試無疑是個(gè)圈套,它只是積累在特定優(yōu)化和步驟上的作秀而已。但是我想要一個(gè)答案,我想要更快,所以我愿意做出一些犧牲。這就是近乎完美的——非基準(zhǔn)測(cè)試程序。
我自己給非基準(zhǔn)測(cè)試程序下的定義就是一點(diǎn)也不像基準(zhǔn)測(cè)試程序(因此得名)。在這里,你可以輕裝上陣。依托我們實(shí)驗(yàn)室同事們的專業(yè)知識(shí),我們?cè)跊]有進(jìn)一步優(yōu)化的前提下測(cè)量了Redis Cloud軟件的性能。我們使用以下設(shè)置運(yùn)行我們的非基準(zhǔn)測(cè)試程序:
- 單分片Redis Cloud內(nèi)存NoSQL數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行在一個(gè)Amazon實(shí)例上。
- 300萬對(duì)象,每個(gè)對(duì)象大小在100字節(jié)。
- 運(yùn)行在非服務(wù)器端實(shí)例上memtier_benchmark工具客戶端,使用下面的命令行參數(shù): `--ratio=1:1 -n 1000000 -d 100 -t 1 -c 50 --pipeline=75 --key-pattern=S:S`.
- 按相同比例混合讀寫工作負(fù)載(我們沒有特別偏向其中一種操作類型,感覺這種混合更好地反映現(xiàn)實(shí))。
- 一個(gè)按需c3.8xlarge實(shí)例。
我們沒有時(shí)間去建立一個(gè)VPC以及調(diào)整Placement Groups到最佳性能,因此我們?cè)谧约旱臉?biāo)準(zhǔn)服務(wù)環(huán)境運(yùn)行所有東西——即在嘈雜、擁擠的EC2網(wǎng)絡(luò)。當(dāng)然,我們也沒有為這個(gè)試驗(yàn)調(diào)整CPU行為或線程數(shù)量以及分片的配置,只讓Redis Cloud使用其默認(rèn)值。我們沒有測(cè)試多重網(wǎng)絡(luò)配置或添加額外的彈性網(wǎng)絡(luò)接口(ENI),只是簡(jiǎn)單的在HVM 上提供全新的預(yù)分配Redis Cloud 服務(wù)器以及為它做了非基準(zhǔn)測(cè)試程序……
在這個(gè)要點(diǎn)上,你可以從我們的運(yùn)行上獲得原始輸出,但結(jié)果是略高于120萬TPS(確切地說是1228432)。當(dāng)然,這令人驚異的結(jié)果著實(shí)刺激到我,我立即要求一個(gè)成熟的、包括全面的優(yōu)化的、徹底的、面面俱到的基準(zhǔn)測(cè)試程序來真正測(cè)試Redis可以達(dá)到的極限,你猜怎么著?
分片和Redis Cloud 集群
通過設(shè)計(jì),Redis服務(wù)器(大部分)是一個(gè)單線程的進(jìn)程。既然如此,分片通常用來部署超過單核或獨(dú)立服務(wù)器RAM性能的Redis數(shù)據(jù)庫(kù)。這里有被普遍接受的三種方法實(shí)現(xiàn)分片:客戶端、代理或集群。 因?yàn)獒槍?duì)分片Redis的客戶端和基于代理解決方案,相對(duì)容易獨(dú)立于實(shí)際的底層數(shù)據(jù)庫(kù)引擎實(shí)現(xiàn),這些(如Redis-rb和nutcracker)已經(jīng)深入人心。然而,如今只有很少Redis集群解決方案。
一個(gè)分片Redis集群意味著Redis服務(wù)器(流程)要部署在網(wǎng)絡(luò)中一個(gè)或多個(gè)計(jì)算節(jié)點(diǎn)。集群運(yùn)行Redis數(shù)據(jù)庫(kù),每個(gè)可能跨許多節(jié)點(diǎn)和多核,超過RAM總數(shù)。一個(gè)產(chǎn)品級(jí)別的集群不僅要確保數(shù)據(jù)庫(kù)的性能和基礎(chǔ)設(shè)施的管理以及數(shù)據(jù)庫(kù)資源,也要確保其可用性。
最著名的Redis集群實(shí)現(xiàn)當(dāng)然應(yīng)該是開源的,當(dāng)然,Redis cluster(v3)已經(jīng)進(jìn)入beta版后期,并且預(yù)計(jì)將在數(shù)月內(nèi)正式公布。這個(gè)即將推出的版本將為當(dāng)下諸多的挑戰(zhàn)提供優(yōu)秀的答案。在其許多新特性中,新OSS版本還包括能夠創(chuàng)建分片集群。就整個(gè)Redis社區(qū)來講(如果冒犯某些人,抱歉),我們認(rèn)為Redis版本3在各個(gè)方面都是一個(gè)重要的版本。
除了開源v3,還有其他一些Redis集群。有些人走在前面并且構(gòu)建了自己的集群,每個(gè)人都有自己的原因。我不想借任何人抬高自己(像Twitter、Weibo或Pinterest),但有一家公司,已經(jīng)建立了一個(gè)集群,那就是Redis Labs。我們Redis Cloud服務(wù)是由自己實(shí)現(xiàn)的Redis 集群提供技術(shù)支持的,并且過去兩年中,已經(jīng)在自己的大部分產(chǎn)品種使用。在此期間,我們一直在跨多重云和數(shù)據(jù)域上構(gòu)建和運(yùn)營(yíng)我們的集群。
Redis Labs是Redis項(xiàng)目的開源貢獻(xiàn)者——我們的大部分員工都很棒并且和公司同呼吸共命運(yùn)——但我們用戶需要的解決方案并不是都在開源的范圍。為了滿足這些業(yè)務(wù)挑戰(zhàn),我們開發(fā)的解決方案允許我們?cè)谙到y(tǒng)運(yùn)行時(shí)擴(kuò)展Redis數(shù)據(jù)庫(kù)從MB到TB。我們?cè)谒膫€(gè)不同的IaaS提供商和 20數(shù)據(jù)中心上部署、擴(kuò)展和管理集群。用戶們構(gòu)建了數(shù)以萬計(jì)的數(shù)據(jù)庫(kù),我們不僅要維護(hù)每個(gè)數(shù)據(jù)庫(kù)的可用性和性能,同時(shí)也要兼顧運(yùn)營(yíng)和管理任務(wù)。
下面是關(guān)于Redis Labs集群鮮為人知的事實(shí):你無需在你應(yīng)用程序中做任何改變就可以開始使用它們。是的,你可以使用現(xiàn)有的代碼和客戶端庫(kù),并且仍然會(huì)獲得集群提供的所有可擴(kuò)展性、可用性以及運(yùn)營(yíng)方面的好處。用戶只需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)和配置選項(xiàng)(可用性、數(shù)據(jù)持久性、分片、安全等諸如此類),他們只需要在Redis Cluster中使用單一Redis URL(主機(jī)名和端口)。當(dāng)然,在這上面你可以做諸如調(diào)整、最佳實(shí)踐、優(yōu)化等,但(正如在非基準(zhǔn)測(cè)試程序所示),即使沒有它們,我們的集群也是一個(gè)了不起的執(zhí)行者。
原文鏈接: The 1.2M Ops/Sec Redis Cloud Cluster Single Server Unbenchmark (編譯/魏偉 審校/仲浩)