首頁 > 科技

基於 MinIO 物件儲存框架的短視訊點播平臺設計

2021-06-15 04:09:11

作者 | 中國農業銀行 艾明浩 李雲婷

短視訊平臺簡介

以短視訊點播為代表的流媒體技術應用在移動網際網路時代實現了快速擴張。在網際網路內容趨於多元化的今天,短視訊迅速替代了傳統的文字圖片,席捲了人們的視野和生活,成為資訊傳播的重要渠道。視訊點播一般包含視訊上傳、儲存、處理、播放等流程及相應的流程管理與稽核。因此,如何安全可靠地儲存PB級海量資料,並實現視訊資料的快速存取;如何支援多種場景下的視訊上傳;如何保障穩定流暢的拉流播放;以及如何滿足視訊轉碼、水印等基本處理需求都成為構建一個視訊點播平臺需要考慮和解決的技術難題。

近期筆者所在團隊為擴展短視訊業務,需快速搭建一套支援海量短視訊上傳、儲存、點播等功能的視訊點播平臺,因此圍繞相關儲存框架進行了調研。

常見的儲存邏輯與框架

當前儲存從邏輯上一般可分為三類,即塊儲存、檔案儲存和物件儲存。塊儲存一般指常見的卷或硬碟儲存,以及相應的磁碟陣列、NAS、SAN等儲存方式,操作物件是磁碟,使用邏輯塊編號定址,資料按位元組方式訪問,讀寫速度快。檔案儲存則將資料以不同應用程式要求的結構方式組成不同類型的檔案,可對檔案進行創建、查詢、修改、刪除等操作,易於實現資料共享。物件儲存將檔案以物件的方式進行儲存(一個物件包含屬性以及內容),通常實現方式為多臺分散式伺服器內建大容量硬碟,通過物件儲存軟體組建叢集,對外提供讀寫訪問功能。

筆者選取了業內較為主流的開源儲存框架MinIO、Ceph、SeaweedFS,從開源協議、擴展性、成本等多方面進行對比如下表:

由於物件儲存結合了塊儲存讀寫效率快、儲存空間可擴展以及檔案儲存方便共享的優點,同時結合短視訊平臺數據儲存與視訊點播需求,筆者團隊選取物件儲存框架作為短視訊點播平臺的儲存邏輯。進一步考慮到短視訊點播平臺數據規模、儲存動態不宕機擴容、線上HTTP多媒體播放以及學習運維成本等需求,通過以上對比,筆者團隊最終選用MinIO開源框架作為短視訊儲存與點播基礎框架。

MinIO物件儲存框架

物件儲存的出現是為解決了儲存海量大資料的問題,如儲存海量的視訊、圖片,並進行資料歸檔、資料備份、大資料分析等操作。物件儲存一般採用key-object的扁平化儲存架構,使用方便,呼叫API就可進行資料的多樣化讀寫。其大容量、動態擴展、資料災備等效能,是傳統檔案儲存和NAS無法比擬的。

MinIO是一套基於Apache License V2.0協議的輕量級、高效能開源物件儲存框架,適用於圖片、視訊、映象等海量非結構化資料儲存。MinIO採用Golang實現,客戶端支援Java、Python、JavaScript、Golang語言,相容亞馬遜S3雲端儲存服務介面,方便與其他應用結合。

1)儲存機制。MinIO使用糾刪碼(erasure code)和校驗和(checksum)來保護資料免受硬體故障和無聲資料損壞,可保證N/2節點損壞的情況下資料的正常訪問。

2)擴展性。極簡性和擴展性是MinIO叢集的兩個重要設計理念。MinIO支援對等擴容和聯邦擴容兩種擴容方式。對等擴容,即通過增加對等的叢集節點和磁碟以擴充叢集,例如,原叢集包含4個節點4塊磁碟,則擴容時可同樣增加4個節點4個磁碟(或其倍數),以此保證系統可維持相同的資料冗餘SLA,降低擴展的複雜性。聯邦擴容,其基本原理是引入etcd作為統一名稱空間,將多個MinIO叢集組成一個聯邦,可在原有聯邦的基礎上,向聯邦中增加新叢集,此擴容方式理論可實現無限擴展,且可以實現在原聯邦服務不中斷的情況下擴容。

