姜 亮, 高瑜雄, 周子涵, 葉婉茹
(中國機械總院集團 云南分院有限公司信息技術所, 云南 昆明 650000)
隨著科技的進步工業(yè)互聯(lián)網(wǎng)平臺建立異構的IT 軟硬件資源池,提供高效的資源調度和管理服務。為加快企業(yè)數(shù)字化進程,并加快轉型,工業(yè)生產(chǎn)管理系統(tǒng)的建立和使用越來越重要,數(shù)字視頻、音頻、文檔文件以其直觀性、易于存儲、檢索和共享,是企業(yè)可視信息管理系統(tǒng)的重要組成部分。管理制造企業(yè)的海量數(shù)據(jù),解決企業(yè)文件散落在各部門、員工電腦、業(yè)務系統(tǒng)的問題。 制造業(yè)企業(yè)下設多個部門,涉及多個產(chǎn)品,該框架能以部門、產(chǎn)品為維度靈活建庫,分類存儲相關文件。 并和主流業(yè)務系統(tǒng)對接,各系統(tǒng)通過該框架存儲、調用文件,提供文件中臺服務。支持實時同步, 智能文件去重, 文件上傳增量同步等技術。 簡化文件上傳,節(jié)省流量和存儲空間,避免重復文件占用空間、耗費上傳流量。
1.1.1 Docker 容器技術
Docker 是基于Linux 內(nèi)核實現(xiàn)的,Docker 最早采用了LXC 技術,LXC 是Linux 原生支持的容器技術, 可以提供輕量級的虛擬化.Docker 基于LXC 發(fā)展, 提供了LXC 的高級封裝,標準的配置方法,在LXC 的基礎上,Docker 提供了一系列更強大的功能。
Docker 相比虛擬機的交付速度更快,資源消耗更低,Docker 采用客戶端/服務器端架構, 使用遠程API 來管理和創(chuàng)建容器,其可以輕松的創(chuàng)建一個輕量級的,可移植的,自給自足的容器.Docker 的三大理念就是build,ship,run.Docker 通過namespace 和cgroup 來提供容器的資源隔離與安全保障等,所以Docker 容器在運行時,不需要類似虛擬機的額外資源開銷,因此可以大幅度提供資源利用率。
1.1.2 MinIO(對象存儲服務)
MinIO 是一套基于Apache License V2.0 協(xié)議的輕量級、高性能開源對象存儲框架,適用于圖片、視頻、鏡像等海量非結構化數(shù)據(jù)存儲。MinIO 采用Golang 實現(xiàn),客戶端支持Java、Python、JavaScript、Golang 語言,兼容亞馬遜S3云存儲服務接口,方便與其他應用結合。
(1)存儲機制。 MinIO 使用糾刪碼(erasure code)和校驗和(checksum)來保護數(shù)據(jù)免受硬件故障和無聲數(shù)據(jù)損壞,可保證N/2 節(jié)點損壞的情況下數(shù)據(jù)的正常訪問。
(2)擴展性。極簡性和擴展性是MinIO 集群的兩個重要設計理念。 MinIO 支持對等擴容和聯(lián)邦擴容兩種擴容方式。對等擴容,即通過增加對等的集群節(jié)點和磁盤以擴充集群,例如,原集群包含4 個節(jié)點4 塊磁盤,則擴容時可同樣增加4 個節(jié)點4 個磁盤(或其倍數(shù)),以此保證系統(tǒng)可維持相同的數(shù)據(jù)冗余SLA,降低擴展的復雜性。 聯(lián)邦擴容,其基本原理是引入etcd 作為統(tǒng)一命名空間,將多個MinIO 集群組成一個聯(lián)邦,可在原有聯(lián)邦的基礎上,向聯(lián)邦中增加新集群,此擴容方式理論可實現(xiàn)無限擴展,且可以實現(xiàn)在原聯(lián)邦服務不中斷的情況下擴容。
(3)對外服務。 MinIO 完全兼容S3 標準接口,客戶端和服務端之間通過http/https 進行通信。 MinIO 提供客戶端mc(MinIO Client)以支持UNIX 命令,同時支持多語言的客戶端SDK。 此外,其存儲后端除使用磁盤外,還可通過網(wǎng)關對接其他存儲系統(tǒng)與資源。
1.1.3 Nginx
Nginx(發(fā)音同engine x)是一款輕量級的Web 服務器/ 反向代理服務器及電子郵件(IMAP/POP3)代理服務器,并在一個BSD-like 協(xié)議下發(fā)行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris, 以及Microsoft Windows 等操作系統(tǒng)中運行。反向代理(Reverse Proxy)方式是指以代理服務器來接受internet 上的連接請求,然后將請求轉發(fā)給內(nèi)部網(wǎng)絡上的服務器, 并將從服務器上得到的結果返回給internet 上請求連接的客戶端,此時代理服務器對外就表現(xiàn)為一個反向代理服務器。 由于我們這里是用Docker 啟動的Nginx,所以我們只需要關注Nginx 內(nèi)部配置文件即可。
1.1.4 nginx-vod-module 點播模塊
nginx-vod-module 模塊是基于nginx 來提供VOD(video on demand)服務的第三方模塊,它支持基于DASH、HDS、HLS、MSS 的點播服務搭建。 點播(VOD,video on demand)即根據(jù)用戶需求播放,音視頻內(nèi)容一般已經(jīng)存放在服務器上了,不同于先下載再播放,點播要求即點即播。
(1)映射響應格式。 當配置為在映射模式下運行時,nginx-vod-module 向配置的上游服務器發(fā)出HTTP 請求,以便接收它應該生成的媒體流的布局。 響應必須采用JSON 格式。
(2)文件名。 basename+擴展名-選項集是打包者特定的(下面的列表適用于默認設置):seqparams-可用于通過id(在映射JSON 中提供)來選擇特定序列,例如mastersseq1.m3u8。fileparams-可用于在使用多個URL 時按索引選擇特定序列。 例如,manifest-f1.mpd 將僅從第一個URL返回一個MPD。 trackparams-可用于選擇特定的音頻/視頻軌道。 例如,manifest-a1.f4m 將返回僅包含每個序列的第一個音頻流的F4M。 默認是包含每個文件的第一個音頻和第一個視頻軌道。在文件名中選擇的曲目與使用/tracks/path 參數(shù)選擇的曲目進行AND 運算。v0 / a0 分別選擇所有視頻/音頻軌道。
大學生498人,其中女生342人,男生149人,7人未報告性別;平均年齡19.72歲(標準差為1.78)。
(3)HLS 流媒體協(xié)議。 HLS(HTTP Live Streaming)自適應碼率流媒體傳輸協(xié)議,來自Apple 公司,該協(xié)議基于Http 協(xié)議,HLS 誕生之初旨在能夠從iPhone 中刪除flash,如今已成為使用最廣泛的協(xié)議。 HLS 的優(yōu)缺點也比較明顯。Html5 能夠直接支持HLS,有瀏覽器就能播放,不需要安裝額外的app, 不用考慮防火墻或者代理問題;HLS 也支持最新的H.265 編解碼器,H.265 編碼的質量要比H.264 高很多。 因為HLS 基本是采用了點播切片的方式實現(xiàn)的直播, 在直播上相對于其它協(xié)議有較高的延遲(5~8s 延遲)。
1.1.5 minio-client 客戶端
是minio 服務器的客戶端, 對ls,cat,cp,mirror,diff,find 等UNIX 命令提供了一種替代方案,它支持文件系統(tǒng)和兼容Amazon S3 的云存儲服務 (AWS Signature v2 和v4)。 并將minio-client 中的視頻目錄映射到點播服務的視頻目錄下面,將其他文件目錄映射到nginx 靜態(tài)文件訪問目錄下。
整體架構圖如圖1 所示。 整體平臺采用服務端上傳(提供多語言minio SDK),點播服務支持hls、 thumb、dash等主流的流格式, 支持終端播放器根據(jù)網(wǎng)絡情況自動切換到最合適播放的分辨率。 自適應碼流也是承載媒體加密、DRM、字幕、廣告等前沿功能的主流格式。 圖片文件、pdf 文件則采用靜態(tài)資源訪問方式。整個平臺具體容器列表如圖2 所示。
圖1 整體架構圖
圖2 容器列表
文件存儲服務的核心為Minio 對象存儲系統(tǒng), 其具有文件上傳、下載、查詢和刪除等功能支撐,采用去中心化無共享架構進行分布式部署。 整個服務采用讀寫分離模式,文件上傳和刪除通過Minio java SDK 訪問Minio 對象存儲系統(tǒng)進行文件的上傳和刪除。 下載文件則通過nginx 的靜態(tài)文件訪問方式, 中間通過minio-client 進行文件實時同步。
nginx-vod-moduled 點播服務模塊具體實現(xiàn)步驟為:
(1)將minio 存儲服務添加到minio-client 的配置中。
(2)將minio 存儲的視頻文件同步到minio-client 的視頻目錄下供點播服務使用。
(3) 修改nginx-vod-moduled 中nginx.conf 的server加入以下hls、thumb、dash 的播放流配置。
(4)nginx 配置,創(chuàng)建一個video.xxx.xn.conf 配置文件,該文件用于編寫實現(xiàn)文件訪問功能server 模塊代碼,映射至nginx-vod-moduled 容器訪問點播服務。
Nginx 文件訪問模塊具體實現(xiàn)步驟為:
(1)將minio 存儲的圖片文件同步到minio-client 的圖片目錄下供nginx 靜態(tài)文件訪問使用。
(2)將minio 存儲的pdf 文件同步到minio-client 的pdf目錄下供nginx 靜態(tài)文件訪問使用。
(3) nginx 配置。 創(chuàng)建一個file.xxx.xn.conf 配置文件,該文件用于編寫實現(xiàn)文件訪問功能server 模塊代碼。 映射至/file/data 目錄進行靜態(tài)資源的訪問。
在Maven 項目中引入minio SDK 包。
采集服務接收到一個文件的完整數(shù)據(jù)后,調用Minio sdk 將文件保存至Minio 系統(tǒng)。
核心連接Minio 代碼如下:
核心上傳文件代碼如下:
前端是不能直接訪問服務器上面的文件的, 但是由于我們對文件目錄配置了Nginx 轉發(fā), 這樣就可以通過瀏覽器直接訪問了。
對于點播服務的使用, 由于我們搭建的點播服務支持HLS 協(xié)議,Html5 能夠直接支持HLS,有瀏覽器就能播放。 所以我們可以直接使用Html5 的播放器直接播放點播地址。
該基于MinIO 高性能對象存儲框架的視頻點播服務、文件服務,并使用容器化部署。 解決了企業(yè)生產(chǎn)管理系統(tǒng)海量圖片、文檔文件、視頻大量存儲導致的系統(tǒng)擴展差、資源利用率低的問題,MinIO 本身較為輕量,以及服務容器化能進一步降低運維維護成本。 同時也為企業(yè)生產(chǎn)管理系統(tǒng)中海量數(shù)據(jù)管理提供了一定的參考價值。 在網(wǎng)絡上傳輸音、視頻等多媒體信息,主要有下載和流式傳輸兩種方案。下載的方式對于體積較大的音、視頻數(shù)據(jù)而言,在使用前下載整個媒體文件耗時很大;流媒體(streaming media) 傳輸提供了一種低延時的方式來避免這個問題,流媒體技術是指將多媒體數(shù)據(jù)壓縮后,經(jīng)過網(wǎng)絡分段發(fā)送,在網(wǎng)上即時傳輸音、視頻數(shù)據(jù)供用戶播放的一種技術。點播(VOD,video on demand)即根據(jù)用戶需求播放,音視頻內(nèi)容一般已經(jīng)存放在服務器上了, 不同于先下載再播放,點播要求即點即播,各大音視頻網(wǎng)站提供的服務就是VOD 服務。