隨著網路環境的大幅改善及網路資費的顯著降低,人們在網路上的互動不再侷限於傳統的文字內容,圖片、語音、視訊等紛紛加入了互動行列。
相較於文字內容而言,多媒體在易用性和情感表達上更有優勢,當然相對文字,體積也大了很多。比如一條文字訊息只有不到 100 位元組,但一條視訊訊息可能超過 100 MB。這就導致多媒體在網路傳輸、實時觸達等方面相對文字內容會更難一些。
在網站或者程式中,除了使用者交流的圖片、視訊等互動訊息,還有其他形式的大檔案也越來越多。保證大檔案的上傳穩定是一個需要長期投入和突破的重點。今天,我們就來看看都有哪些手段可以保證使用者擁有一個良好的上傳體驗。
如何讓資源傳遞又快又穩
或許大家會注意到,使用 QQ 時,朋友傳送給你的圖片和視訊會載入一段時間才會顯示,這是因為程式並不是傳送檔案給你,而是傳送了檔案路徑,當我們訪問路徑後才會載入檔案。這是當前主流的大檔案通訊方式,即:
- 上傳檔案到檔案伺服器
- 推送檔案路徑
- 收到檔案路徑
- 載入檔案
這麼做是因為大檔案的傳輸耗時過長,會影響訊息的即時性,所以不會直接傳送檔案。
那麼,我們如果要想讓圖片、視訊、語音等多媒體訊息傳送得又快又穩,就可以從“上傳多媒體檔案到檔案伺服器”這一步上著手。
上傳接入點
第一種優化上傳檔案的手段是優化上傳接入點。
上傳請求到檔案伺服器,伺服器響應建聯,上傳端再繼續傳遞資料,直至上傳完成。這個過程的耗時越短就會讓人感覺網速越快。
然而我們國家目前的固網寬頻運營商構成複雜,跨運營商網路訪問的高延遲和不穩定性一直是個比較棘手的難題。對於傳輸資料更多的視訊、圖片等多媒體檔案來說,跨運營商來上傳檔案,多次 RTT(Round-Trip-Time,往返時延)的體驗則會更差。
目前針對這種網路情況的主流做法是,對不同的網路運營商提供不同的上傳接入點 IP,然後通過運營商 DNS 解析,讓使用者能通過本運營商的上傳接入點來快速上傳檔案。同時後端的圖片上傳儲存服務後會部署在多線機房,方便快速地把檔案流提交給儲存層,從而避免從接入點到儲存服務的跨網開銷,並解決其他運營商的使用者下載圖片時需要跨網的問題。
不過,雖然多個運營商接入點 IP 能解決跨運營商網路訪問的問題,但是在管理和使用上會比較複雜。因此大部分服務提供商會利用多線 BGP(Border Gateway Protocol,邊界閘道器協議)機房託管,這樣就可以只提供 IP ,讓訪問使用者自主選擇最佳路由。
分塊上傳
除去上傳接入點的優化,分塊上傳也可以提升多媒體檔案的上傳效能和成功率。
分塊上傳,是指在上傳客戶端,把需要上傳的檔案按照一定規則切分為多個資料塊,並按照規則標記序號,然後再分別上傳這些資料塊,服務端接收到後,按照序號重新將多個資料塊組裝成完整的檔案。
對於圖片、視訊這種較大的檔案來說,分塊上傳可以讓客戶端在分塊完成後,使用併發的方式充分利用網路頻寬同時上傳多個分塊,有效提升了上傳效率。此外,在一些網路環境較差、訊號不穩定的場景下,採用分塊的方式,在上傳失敗後進行重試時,只需要重傳某一個失敗的分塊,不必重新上傳整個檔案,顯著提升了重新傳送的成功率。
在分塊上傳中,分塊大小也是一個重要的問題。如果分塊太大,片數少,上傳的併發度不夠,可能會降低上傳效率,而且每個大的分塊在失敗後重傳的成本會比較高。但是如果分塊太小,片數多,併發需要的連線數又太多,多條連線會降低網路的整體吞吐,客戶上傳端和服務接收端拆分與合併分塊的開銷也相應增加,而且傳輸時的額外流量也會更多。
所以,不同網路環境下如何選擇一個合適的分塊大小至關重要。一般來說,在網路狀況較好的環境,比如在 WiFi、4G 下,相應的分塊大小應該設定得更大一些;而在 2G、3G 弱網情況下,分塊可以適當設定小一點。
斷點續傳
因為大檔案的上傳耗時較長,如果使用者由於網路斷開、裝置重啟等原因,需要在上傳未完成時暫停上傳任務。當然,使用者肯定不會希望下次上傳是從頭開始。因此如何從暫停位置開始上傳的功能就變得必要起來。這就是我們常說的“斷點續傳”
斷點續傳是通過給每一次上傳行為分配一個唯一的任務標識,每個分塊在上傳時除了攜帶自己的序號外,還需要帶上這個任務標識,服務端針對接收到的同一個任務標識的分塊進行暫存,即使由於某個原因暫停上傳了,這些暫存的分塊也不會馬上清理掉,而是保留一定的時間。
當上傳端需要繼續上傳時,在請求的同時會繼續攜帶之前的任務標識。客戶端接收到後會檢查服務端已有分塊的情況,如果沒有過期就繼續從上次斷開的分塊位置進行上傳,反之則會重新上傳。
斷點續傳功能在上傳大檔案時,可解決傳輸較大檔案過程中因網路錯誤而必須重頭再來的痛點,對於提升使用者上傳體驗是很明顯的。
如何快速擁有這些上傳優勢
如果想要完成上述大檔案上傳優化,需要考慮到架構、設計、運維等方面,不僅優化成本高,改造時間相對也長。想要擁有上面所說的這些優勢,選擇又拍雲端儲存就可以了。
又拍雲端儲存可以讓大型檔案通過 CDN 就近完成上傳、上傳加速傳輸、分塊上傳和斷點續傳,同時還可以使用圖片處理、視訊處理、檔案壓縮解壓縮對檔案進行處理。在檔案訪問的時候,也會通過 CDN 使用大檔案分段快取、視訊拖拉、鏈路優化等功能進行全網分發。保證企業海量資料的傳輸、處理、儲存、分發與容災需求。