最近,越來越多的第三方獨(dú)立機(jī)構(gòu)推出了云服務(wù)測試報告,這個現(xiàn)象讓眾多業(yè)內(nèi)人士感到喜憂參半。喜的是數(shù)據(jù)的大爆炸,企業(yè)的轉(zhuǎn)型意識,互聯(lián)網(wǎng)的發(fā)展已經(jīng)讓云計(jì)算市場迅速進(jìn)入了紅海階段,人們對云的需求與依賴性越來越高。憂的是也有打著云服務(wù)獨(dú)立測試的旗號讓一些并不真實(shí)的數(shù)據(jù)展現(xiàn)在受眾面前的事情發(fā)生。
云存儲服務(wù)性能評測示意圖
進(jìn)入云服務(wù)領(lǐng)域四年了,七牛從云存儲做切入口,到目前已經(jīng)積累了數(shù)十萬用戶。在這里,將“如何更好地測試云存儲服務(wù)性能”分享出來,希望能讓更多的在選擇云和往云上遷移的企業(yè)獲益。
首先,普及一個基礎(chǔ)知識:普遍認(rèn)為,在互聯(lián)網(wǎng)的世界里有三類不同的數(shù)據(jù):
- 結(jié)構(gòu)化數(shù)據(jù),也就是關(guān)系型數(shù)據(jù)。
- 日志類型的數(shù)據(jù),即記錄用戶行為軌跡的數(shù)據(jù)。
- 非結(jié)構(gòu)化數(shù)據(jù),也就是我們經(jīng)常使用和產(chǎn)生的文件類數(shù)據(jù),如圖片、音視頻數(shù)據(jù)等。
就目前來說,大家所接觸到的公有云存儲一般是針對第三類也就是非結(jié)構(gòu)化數(shù)據(jù)的存儲,除了存儲本身,也會提供數(shù)據(jù)加速(CDN)以及數(shù)據(jù)處理等服務(wù),七牛就是這樣。這里面,每一個子服務(wù)都會對應(yīng)相關(guān)的獨(dú)立測試,而本篇文章更多的是探討如何做好存儲本身的性能測試。
了解了基本概念,在測試前,還要理解典型的數(shù)據(jù)使用環(huán)境下的三個主要階段。
第一階段指數(shù)據(jù)從客戶端到存儲的服務(wù)端(服務(wù)入口),即上行階段。上行的表現(xiàn)一方面是由用戶的網(wǎng)絡(luò)質(zhì)量決定的,同時也與云存儲服務(wù)商上行節(jié)點(diǎn)的優(yōu)化策略有關(guān)。這時,最重要的是做好整體的網(wǎng)絡(luò)優(yōu)化,以及在軟件層面解決由于網(wǎng)絡(luò)不穩(wěn)而帶來的上行問題。例如,斷點(diǎn)續(xù)上傳,模式是分片并發(fā)上傳,是能很好地解決網(wǎng)絡(luò)不穩(wěn)的方法。因此,七牛在為“美拍”服務(wù)的時候,對方是非常典型的短視頻UGC場景,就充分用到了斷點(diǎn)續(xù)上傳的功能。此外,增加存儲節(jié)點(diǎn)和反向代理節(jié)點(diǎn)也可以優(yōu)化劣質(zhì)網(wǎng)絡(luò)環(huán)境下的用戶上行問題。上行這個展開了,也是一個獨(dú)立測試。
第二階段就主要依賴云存儲服務(wù)本身的性能表現(xiàn)。例如,在數(shù)據(jù)達(dá)到存儲入口之后,需要多久才能落地到磁盤;在取一個數(shù)據(jù)時,數(shù)據(jù)要多久才能從磁盤到達(dá)存儲的出口等。這個階段的測試也是下文五個關(guān)鍵點(diǎn)中所主要描述的。
第三個階段指數(shù)據(jù)的下行階段。數(shù)據(jù)一般是由普通用戶來使用的,而從存儲邊緣到達(dá)客戶端的數(shù)據(jù)下行表現(xiàn)是由CDN決定的,因此這個階段的性能評測是典型的CDN性能評測,很多文章中均有詳細(xì)描述,這邊就不做具體描述了。
那么如何針對云存儲本身的性能表現(xiàn)做有效評測呢?以下分五個關(guān)鍵點(diǎn)來進(jìn)行闡述。
第一個關(guān)鍵點(diǎn):
保障測試機(jī)的性能。目前絕大多數(shù)云存儲服務(wù)的性能都不弱,因此,在測試時,保障充足的帶寬是非常非常必要的,同時,CPU等資源也要確保充足。此外,如果是通過上傳小文件來進(jìn)行測試的話,則盡量從內(nèi)存生成小文件,而不是從磁盤生成,以免由于磁盤IOPS不夠,而影響測試的準(zhǔn)確性。而如果上傳的是大文件,那么最好不要受到測試機(jī)帶寬的限制。同理,如果是下載一個小文件,最好不要落磁盤,直接將其扔掉就好了,以避免磁盤成為性能瓶頸。
第二個關(guān)鍵點(diǎn):
將測試機(jī)與云存儲服務(wù)的距離控制在合理的范圍內(nèi)。機(jī)器離云存儲的距離是非常關(guān)鍵的,因?yàn)槿绻麅烧咧g的距離太大的話,跳數(shù)、丟包率、延遲等都會極大影響測試的效果。一般測試,通常會選擇在同一個供應(yīng)商同機(jī)房提供的虛擬機(jī)上來做云存儲性能測試,這樣不僅測試起來會比較方便,而且能確保測試結(jié)果準(zhǔn)確有效。
以七牛的一個特殊情況為例,七牛目前對外是不提供虛擬機(jī)的,虛擬機(jī)的使用是要實(shí)名申請審批的,因此第三方獨(dú)立測試機(jī)構(gòu)在測試七牛時,也希望能夠更好地確認(rèn)這一點(diǎn)。
第三個關(guān)鍵點(diǎn):
根據(jù)存儲數(shù)據(jù)的大小,關(guān)注相應(yīng)的測試指標(biāo)。通常都會選擇Get(下載)和Put(上傳)來測試云存儲本身的服務(wù)性能。這里面會考察響應(yīng)時間與TPS(平均每秒處理的事務(wù)數(shù))。
因此推薦以實(shí)際用戶為基準(zhǔn)來考慮測試數(shù)據(jù)的大小。對于圖片數(shù)據(jù)來說,可以關(guān)注50KB和2MB兩個級別,主要因?yàn)橐话闶謾C(jī)拍照的圖片大小在1MB到2MB這個級別,這對圖片上行和下載原圖都比較關(guān)鍵。而50KB是比較常見的縮略圖的大小,也就是在網(wǎng)頁上展示的絕大部分圖片尺寸。此外網(wǎng)站上還會一些更小的圖片,如logo、圖標(biāo)等,但這類圖片基本上都是重復(fù)的,這樣CDN的緩存效率比較高,一般體驗(yàn)都不會差。而容易造成用戶體驗(yàn)差的,反而是那些每次大小都不一樣、每個頁面都不會重復(fù)的圖片,它們才是評估的關(guān)鍵。而如果是做短視頻產(chǎn)品,如常見的10秒的短視頻,文件大小通常是1-2MB,因此建議關(guān)注這個級別的上行和下行。如果是更長的視頻,也應(yīng)該關(guān)注相對應(yīng)的測試大小。
第四個關(guān)鍵點(diǎn):
測試數(shù)據(jù)的頭尾都是不能要的。在測試時,一般要選取中間的數(shù)據(jù),因?yàn)樽铋_始的時候,由于程序啟動或者其他干擾原因會導(dǎo)致性能不太穩(wěn)定,一般性能會差一些的。同時,尾部的數(shù)據(jù)通常也需要去掉,比如使用多線程測試時,各個線程結(jié)束的時間不一致,也會導(dǎo)致測試尾部的數(shù)據(jù)偏差較大。
第五個關(guān)鍵點(diǎn):
推薦對云存儲服務(wù)做一些高并發(fā)的測試,這樣可以考驗(yàn)云存儲供應(yīng)商的真實(shí)能力,即在處理高并發(fā)情況下的成功率。但做高并發(fā)測試時,用比較傳統(tǒng)的Java、Python等語言不太合適,因?yàn)樵诰程模型下它們的并發(fā)能力受系統(tǒng)能支撐的線程數(shù)限制,高并發(fā)的寫法又比較復(fù)雜。而用Go、Erlang、Scala,Node。js等語言則會方便不少。
由于國內(nèi)還沒有特別權(quán)威的第三方做獨(dú)立對比測試的機(jī)構(gòu),所以最好是自己來做測試,按照上面的方式,也很簡單。
此外,選擇云存儲,除了上面談到的云存儲本身的性能,用戶也需要關(guān)注存儲的可用性以及性價比等方面。為了測試可用性,開發(fā)者可以預(yù)寫一個腳本,放在crontab里邊運(yùn)行一段時間,收集相關(guān)數(shù)據(jù)。目前,國內(nèi)有些云服務(wù)供應(yīng)商為了讓用戶能實(shí)時了解服務(wù)的可用性,從而更放心地使用云服務(wù),已推出系統(tǒng)健康狀態(tài)實(shí)時監(jiān)控服務(wù),例如在status。qiniu。com上就可以看到七牛的完整可用性紀(jì)錄以及關(guān)鍵性能指標(biāo)。此外,也要考察覆蓋度問題,不過覆蓋度問題一般由CDN提供支持,也有聽云這類比較易用的測試服務(wù)。
當(dāng)下,AWS、Azure等海外云服務(wù)也已經(jīng)落地國內(nèi),他們在國內(nèi)通常也具備了以上測試條件,因此測試方式并無不同。
最后想說的是,到了今天,越來越多的企業(yè)在選擇云,基礎(chǔ)技術(shù)對用戶而言也越來越隱形,而以用戶的需求為中心,專注云服務(wù)的質(zhì)量才是廠商真正最需要做的。
作者簡介
李道兵,七牛首席架構(gòu)師。人稱道神,DebianDeveloper,iso-codes等開源軟件維護(hù)員,原盛大云資深研究員。