上海2015年12月30日電 /美通社/ -- 最近,越來越多的第三方獨立機構推出了云服務測試報告,這個現象讓眾多業內人士感到喜憂參半。喜的(de)(de)是數據(ju)的(de)(de)大爆炸(zha),企業(ye)的(de)(de)轉型意(yi)識,互聯網的(de)(de)發(fa)展(zhan)(zhan)已經讓云計算市場(chang)迅速(su)進(jin)入(ru)了紅海(hai)階段,人們對云的(de)(de)需求與(yu)依(yi)賴性越來越高。憂的(de)(de)是也有打著云服務獨立測試的(de)(de)旗號讓一些并不真實的(de)(de)數據(ju)展(zhan)(zhan)現在受眾面前的(de)(de)事(shi)情發(fa)生(sheng)。
進入云服務領域四年了,七牛從云存儲做切入口,到目前已經積累了數十萬用戶。在這里(li),將“如(ru)何(he)更(geng)好地(di)測試云(yun)存儲服務性能”分享出來,希望能讓更(geng)多的在選擇云(yun)和往(wang)云(yun)上遷移的企(qi)業(ye)獲(huo)益(yi)。
首先,普及一個基礎知識:普遍認(ren)為,在互聯網的世界里(li)有(you)三類不同的數據(ju):
就(jiu)目前來說,大(da)家所接觸到的(de)(de)(de)公(gong)有(you)云存儲(chu)一(yi)般(ban)是針對第(di)三類也就(jiu)是非結構化數據(ju)的(de)(de)(de)存儲(chu),除了(le)存儲(chu)本(ben)身,也會(hui)提供數據(ju)加速(CDN)以(yi)及數據(ju)處(chu)理等服務,七牛就(jiu)是這(zhe)樣。這(zhe)里面,每一(yi)個子服務都會(hui)對應(ying)相關的(de)(de)(de)獨(du)立測試,而本(ben)篇文章更(geng)多(duo)的(de)(de)(de)是探討如何(he)做好(hao)存儲(chu)本(ben)身的(de)(de)(de)性能測試。
了解了基本概念,在測試前,還(huan)要理解典(dian)型的數(shu)據使用環境(jing)下(xia)的三個主要階段(duan)。
第一階段指數據從客戶端到存儲的服務端(服務入口),即上行階段。上行的表現一方面是由用戶的網絡質量決定的,同時也與云存儲服務商上行節點的優化策略有關。這時,重要的是做好整體的網絡優化,以及在軟件層面解決由于網絡不穩而帶來的上行問題。例如,斷點續上傳,模式是分片并發上傳,是能很好地解決網絡不穩的方法。因此,七牛在為“美拍”服務(wu)的(de)(de)時候,對方是(shi)非常典型的(de)(de)短視頻 UGC 場景,就充(chong)分用(yong)到了(le)斷(duan)點(dian)續上傳的(de)(de)功(gong)能。此外(wai),增(zeng)加存儲節點(dian)和反向代理節點(dian)也(ye)可(ke)以優化(hua)劣質網絡環境下的(de)(de)用(yong)戶上行(xing)問題。上行(xing)這個展開(kai)了(le),也(ye)是(shi)一個獨立測試。
第二階(jie)段就主要(yao)(yao)依賴云存儲(chu)(chu)服務本身的性能(neng)表現(xian)。例如,在數(shu)據達(da)到存儲(chu)(chu)入(ru)口之后,需要(yao)(yao)多(duo)久才(cai)能(neng)落地(di)到磁盤(pan)(pan);在取一個(ge)(ge)數(shu)據時,數(shu)據要(yao)(yao)多(duo)久才(cai)能(neng)從磁盤(pan)(pan)到達(da)存儲(chu)(chu)的出口等。這個(ge)(ge)階(jie)段的測試也(ye)是下文五(wu)個(ge)(ge)關鍵點中(zhong)所主要(yao)(yao)描述的。
第(di)三個階(jie)段指數(shu)(shu)據(ju)(ju)的(de)下行階(jie)段。數(shu)(shu)據(ju)(ju)一般(ban)是(shi)(shi)由普通用(yong)戶來使用(yong)的(de),而從存儲邊緣(yuan)到(dao)達(da)客戶端的(de)數(shu)(shu)據(ju)(ju)下行表現(xian)是(shi)(shi)由 CDN 決定的(de),因此這(zhe)(zhe)個階(jie)段的(de)性能評測是(shi)(shi)典型的(de) CDN 性能評測,很多文章中(zhong)均有詳(xiang)細描述(shu),這(zhe)(zhe)邊就不做(zuo)具體描述(shu)了。
那么如何針對云存儲本身的性能表現做有效評測呢?以下分五個關鍵點來進(jin)行闡述(shu)。
第一個關鍵點:
保障測(ce)試機(ji)的(de)(de)性(xing)能。目前絕大(da)多數云存(cun)儲(chu)服務(wu)的(de)(de)性(xing)能都不(bu)弱,因此,在(zai)測(ce)試時(shi),保障充(chong)足的(de)(de)帶寬(kuan)是(shi)(shi)非常非常必要(yao)的(de)(de),同(tong)時(shi),CPU 等資源也要(yao)確保充(chong)足。此外,如果(guo)是(shi)(shi)通過上(shang)(shang)傳小(xiao)文件(jian)來進行測(ce)試的(de)(de)話,則盡量(liang)從(cong)內存(cun)生成小(xiao)文件(jian),而不(bu)是(shi)(shi)從(cong)磁(ci)盤(pan)生成,以免(mian)由于(yu)磁(ci)盤(pan) IOPS 不(bu)夠,而影(ying)響(xiang)測(ce)試的(de)(de)準確性(xing)。而如果(guo)上(shang)(shang)傳的(de)(de)是(shi)(shi)大(da)文件(jian),那么(me)較好不(bu)要(yao)受到測(ce)試機(ji)帶寬(kuan)的(de)(de)限制。同(tong)理,如果(guo)是(shi)(shi)下載一個小(xiao)文件(jian),較好不(bu)要(yao)落磁(ci)盤(pan),直接將其扔掉(diao)就好了,以避免(mian)磁(ci)盤(pan)成為性(xing)能瓶(ping)頸。
第二個關鍵點:
將(jiang)測試(shi)機(ji)與云(yun)存儲服務的(de)(de)距離(li)控制在合理的(de)(de)范圍內。機(ji)器離(li)云(yun)存儲的(de)(de)距離(li)是非常(chang)關鍵(jian)的(de)(de),因為如果兩者之間的(de)(de)距離(li)太大的(de)(de)話,跳數、丟(diu)包率(lv)、延遲(chi)等都會(hui)極(ji)大影(ying)響測試(shi)的(de)(de)效(xiao)果。一般測試(shi),通常(chang)會(hui)選(xuan)擇在同一個供應商同機(ji)房提供的(de)(de)虛擬機(ji)上來做(zuo)云(yun)存儲性(xing)能(neng)測試(shi),這樣不僅測試(shi)起來會(hui)比較(jiao)方便,而(er)且(qie)能(neng)確(que)(que)保(bao)測試(shi)結果準確(que)(que)有(you)效(xiao)。
以七牛的一個特殊情況為例,七(qi)(qi)牛(niu)目(mu)前對外是不提供虛(xu)擬機的(de),虛(xu)擬機的(de)使用是要實名申請(qing)審(shen)批的(de),因此(ci)第(di)三方獨立測(ce)試(shi)機構在(zai)測(ce)試(shi)七(qi)(qi)牛(niu)時,也希望能夠(gou)更好地(di)確認(ren)這一點。
第三個關鍵點:
根據(ju)存(cun)(cun)儲數據(ju)的(de)大小,關注相應的(de)測試指標。通常都會(hui)選(xuan)擇 Get(下載)和 Put(上(shang)傳)來測試云存(cun)(cun)儲本身的(de)服務(wu)性能。這(zhe)里面會(hui)考察響(xiang)應時(shi)間與 TPS(平均每秒處(chu)理的(de)事務(wu)數)。
因此推薦以實際用戶為基準來考慮測試數據的大小。對于圖片數據來說,可以關注 50KB 和 2MB 兩個級別,主要因為一般手機拍照的圖片大小在 1MB 到 2MB 這個級別,這對圖片上行和下載原圖都比較關鍵。而 50KB 是比較常見的縮略圖的大小,也就是在網頁上展示的絕大部分圖片尺(chi)寸。此外(wai)網站上還會一些(xie)更小的圖(tu)(tu)片,如logo、圖(tu)(tu)標等,但這類圖片基本上都是重復的,這樣 CDN 的緩存效率比較高,一般體驗都不會差。而容易造成用戶體驗差的,反而是那些每次大小都不一樣、每個頁面都不會重復的圖片,它們才是評估的關鍵。而如果是做短視頻產品,如常見的10秒的短視頻,文件大小通常是1-2MB,因此建議關注這個級(ji)別的上行(xing)和下行(xing)。如果是更長(chang)的視頻,也應(ying)該關注相對(dui)應(ying)的測試(shi)大小。
第四個關鍵點:
測(ce)試數據的頭尾(wei)都是不(bu)能要的。在測(ce)試時,一(yi)般要選(xuan)取中間的數據,因為(wei)最開始的時候,由(you)于程序啟動或者其他干擾(rao)原因會(hui)導致(zhi)性能不(bu)太穩定,一(yi)般性能會(hui)差一(yi)些的。同時,尾(wei)部(bu)的數據通常也需要去掉,比如使(shi)用多線程測(ce)試時,各(ge)個線程結束的時間不(bu)一(yi)致(zhi),也會(hui)導致(zhi)測(ce)試尾(wei)部(bu)的數據偏差較大。
第五個關鍵點:
推(tui)薦對云存(cun)儲(chu)服務做(zuo)一些(xie)高并(bing)(bing)發的(de)測(ce)試,這(zhe)樣可以考驗云存(cun)儲(chu)供應商的(de)真實能力(li),即在處理高并(bing)(bing)發情況下(xia)的(de)成功率。但做(zuo)高并(bing)(bing)發測(ce)試時,用比(bi)較傳統(tong)的(de) Java、Python 等語(yu)言不(bu)太合適,因為(wei)在線(xian)程(cheng)模型下(xia)它們的(de)并(bing)(bing)發能力(li)受系統(tong)能支撐(cheng)的(de)線(xian)程(cheng)數限制,高并(bing)(bing)發的(de)寫法又(you)比(bi)較復雜。而用 Go、Erlang、Scala,Node.js 等語(yu)言則會方便不(bu)少。
由于國(guo)內還沒(mei)有(you)特別權(quan)威的第三(san)方做獨(du)立對(dui)比測試(shi)的機構,所以較好是(shi)自己來做測試(shi),按照上面的方式,也(ye)很簡單。
此外,選擇云存儲,除了上面談到的云存儲本身的性能,用戶也需要關注存儲的可用性以及性價比等方面。為了測(ce)試可用性,開發者可以預寫一個腳本,放在 crontab 里邊運(yun)行(xing)一段時間,收集相(xiang)關數據(ju)。目前,國內有些云服務供應商為了讓用戶能實時了解服務的可用性,從而更放心地使用云服務,已推出系統健康狀態實時監控服務,例如在 上就可以看到七牛的完整可用性紀錄以及關鍵性能指標。此(ci)外,也要考(kao)察覆蓋度問題(ti),不過覆蓋度問題(ti)一(yi)般由(you) CDN 提供支持,也有聽云(yun)這類(lei)比較(jiao)易用的測試服務。
當(dang)下,AWS、Azure 等海外云服務也已經落地(di)國(guo)內,他(ta)們(men)在國(guo)內通常也具備了以上測(ce)試條件,因此測(ce)試方式并無不同。
最(zui)后想(xiang)說的(de)是,到(dao)了今天(tian),越(yue)(yue)來越(yue)(yue)多的(de)企(qi)業在(zai)選擇云,基礎技術對用戶而言也越(yue)(yue)來越(yue)(yue)隱形(xing),而以用戶的(de)需(xu)求為中心,專注(zhu)云服務的(de)質(zhi)量才是廠商真正最(zui)需(xu)要做的(de)。
作者簡介
李道兵,七牛首席架(jia)構師。人稱(cheng)道神,Debian Developer, iso-codes 等開源軟件(jian)維護員,原(yuan)盛大云資深(shen)研究員。