導讀:分片上傳、斷點續傳,這兩個名詞對于做過或者熟悉檔案上傳的朋友來說應該不會陌生,總結本篇文章希望對從事相關工作的同學能夠有所幫助或者啟發。
當我們的檔案特别大的時候,上傳是不是需要很長的時間啊,這麼長時間的長連接配接,如果網絡波動了呢?中間網絡斷開了呢?在這麼長時間的過程中如果出現不穩定的情況,本次上傳的所有内容就全部失敗了,又要重新上傳。
分片上傳,就是将所要上傳的檔案,按照一定的大小,将整個檔案分隔成多個資料塊(我們稱之為 Part)來進行分别上傳,上傳完之後再由服務端對所有上傳的檔案進行彙總整合成原始的檔案。分片上傳不僅可以避免因網絡環境不好導緻的一直需要從檔案起始位置還是上傳的問題,還能使用多線程對不同分塊資料進行并發發送,提高發送效率,降低發送時間。
在系統使用者量突增以後,為了更好适配各群體的定制化需求。業務上慢慢實作了支援 C 端使用者自定義布局和配置,導緻配置資料讀取 IO 激增。
為了更好優化此類場景,将使用者自定義配置靜态化管理!也就是将對應的配置檔案生成靜态檔案,在生成靜态檔案的過程中遇到棘手的問題,配置檔案檔案過大導緻在檔案上傳伺服器等待時間過長,緻使整個業務場景性能整體下滑。

生成檔案三大要素
檔案名
檔案内容
檔案存儲格式
檔案内容、檔案存儲格式都好了解和處理,當然先前整理過微服務中常用的加密方式
微服務架構 | 微服務有哪些常用的加密方式 (一)
微服務架構 | 資料加密有哪些常用的加密方式(二)
這裡做下補充說明,如果要想對檔案内容進行加密可以考慮。但是本文的案例場景對于配置資訊保密程度較低,這裡不做拓展。
而對于檔案名的命名規範具體結合業務場景來定,通常都是以檔案概要+時間戳格式為主。但是這類命名規範容易導緻檔案名沖突,造成沒有必要的後續麻煩。
是以我這裡對于檔案名的命名做了特殊處理,有處理過前端 Route 路由經驗的應該能聯想到,檔案名可以通過基于内容生成 Hash 值來代替。
在<code>Spring 3.0</code> 之後提供了計算摘要的的方法。
傳回給定位元組的 MD5 摘要的十六進制字元串表示形式。
md5DigestAsHex 源碼
檔案名、内容、字尾(存儲格式)确定後直接生成檔案
通過内容生成檔案優點不言而喻,可以極大減少我們主動基于内容比較來生成新的檔案、如果檔案内容較大生成對應的檔案名相同則表示内容未做任何調整,此時我們也就不用做後續的檔案更新操作。
所謂的分片上傳,就是将所要上傳的檔案,按照一定的大小,将整個檔案分隔成多個資料塊(我們稱之為 Part)來進行分别上傳,上傳完之後再由服務端對所有上傳的檔案進行彙總整合成原始的檔案。分片上傳不僅可以避免因網絡環境不好導緻的一直需要從檔案起始位置還是上傳的問題,還能使用多線程對不同分塊資料進行并發發送,提高發送效率,降低發送時間。
分片上傳主要适用于以下幾種場景:
網絡環境不好:當出現上傳失敗的時候,可以對失敗的 Part 進行獨立的重試,而不需要重新上傳其他的 Part。
斷點續傳:中途暫停之後,可以從上次上傳完成的 Part 的位置繼續上傳。
加速上傳:要上傳到 OSS 的本地檔案很大的時候,可以并行上傳多個 Part 以加快上傳。
流式上傳:可以在需要上傳的檔案大小還不确定的情況下開始上傳。這種場景在視訊監控等行業應用中比較常見。
檔案較大:一般檔案比較大時,預設情況下一般都會采用分片上傳。
分片上傳的整個流程大緻如下:
将需要上傳的檔案按照一定的分割規則,分割成相同大小的資料塊;
初始化一個分片上傳任務,傳回本次分片上傳唯一辨別;
按照一定的政策(串行或并行)發送各個分片資料塊;
發送完成後,服務端根據判斷資料上傳是否完整,如果完整,則進行資料塊合成得到原始檔案
預設情況都以檔案達到 20MB 進行強制分片
為了友善調試,強制分片檔案的門檻值調整為 1KB
如上圖紅色序号的檔案碎片,定義分片上傳對象基礎屬性包含附件檔案名、原始檔案大小、原始檔案 MD5 值、分片總數、每個分片大小、目前分片大小、目前分片序号等
定義基礎屬于便于後續對檔案合理分割、分片的合并等業務拓展,當然根據業務場景可以定義拓展屬性。
複制代碼
如:
目前附件大小為:3382KB,強制分片大小限制為 1024KB
通過上述計算:分片數量為 4 個,每個分片大小為 846KB
标記目前位元組下标,循環讀取 4 個分片的資料位元組
所謂的分片上傳,就是将所要上傳的檔案,按照一定的大小,将整個檔案分隔成多個資料塊(我們稱之為 Part)來進行分别上傳。
處理大檔案進行分片主要核心确定三大點
檔案分片粒度大小
分片如何讀取
分片如何存儲
本篇文章主要分析和處理大檔案上傳過程中如何針對大檔案檔案檔案内容比較、進行分片處理。合理設定分片門檻值以及如何讀取和标記分片。希望對從事相關工作的同學能夠有所幫助或者啟發。後續會對分片如何存儲、标記、合并檔案進行詳細解讀。
原文:微服務架構 | 怎樣解決超大附件分片上傳?