關(guān)鍵詞:超大文件;云原生;文件切片;文件一致性校驗;糾刪碼
中圖分類號:TP302.7;TP392 文獻標識碼:A
0 引言
隨著信息技術(shù)的發(fā)展和數(shù)字化建設(shè)的深入,企業(yè)在日常管理和生產(chǎn)運營中會使用大量的軟件系統(tǒng),這些系統(tǒng)在運行中也會產(chǎn)生大量數(shù)據(jù)。根據(jù)相關(guān)預(yù)測,到2027 年,全球非結(jié)構(gòu)化數(shù)據(jù)可能將占到數(shù)據(jù)總量的86.8% [1]。部分非結(jié)構(gòu)化數(shù)據(jù)文件已經(jīng)屬于超大文件,單文件大小達到數(shù)百GB 級甚至TB 級,這些文件包括工程數(shù)據(jù)文件、數(shù)據(jù)庫文件、虛擬機快照文件、日志存儲文件以及用于數(shù)據(jù)分析的數(shù)據(jù)包文件等。相較于結(jié)構(gòu)化數(shù)據(jù),非結(jié)構(gòu)化超大文件在采集上傳、處理存儲和調(diào)用共享等多個應(yīng)用場景中都有其特殊性,使用傳統(tǒng)架構(gòu)和技術(shù)會存在效率、性能以及易用性等方面的不足。因此,需要借助新的架構(gòu)和技術(shù)解決超大文件在處理存儲方面的問題,以應(yīng)對數(shù)字經(jīng)濟時代帶來的技術(shù)挑戰(zhàn)。
1 超大文件處理存儲的問題與解決方向
1.1 文件采集上傳效率低
超大文件一般是以獨立文件的方式存儲在磁盤、磁帶和光盤等存儲介質(zhì)上,在使用時需要將文件采集上傳到服務(wù)器、云主機或者專業(yè)軟件中,以進行后續(xù)處理。由于網(wǎng)絡(luò)條件的限制,采集上傳文件的過程會長時間(通常需要幾十分鐘甚至數(shù)小時)占用網(wǎng)絡(luò)帶寬資源,以及對磁盤進行大量讀寫,這不僅效率低,而且容易出現(xiàn)因系統(tǒng)卡頓和誤操作導(dǎo)致的上傳失敗,并且無法斷點續(xù)傳。
本文針對超大文件采集上傳的問題,提出切片、多線程上傳、斷點續(xù)傳、切片合并校驗等解決方向,可大幅提升上傳效率。
1.2 文件存儲可靠性不足
超大文件的離線存儲方式包括磁盤、磁帶和光盤等,該方式會因為硬件損壞或系統(tǒng)故障導(dǎo)致文件丟失或損壞,可靠性較差。超大文件的在線存儲方式包括數(shù)據(jù)庫二進制大對象(binary large object,BLOB)字段存儲、分布式文件存儲和對象存儲等方式。BLOB 類型的關(guān)系數(shù)據(jù)庫可以存儲二進制數(shù)據(jù),適合存儲大文件,但文件大小有限制(如MySQL 限制為1 GB),讀寫性能和查詢性能都較差,外部訪問較為復(fù)雜,數(shù)據(jù)備份和遷移的效率低,無法實現(xiàn)文件的及時共享。分布式文件存儲是一種將數(shù)據(jù)分散存儲在多臺獨立設(shè)備上的技術(shù),具備高容錯性,單節(jié)點故障不會導(dǎo)致數(shù)據(jù)丟失,適合存儲大數(shù)據(jù)量的文件,但分布式文件存儲技術(shù)不適用于存儲數(shù)量較多的小容量文件,因為在多副本策略下磁盤利用率較低,橫向擴容和縱向擴容復(fù)雜,管理和運維的難度較高。
通過對超大文件采集存儲場景下的文件大小、文件類型、文件格式和應(yīng)用場景進行分析,本文提出采用對象存儲技術(shù)來解決文件存儲問題。對象存儲技術(shù)的單文件大小可以覆蓋kB 至TB 級別,能夠靈活應(yīng)對超大文件的切片存儲需求,解決分布式文件存儲技術(shù)由于文件大小固定導(dǎo)致的資源利用率低的問題。該技術(shù)利用糾刪碼提升磁盤利用率,支持順序、隨機高性能并發(fā)讀寫,并且通過數(shù)據(jù)分布、數(shù)據(jù)緩存等方式提供更好的訪問性能,適用于超大文件存儲的場景需求。
1.3 文件調(diào)用共享不便利
超大文件由于管控技術(shù)和手段不足,導(dǎo)致對超大文件的調(diào)用和共享存在不便利的情況,難以進行高效檢索和共享利用,無法充分體現(xiàn)數(shù)據(jù)的價值。針對以上問題,本文提出搭建文件查詢共享平臺,通過統(tǒng)一的標準、入口和規(guī)范化的流程,實現(xiàn)超大文件的高效檢索和共享利用。
2 基于云原生架構(gòu)的平臺整體設(shè)計
為更有效地解決超大文件在采集存儲方面的性能、效率和易用性等問題,采用云原生架構(gòu)進行整體平臺設(shè)計和構(gòu)建。
2.1 云原生架構(gòu)與特點
云原生架構(gòu)是一種在云環(huán)境下設(shè)計和構(gòu)建應(yīng)用程序的方法和理念,強調(diào)微服務(wù)架構(gòu)、容器化部署、彈性伸縮、自動化運維以及敏捷開發(fā)與持續(xù)交付。通過微服務(wù)架構(gòu),應(yīng)用程序被拆分為獨立的服務(wù)單元,實現(xiàn)靈活的開發(fā)和部署;容器化部署使應(yīng)用程序具備高度的可移植性和隔離性;彈性伸縮實現(xiàn)了系統(tǒng)根據(jù)需求自動調(diào)整資源和容量;自動化運維提高了系統(tǒng)的可靠性和穩(wěn)定性;敏捷開發(fā)與持續(xù)交付實現(xiàn)了快速響應(yīng)市場和用戶需求[2]。
2.2 平臺整體架構(gòu)設(shè)計
平臺整體架構(gòu)如圖1 所示。在基礎(chǔ)設(shè)施層的基礎(chǔ)上搭建云原生底座平臺,平臺可分為資源調(diào)度層、基礎(chǔ)支撐層和組件能力層3 個層級。其中,資源調(diào)度層負責硬件資源接入,實現(xiàn)軟、硬件解耦和計算資源的統(tǒng)一調(diào)度;基礎(chǔ)支撐層負責滿足云環(huán)境的共性技術(shù)需求,實現(xiàn)自動化運維、資源管理、應(yīng)用管理、服務(wù)治理和開發(fā)運維一體化等功能;組件能力層負責根據(jù)超大文件采集存儲和管理的要求,提供各類標準化能力組件的快速交付,其具有數(shù)據(jù)庫服務(wù)、計算服務(wù)、存儲服務(wù)、消息服務(wù)等能力。
云原生底座平臺的上一層級為數(shù)據(jù)處理層,部署超大文件處理存儲的相關(guān)功能應(yīng)用,包括文件切片、文件傳輸、文件合并、數(shù)據(jù)校驗和數(shù)據(jù)存儲等。平臺可以對應(yīng)用運行中所需要的算力、標準化能力組件以及數(shù)據(jù)進行動態(tài)使用和調(diào)度。通過標準服務(wù)交付、統(tǒng)一資源管理和統(tǒng)一集群調(diào)度,實現(xiàn)超大文件處理存儲應(yīng)用的高可靠性、高性能和彈性擴展。
數(shù)據(jù)處理層的上一層級為面向用戶的服務(wù)應(yīng)用層,包括文件查詢、文件共享、訪問鑒權(quán)、文件下載和服務(wù)接口等,通過統(tǒng)一門戶實現(xiàn)超大文件調(diào)用共享的一站式服務(wù)。
3 超大文件處理存儲優(yōu)化技術(shù)研究
3.1 基于文件切片合并的采集上傳優(yōu)化
超大文件采集上傳優(yōu)化的基本思路為將大文件切分成多個小文件,再進行上傳和合并?;跒g覽器的網(wǎng)絡(luò)應(yīng)用程序編程接口(Web applicationprogramming interface,Web API)規(guī)范,可以利用文件接口(file API)和網(wǎng)絡(luò)工作線程接口(Webworkers API),將超大文件在客戶端本地進行多線程切片處理。首先,利用文件讀取器(FileReader)接口異步讀取存儲在用戶計算機(或原始數(shù)據(jù)緩沖區(qū))的文件內(nèi)容,使用 file 或 BLOB 對象指定要讀取的文件或數(shù)據(jù)。按照預(yù)設(shè)的切片大小,將文件切分成固定大小的切片。為避免輸入/ 輸出(input/output,I/O)密集型任務(wù)阻塞或拖慢主線程,可以利用 Web workers API 在后臺獨立線程中執(zhí)行耗時的任務(wù)。
切片在一定程度上會影響上傳性能,若切片太小,則需要頻繁建立file API 連接和啟動Webworkers 后臺多線程,此時建立連接和啟動線程的時間明顯多于數(shù)據(jù)傳輸?shù)臅r間;若切片太大,則單任務(wù)運行時間過長,網(wǎng)絡(luò)應(yīng)用程序內(nèi)存占用過高,不利于程序的并發(fā)運行。多次實驗測試數(shù)據(jù)顯示,100 GB 的文件在網(wǎng)速為1 000 Mb/s(上傳速度約為120 MB/s)時,切片為10 MB 的上傳總時間是切片為200 MB 的2 ~ 3 倍。
切片的操作過程如下:將超大文件分割成小塊,多線程上傳,形成多個并行的上傳任務(wù),以實現(xiàn)文件的分片上傳。在分片上傳中實現(xiàn)斷點續(xù)傳,將上傳任務(wù)劃分為多個部分,如果因網(wǎng)絡(luò)故障造成傳輸中斷,可以快速跳過已上傳的部分繼續(xù)上傳,無須重新開始,從而提高文件采集的效率。
切片的合并是指在所有切片上傳完成后,將所有切片合并成一個整體的文件。具體操作為客戶端瀏覽器將所有切片上傳完畢后,發(fā)送最后一個上傳完成的指令,同步調(diào)用后端API 將所有切片進行合并。但當文件大小為數(shù)百GB、單文件切片數(shù)量達到上千甚至上萬級別時,后端文件合并時長達到幾十分鐘甚至1 h 以上,并且近萬個切片的合并是消耗中央處理器(central processing unit,CPU)和I/O 處理任務(wù),服務(wù)器壓力在合并過程中持續(xù)過大。由于客戶端調(diào)用是同步API,整個合并過程客戶端雖然已經(jīng)上傳完所有切片,但是系統(tǒng)仍然處于等待狀態(tài),這容易造成瀏覽器假死的錯覺。優(yōu)化方案有兩種:一種是基于簡單存儲服務(wù)(simplestorage service,S3)的分段上傳功能來實現(xiàn)對象的上傳和復(fù)制[3],切片上傳和切片合并的任務(wù)分別由分段上傳啟動接口、分段上傳接口、分段上傳完成接口完成,此優(yōu)化方案主要取決于S3 API 的處理能力,切片合并過程不可見。另一種優(yōu)化方案是利用Linux C++ 庫函數(shù)fseek()以及 Java 隨機文件讀取技術(shù)。在切片上傳之前,初始化一個固定大小的空文件,在切片并發(fā)上傳的過程中,任何一個有序切片在最終整體文件的位置都是固定的,當單個切片上傳完成時,將切片插入空文件的指定位置即可。此優(yōu)化方案的上傳過程完全自主可控,切片上傳完成即表示整個上傳過程完成,避免文件切片上傳后需要客戶端長時間等待的情況。該優(yōu)化方案可以在上傳過程中實現(xiàn)服務(wù)器負載的持續(xù)穩(wěn)定,避免出現(xiàn)較大的波動。
3.2 基于多哈希采樣消息摘要算法的文件一致性校驗優(yōu)化
超大文件在采集上傳中需要進行切片、傳輸、合并等操作,為避免由于網(wǎng)絡(luò)丟包等原因?qū)е碌臄?shù)據(jù)缺失,需要對文件一致性進行校驗。一致性校驗采用常見的消息摘要算法,如用于防篡改場景的MD5 消息摘要算法和用于防偷窺場景的SHA-256 安全散列算法(secure Hash algorithm,SHA)。MD5是一種被廣泛使用的密碼散列函數(shù),用于生成128 位(16 字節(jié)) 的散列值。SHA-256 為SHA-2家族中的一員,是一種加密散列算法標準,可以將任意長度的消息轉(zhuǎn)化為固定長度為256 位的哈希值,也稱為消息摘要。
在普通配置的客戶端上,計算數(shù)百GB 文件的MD5 值需要約1 h,采用SHA-256 算法則需要約2 h,這會大大影響文件采集上傳的效率,造成軟件體驗感的下降。因此,本文采用可預(yù)設(shè)規(guī)則的多哈希采樣消息摘要算法對超大文件進行一致性校驗。
首先預(yù)設(shè)文件大小的閾值(4 GB),若超過閾值,則進行多哈希采樣。程序采用可變預(yù)設(shè)規(guī)則,其可以預(yù)設(shè)采樣位置、采樣塊大?。憾喙2蓸幽J選取文件首、中、尾3 個采樣位置,因為這3 個采樣位置的信息最具代表性,能顯著提升計算準確性;多哈希采樣默認選取1 GB 的連續(xù)數(shù)據(jù)作為采樣塊大小,采樣塊大小要適宜,過小的采樣塊會損失樣本代表性,而過大的采樣塊會導(dǎo)致計算時長增加,造成資源浪費。采用多哈希樣本匹配方案,可以有效避免哈希碰撞[4]。為進一步提升數(shù)據(jù)的準確性,可以在服務(wù)端單獨啟動完整消息摘要算法校驗任務(wù),利用多哈希采樣與后臺服務(wù)器校驗任務(wù)相結(jié)合的方法,可以有效提升消息摘要算法的計算效率和數(shù)據(jù)準確性。在數(shù)據(jù)采集上傳的過程中,通過該優(yōu)化方案,可將采集上傳速度提升數(shù)十倍,實現(xiàn)超大文件高效、安全、完整上傳。
3.3 基于糾刪碼技術(shù)的文件存儲優(yōu)化
超大文件的存儲由云原生底座平臺提供支撐,采用分布式文件存儲技術(shù),保障文件在不同機架、不同服務(wù)器中保存多個副本,任意一個副本損壞不影響文件的正常使用。
多副本技術(shù)是將數(shù)據(jù)的多個冗余副本分布在不同機器上,當存儲節(jié)點發(fā)生故障時,自動將服務(wù)切換到其他副本,從而保證數(shù)據(jù)的高可靠性和高可用性。然而,隨著數(shù)據(jù)量的持續(xù)增長,大型數(shù)據(jù)中心采用的多副本技術(shù)的存儲開銷越來越多。面對這種情況,糾刪碼技術(shù)因其低存儲開銷的特點受到越來越多的關(guān)注。其中,RS 編碼( Reed-Solomon code)是目前被廣泛使用的糾刪碼方案, 它將k 個數(shù)據(jù)塊按照一定的編碼規(guī)則,生成m 個校驗塊,對于這k+m 個編碼塊,其編碼性質(zhì)能夠保證選取任意的k個編碼塊均能重建所有數(shù)據(jù)。以RS(4,2)編碼為例,它只需占用1.5 倍的存儲空間,就具有與三副本技術(shù)相同的容錯能力[5]。
通過研究分析,評估磁盤陣列、副本存儲以及糾刪碼技術(shù)的優(yōu)缺點,在多副本冗余存儲的情況下,采用糾刪碼技術(shù),可以最大限度地提升磁盤空間利用率。通過研究測試,采用不同糾刪碼編碼方案,結(jié)合服務(wù)器CPU、內(nèi)存等壓力情況變化,綜合磁盤利用率、硬件加速、服務(wù)器狀況等性能指標,可以通過設(shè)置服務(wù)器個數(shù)、磁盤個數(shù)和校驗塊個數(shù),從而控制磁盤利用率、實現(xiàn)對象級別的逐文件修復(fù)、實現(xiàn)超大文件的存儲優(yōu)化。同時,基于糾刪碼的對象存儲可以支持橫向節(jié)點縮擴容;輕松管理百億數(shù)量的PB 級別文件;統(tǒng)一訪問方式和授權(quán)加密存儲;可應(yīng)對大文件、小文件的順序以及隨機高性能并發(fā)讀寫需求,為I/O 密集型工作負載提供高帶寬、低延時性能支持,讀寫速度最高可達每秒幾百GB。
通過研發(fā)測試發(fā)現(xiàn),對于存儲集群中文件大小的不同區(qū)間分布,服務(wù)器個數(shù)、單服務(wù)器磁盤個數(shù)、校驗塊個數(shù)將影響整體存儲集群的吞吐率。例如,在集群中文件平均大小為200 MB 的情況下,相較于服務(wù)器個數(shù)為4、單服務(wù)器磁盤個數(shù)為1、校驗塊個數(shù)為2 時,服務(wù)器個數(shù)為4、單服務(wù)器磁盤個數(shù)為4、校驗塊個數(shù)為4 時的集群吞吐率提升30%。但是,在集群中文件平均大小為20 MB 的情況下,相較于服務(wù)器個數(shù)為4、單服務(wù)器磁盤個數(shù)為1、校驗塊個數(shù)為2 時,服務(wù)器個數(shù)為4、單服務(wù)器磁盤個數(shù)為4、校驗塊個數(shù)為4 時的集群吞吐率下降20%。此外,在不同糾刪碼算法下,單文件被切分成不同大小的數(shù)據(jù)塊和校驗塊,平均存儲在磁盤中。例如,當服務(wù)器個數(shù)為4、單服務(wù)器磁盤個數(shù)為4、校驗塊個數(shù)為4 時,文件被切割成1.2MB 的數(shù)據(jù)塊和校驗塊;而當服務(wù)器個數(shù)為4,單服務(wù)器磁盤個數(shù)為1,校驗塊個數(shù)為2 時,文件被切割成8.1 MB 的數(shù)據(jù)塊和校驗塊。這證明存儲的數(shù)據(jù)塊和校驗塊的大小和數(shù)量會進一步影響集群的整體吞吐率。因此,針對不同存儲集群,需要采用合適的糾刪碼算法,確定最佳的存儲拓撲結(jié)構(gòu)。
3.4 基于統(tǒng)一入口的一站式文件調(diào)用共享
針對超大文件調(diào)用共享缺乏有效數(shù)字化管理手段的問題,本文建立一套覆蓋文件查詢、文件共享、訪問鑒權(quán)、文件下載以及服務(wù)接口的統(tǒng)一平臺,用戶可以通過統(tǒng)一入口實現(xiàn)超大文件調(diào)用共享的一站式服務(wù)。
3.4.1 文件查詢
將超大文件資源按照資源目錄的形式進行編目,配置其資源基本信息和數(shù)據(jù)項信息。用戶可以根據(jù)資源目錄、資源名稱、發(fā)布狀態(tài)、資源類型等進行分頁查詢,以列表的方式展示。列表中簡要展示編制資源的名稱、目錄位置、提供方、發(fā)布狀態(tài)和編制人等信息。編制資源的詳細信息在資源詳情中查看,列表提供資源詳情的查看入口。
3.4.2 文件共享
對于需要的文件資源,用戶可以申請文件下載服務(wù),管理員或者資源提供方可以查看申請方申請的服務(wù)情況,并進行審批。文件下載服務(wù)申請通過后,可以在線預(yù)覽文件列表。
3.4.3 訪問鑒權(quán)
根據(jù)文件內(nèi)容與業(yè)務(wù)規(guī)則分類,通過描述文件的多維度特征和內(nèi)容敏感程度,制定文件資源的開放和共享策略,并且只有擁有相關(guān)權(quán)限的用戶才能訪問該文件。
3.4.4 文件下載
基于平臺提供的文件壓縮、加密、分片寫入技術(shù)對文件進行處理,再提供下載接口,用戶可以通過接口同時讀取多個分片文件,完成文件的下載。
3.4.5 服務(wù)接口
文件資源以數(shù)據(jù)接口的方式對外提供服務(wù),可以與其他業(yè)務(wù)軟件進行接口集成,提供超大文件調(diào)用共享的能力輸出,使系統(tǒng)具有文件發(fā)布、下架、測試、檢索等管理功能。
4 結(jié)語
本文針對超大文件在處理存儲中的若干問題,基于云原生架構(gòu)設(shè)計整體平臺,研究了超大文件的高效切片合并,提出了多種優(yōu)化方案;研究了基于多哈希采樣消息摘要算法的文件一致性校驗,提升了文件校驗的效率;研究了基于糾刪碼技術(shù)的文件存儲,大幅提升了磁盤空間利用率,并提出了針對不同存儲集群的最優(yōu)糾刪碼算法;最后設(shè)計了一站式文件調(diào)用共享平臺的主要功能。該研究成果對于數(shù)字化建設(shè)中的軟件開發(fā)工作具有較好的參考價值。