3)對外服務。MinIO完全相容S3標準介面,客戶端和服務端之間通過http/https進行通訊。MinIO提供客戶端mc(MinIO Client)以支援UNIX命令,同時支援多語言的客戶端SDK。此外,其儲存後端除使用磁碟外,還可通過閘道器對接其他儲存系統與資源。具體如下表所示。

4)多媒體拉流支援。MinIO對於多媒體檔案,支援HTTP-Range的方式線上拉流播放與音視訊進度條拖拽。如下圖,使用瀏覽器以流的形式訪問儲存於MinIO的多媒體檔案時,每拖動一次進度條,則會向MinIO服務端傳送一條Http-Request請求,請求Headers中包含Range欄位,其內容是當前請求視訊進度的開始位元組數及快取結束位元組數。這種形式使MinIO天生支援多媒體檔案的拉流播放與進度拖拽。

圖1 MinIO多媒體線上播放支援

MinIO實現短視訊物件儲存與點播

出於叢集儲存可動態擴展性、支援HTTP流式播放、運營成本等因素,筆者團隊使用MinIO物件儲存作為底層儲存,開發部署短視訊點播地址對映、地址動態代理等服務,實現一套短視訊儲存點播平臺。其實現框架如下圖:

圖2 基於MinIO的短視訊點播平臺架構

點播平臺大致可分為儲存層、服務層與應用層。儲存層主要部署MinIO物件儲存系統及關係資料庫,MinIO用來儲存視訊物件,關係資料庫用來儲存視訊元資料;服務層提供各類儲存訪問服務介面,如檔案上傳下載、視訊播放地址生成、物件地址對映等;應用層為前端提供應用功能,包括視訊上傳、查詢、播放等功能。

基於MinIO物件儲存的點播平臺數據訪問流程如下圖所示:

圖3 基於MinIO的短視訊點播平臺數據訪問流程圖

1)視訊上傳與轉碼,統一採用mp4格式作為視訊儲存和點播格式,為了相容多種格式視訊檔案上傳,需開發轉碼模組將其轉碼成mp4格式進行儲存,將其首先存入本地磁碟快取。

2)直播錄製,在直播的過程中開啟錄製,將錄製的檔案首先存入本地磁碟快取。

3)上傳檔案,視訊轉碼完成或錄製完成後,呼叫MinIO檔案上傳介面,將視訊檔案上傳至MinIO叢集/聯邦,由etcd對MinIO叢集提供註冊發現服務。

4)點播地址對映,服務端部署點播地址對映服務模組,實現MinIO視訊點播地址與視訊ID的對映,使儲存介質的改變不影響視訊點播拉流。

5)地址動態代理服務,出於系統安全性考慮,我們不希望暴露MinIO儲存地址與儲存細節,希望增加一層閘道器進行媒體流的轉發或地址的代理,對外提供統一的服務地址,使用地址動態代理,可以根據點播請求的視訊ID不同,動態代理至不同的視訊播放地址,實現視訊儲存細節與服務地址的解耦。

6)拉流播放,客戶端或瀏覽器使用HTTP協議流式拉取視訊檔案並播放。

總結

本文圍繞常見儲存邏輯及開源框架進行調研,結合短視訊點播平臺具體需求,選用MinIO開源儲存框架,快速設計並搭建出一套支援海量短視訊上傳、儲存、點播等功能的視訊點播平臺,為當下不斷湧現的短視訊點播平臺及相關應用提供了一定技術選型與設計參考。


IT145.com E-mail:sddin#qq.com