



摘要:【目的】融媒體的飛速發展,極大地推動了多媒體內容的創作和分享,同時隨著4K、5G和AI技術的成熟發展,新華社用戶上傳和入庫的稿件中照片、音樂、視頻等文件與日俱增,加劇了數據量的爆發,不斷占用著存儲資源。【方法】針對這類非結構化數據的存儲和管理,傳統的塊存儲(SAN)和文件存儲(NAS)由于其本身技術和架構的限制略顯捉襟見肘,對象存儲應運而生。基于此,文章主要介紹了數據存儲的發展過程,以及分布式對象存儲的特點及優勢,結合新華社采編融媒體平臺業務探索應用可行性。【結果】【結論】通過搭建MinIO對象存儲環境,并改造采編融媒平臺文件服務接口,可實現對象存儲的平滑切換,驗證對象存儲在采編融媒平臺應用的可行性。
關鍵詞:分布式;對象存儲;融媒體;MinIO;采編 " " " " " " "中圖分類號:TP311 " " " " " " " "文獻標識碼:A
文章編號:1671-0134(2023)06-104-05 " " " " DOI:10.19483/j.cnki.11-4653/n.2023.06.022
本文著錄格式:高文,任柏青,魏海濤,周晨賡.分布式對象存儲在采編融媒體平臺的探索和應用[J].中國傳媒科技,2023(06):104-107,158.
導語
近年來,進入數字經濟時代,隨著海量應用的興起,數據呈現爆炸式增長,數據類型也更加多樣復雜。據國際數據公司(IDC)預測,全球數據量預計2025年將達到175ZB。此外,數據的類型也在發生變化,隨著技術的各種深入應用,視頻、音頻、影像等各種非結構化數據的增長更為迅速。
在媒體深度融合的背景下,傳統媒體遇到諸多挑戰,傳統媒體也在新技術的驅動下迎來了升級。作為輿論引導主力軍、主陣地、主渠道,新華社在媒體融合發展取得重大進步和顯著成效,推出一系列融媒體報道產品。根據新華社每日電訊報道,2021年全國兩會期間新華社國內部“主力軍全面挺進主戰場”,全鏈條策劃、全媒化采集,同時創新思維發揮長項,拼創意、搶陣地,國內部融媒產品產量“逆轉”傳統通稿,“破圈突圍”,新媒體和通稿發稿比例由2020年的1 : 1變成了超過2 : 1。[1-2]
在傳統媒體到新媒體的轉型過程中,文件大、數量多的非結構化媒體數據存儲是一個嚴峻考驗。對媒體來說,數據和內容始終是核心,在新聞素材的采集、編輯、加工、管理、分發,到最終三審一校的成稿等諸多環節中,需要考慮到如何在多用戶、多系統間共享,如何支持多業務流程,最終滿足融媒體產品制作、流轉、審核、備份歸檔、數據分析、AI等多方面的需求。
面對著數據爆炸式增長和非結構化數據占比顯著增加這兩大趨勢,傳統的存儲系統,諸如DAS、SAN和NAS等集中式存儲,在容量和性能等方面因為本身技術和架構的限制,無法進行有效應對。人們需要一種全新架構的存儲系統,這種存儲系統需具備極高的可擴展性,能夠滿足人們對存儲容量TB到EB規模的擴展的需求。于是,對象存儲應運而生。
1.數據存儲發展
隨著信息技術和互聯網的發展,存儲系統也在不斷進化,系統功能越來越豐富,存儲容量不斷提升,性能也越來越強。通俗地講,按照存儲功能和使用方式的不同,可以分為以下3種類型。
1.1 " 塊存儲
塊存儲,通過控制器將多塊磁盤重新組成一個或者多個邏輯磁盤,作為塊存儲設備提供給主機使用,在主機上顯示的就是一塊或多塊硬盤,通常需要主機操作系統對硬盤進行分區和格式化文件系統后才能使用。主機通過數據線直連的塊存儲,稱為DAS存儲(Direct-Attached Storage,直連式存儲),通過光纖通道網絡或者IP網絡訪問的塊存儲,稱為SAN存儲(Storage Area Network,存儲區域網絡)。塊存儲的擴展性和靈活性較差。
1.2 " 文件存儲
文件存儲,是指在塊存儲的基礎上增加了文件系統,通過網絡遠程的方式將文件系統掛載到主機使用,在主機上顯示的就是一個文件系統分區,可以直接使用。應用程序無需關心不同文件存儲的差別,和訪問本地文件系統一樣,通過調用操作系統POSIX標準文件系統接口來操作文件存儲中的目錄和文件。眾所周知,文件系統中有目錄和文件,采用層級樹形結構進行文件管理,便于文件查找。用戶可以通過操作系統中的應用程序對文件進行打開、修改等操作,如打開Word、編輯Word。文件存儲具有豐富多樣的功能,很適合用來存儲文檔、圖片、視頻等各種非結構化文件。
1.3 " 對象存儲
對象存儲,最初是公有云廠商提供的云存儲產品,通過Web接口提供Key-Value形式的分布式對象存儲服務。可以把任何數據轉換成字節流賦值給Value,并提供一個字符串類型的Key,一起提交給對象存儲保存。在讀取時,只需要提供Key,就可以讀取對應的Value。它更像一個Web應用,而不像傳統存儲。人們經常將其用來存儲圖片、視頻等文件,用于解決海量的互聯網文件存儲和用戶訪問。通常,使用時會模仿本地文件系統的使用習慣,將文件路徑(含目錄路徑)字符串作為Key,將文件數據轉換為字節流之后作為Value,一起提交給對象存儲保存,間接實現存儲文件的目的。更特別的是,可以按照對象存儲的規則,將Key放到一個特定URL網址里,在瀏覽器里輸入后就可以直接訪問,這對圖片或者視頻而言,是非常便利的。因此,對象存儲最主流的使用場景,就是存儲網站、移動App等互聯網/移動互聯網應用的靜態內容(視頻、圖片、文件、軟件安裝包等)。
相較于傳統存儲,對象存儲具備很多新的特性,筆者認為以下幾種較為突破:
(1)版本控制功能。對象的每一次更改,都會生成一個新版本,用戶可以獲取任意一個歷史版本,同時提供對象鎖、WORM(一次寫入多次讀取)等功能。
(2)更細粒度的安全控制和審計。在身份鑒權的基礎上,具備對象級別的訪問控制能力,每一個對象都可以單獨設置用戶權限和讀寫權限。另外,由于訪問接口為REST API,更容易獲取和分析用戶訪問日志。[3]
(3)豐富的存儲桶策略。存儲桶是存放對象的容器,可以針對存儲桶設置一系列策略,作用于所有對象,包括啟用版本控制、啟用保留時間機制、遠程復制等。
2.對象存儲系統方案
2.1 " 采編業務文件存儲特點
采編業務中的文件存儲主要類型是圖片、音頻、視頻、文檔等多媒體文件,文件數量為2500萬個左右,文件大小從幾KB到幾GB不等,實時寫入和讀取。
2.2 " 軟件定義存儲MinIO
鑒于采編業務文件存儲特點,采編融媒體平臺開始探索使用對象存儲對圖片、音頻、視頻、文檔等多媒體文件進行存儲和存取訪問。采編融媒體平臺對象存儲系統采用軟件定義存儲的方式,基于開源分布式對象存儲軟件MinIO,通過在普通PC服務器上運行對象存儲程序,將多臺PC服務器上的硬盤組成一個存儲資源池,對外提供對象存儲服務,來實現對象存儲功能,從而替代昂貴的傳統集中存儲設備。[4]
MinIO是在GNU AGPLv3協議下開源的對象存儲軟件,提供Amazon S3兼容接口,支持所有的S3特性,支持本地部署和容器部署,支持存儲的單個文件大小最大為50TB,支持的集群存儲容量理論上沒有上限。MinIO部署步驟簡單,易上手,核心程序就是一個go編譯的二進制文件,不依賴特定軟件和庫,通過環境變量來配置節點。支持多地復制,也就是不同的集群之間,支持數據自動復制,來實現異地容災備份的目的。按照MinIO官網自己的說法,MinIO是世界上最快的對象存儲,在32個NVMe驅動器節點和100Gbe網絡上發布的GET/PUT結果超過325GB/秒和165GB/秒。[5]
MinIO自帶Web管理界面和命令行工具mc。可以在Web管理界面上對MinIO進行對象管理、存儲桶管理、用戶管理、數據修復、診斷和日志管理。如圖1所示。
2.3 " 系統架構和部署
MinIO提供單節點單硬盤(Single-Node Single-Drive,以下簡稱SNSD)、單節點多硬盤(Single-Node Multi-Drive,以下簡稱SNMD)、多節點多硬盤(Multi-Node Multi-Drive,以下簡稱MNMD)3種部署方式。SNSD模式是單機模式,文件會原封不動存儲在MinIO后端磁盤上,MioIO只能用于S3 API網關,無法使用對象存儲的諸多特性。SNMD和MNMD模式為分布式集群模式,采用糾刪碼方案來實現冗余和高可用,提供對象級別修復,比RAID或者副本方案開銷更少。本文采用MNMD模式。
MNMD模式的MinIO集群層級元素為集群(Cluster)、服務器池(Server Pool)、糾刪集(EC Set)、驅動器(Drive),層級結構如圖2所示。MinIO集群由一個或多個服務器池組成,各服務器池獨立運行,互不影響,可以通過增加服務器池來進行水平擴容。每個服務器池由多臺服務器和磁盤驅動器組成。一個服務器池內,MinIO會基于服務器數量和磁盤驅動器數量,將所有磁盤驅動器自動分組為不同的糾刪集,也就是條帶化。一個糾刪集中磁盤驅動器數量(條帶大小)范圍為2到16,一旦初始化之后便固定不變,并且一個服務器池中的所有糾刪集都有相同的條帶大小。MioIO接收到對象上傳請求后,根據算法選定將對象保存到哪個糾刪集,假設該糾刪集條帶大小為M(包含M個磁盤驅動器),然后實時將對象編碼為M-N個數據塊和N個校驗塊后分別寫入該糾刪集的各個磁盤驅動器中,每一個磁盤驅動器保存一個數據塊或者校驗塊。一般使用EC:N來表示校驗塊數量,可以容忍N個數據塊損壞或丟失,當數據塊丟失或者損壞的情況下,可以通過校驗塊來重組數據塊。特殊的,最大化校驗塊配置情況下,也就是N等于M的一半時,該糾刪集可以容忍一半的磁盤驅動器損壞。每個對象只會保存在一個服務器池,不會跨服務器池存儲。MinIO集群提供各服務器池所有對象的統一視圖,單個服務器池故障,不會影響整個集群,但單個服務器池離線會影響集群對外服務。
除網絡外,MinIO部署設計主要考慮服務器和磁盤數量。由于MinIO的分布式集群模式采用糾刪碼方案存儲對象數據,因此MinIO集群單個服務器池節點數量和磁盤數量需要符合糾刪碼的算法特點,各服務器池節點數量和磁盤數量可以不同。按照MinIO官網推薦的部署拓撲,一個服務器池內,應具有偶數個節點和磁盤驅動器,兩者數量最大公約數應為16,超過8個磁盤驅動器時校驗塊默認為4。本文采用10GbE網絡,8個節點共128個2TB SAS磁盤驅動器,EC:4校驗方案,裸容量為512TB,可用容量為384TB。
3.測試與應用
3.1 " 功能性能測試
使用COSBench測試工具分別對100KB、5MB、100MB大小的文件進行測試,功能正常,性能測試如下:
根據以上測試結果,分布式對象存儲讀性能較好,除100KB小文件外,能夠跑滿1Gb帶寬,寫性能為讀性能的1/5到1/4。
3.2 " 采編融媒體平臺應用
采編業務環境下會產生大量的圖片、音頻、視頻、文檔等多媒體文件,多媒體文件的存儲、訪問及管理是采編業務核心系統的支撐功能。采編業務核心系統中的文件服務是對所有文件資源的管理和存儲的關鍵服務,主要用于統一管理、存儲各子系統產出的文件,便于在各子系統之間流轉,同時解決由于各子系統獨立存儲導致的數據冗余問題。文件服務采用Spring Cloud架構,分為4個獨立子服務,分別為靜態文件代理服務、文件管理服務、圖片處理服務、視頻轉碼服務,每個子服務都涉及對文件及其元數據的讀寫。
為此,在采編業務核心系統的文件服務基礎上,對以上服務中涉及文件讀寫的相關接口進行了改造,由最初通過NAS的存儲路徑方式改造成對象存儲的http接口方式進行訪問,新開發了MinIO文件上傳和文件注冊接口,實現了通過S3協議的對象存儲域名完成文件注冊功能。[6]并模擬獲取文件元數據的流程,包括但不限于圖片文件的EXIF信息、音視頻文件的碼率時長等信息。
(1)整合MinIO添加相關依賴
lt;!-- https://mvnrepository.com/artifact/io.minio/minio --gt; " " " " lt;dependencygt;
lt;groupIdgt;io.miniolt;/groupIdgt;
lt;artifactIdgt;miniolt;/artifactIdgt;
lt;versiongt;8.2.1lt;/versiongt;
lt;/dependencygt;
(2)整合MinIO增加MinIO配置
minio:
endpoint:172.21.244.37
port:9000
accessKey:test
secretKey:DoLTfkduigwklsdfoq836TzcH+Rp4aH5fN1oKuoO6CYT
secure:1
bucketName:test-gw
其中,endpoint是minio api的ip,port是minio api的端口號,accessKey和secretKey是minio的賬號密碼,bucketName表示桶名,可以理解為一個文件夾名稱。
(3)定義MiniO
@Component
@ConfigurationProperties(prefix = “minio”)
public class MinioConfig {
/*** endpoint是一個url、域名、IPv4或者IPv6的地址 */
private String endpoint;
private Integer port;/*** 端口號*/
private String accessKey; //用戶ID,用于唯一標識你的賬戶
private String secretKey;//私鑰
private Boolean secure;//true則是https,1為http,默認值true
private String bucketName;//默認存儲桶
@Bean
public MinioClient minioClient(){
MinioClient minioClient = MinioClien.builder()
.endpoint(endpoint,port,secure)
.credentials(accessKey,secretKey).build();
return minioClient;
}
文件上傳
public void upload(String objectName,InputStream inputStream){
try {
long size = inputStream.available();
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.bucket(minioConfig.getBucketName())
.object(objectName).stream(inputStream,size,-1)
.build();
minioClient.putObject(putObjectArgs);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
} "catch (Exception e) {
e.printStackTrace();
}
}
4.優化實踐
根據采編業務核心系統文件服務架構和對象存儲的特性和應用,本文驗證了對象存儲應用于采編業務的可能性,以及反推采編架構層面的優化改進。
在存儲層面,使用對象存儲替代現有的文件存儲(NAS)試驗是可行的,但對使用對象存儲的其他應用或者服務將會提出新的要求。例如,系統文件服務將由掛載NAS存儲改為使用URL請求訪問對象存儲資源,每次I/O操作將轉變為一次請求,尤其是需要全文件獲取的操作,如計算MD5等。[7]系統文件服務需要著力考慮I/O操作對邏輯流程上帶來的影響,需要根據具體情況優化現有流程,以盡可能減少由于對象存儲的使用帶來的I/O壓力。
同時,也可以考慮在存儲層做一個輕量級的文件元數據管理服務,將文件資源的固有屬性信息,如md5、后綴、類型、圖片EXIF信息、音視頻碼率、文件引用次數等,做對應管理。這將極大地減少文件服務和其他服務或系統的I/O請求。這也對相關系統間數據的存儲定義和規范提出了更高要求。
結語
總而言之,隨著當前移動互聯網、物聯網、人工智能等技術的快速發展,圖片、音視頻等非結構化數據出現爆炸式增長,對技術系統造成很大壓力,同時也帶來了更大的拓展空間。因此,要更好地運用大數據、智能化等技術,借鑒互聯網在運用分布式對象存儲的實踐經驗,充分整合媒體資源,打通互聯互通,提升采編效率,進一步推動媒體深度融合發展。
[1]江南. 融合媒體時代分布式對象存儲系統的應用探索[J]. "中國有線電視,2020(1):37-40.
[2]王若辰.國社“最傳統部門”融媒報道這樣“破圈突圍” [N] .新華每日電訊,2021-03-12(4).
[3]中存儲網.三種存儲類型比較-文件、塊、對象存儲[EB/OL] . https://www.chinastor.com/jishu/SAN/042623L42016.html.2016-07-26/2023-04-16.
[4]中存儲網.什么是對象存儲?OSD架構及原理[EB/OL]. https://www.chinastor.com/jishu/OSD.html,2013-03-21/2023-04-16.
[5]minIO.MinIO Object Storage for Linux [EB/OL].https://min.io/docs/minio/linux/index.html?ref=docs-redirect,2017-02-17/2023-04-16.
[6]minIO.MinIO Java SDK for Amazon S3 Compatible Cloud Storage [EB/OL].https://min.io/docs/minio/linux/developers/java/minio-java.html,2022-03-26/2023-04-16.
[7]張延盛.一種分布式對象存儲在巡檢系統中的研究應用 [J].電信工程技術與標準化,2022(5):7-10,26.
作者簡介:高文(1985-),女,山東,新華社通信技術局高級工程師,研究方向為計算機應用技術;任柏青(1983-),男,北京,新華社通信技術局高級工程師,研究方向為采編融媒系統的建設與開發;魏海濤(1984-),男,河北,新華社通信技術局高級工程師,研究方向為基礎軟件研究;周晨賡(1977-),男,重慶,新華社通信技術局高級工程師,研究方向為在線視頻編輯系統的建設與開發。
(責任編輯:張曉婧)