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