最近,越來(lái)越多的第三方獨立機構推出了云服務(wù)測試報告,這個(gè)現象讓眾多業(yè)內人士感到喜憂(yōu)參半。喜的是數據的大爆炸,企業(yè)的轉型意識,互聯(lián)網(wǎng)的發(fā)展已經(jīng)讓云計算市場(chǎng)迅速進(jìn)入了紅海階段,人們對云的需求與依賴(lài)性越來(lái)越高。憂(yōu)的是也有打著(zhù)云服務(wù)獨立測試的旗號讓一些并不真實(shí)的數據展現在受眾面前的事情發(fā)生。

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