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