基于 MinIO 对象存储框架的短视频点播平台设计
Posted CSDN资讯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 MinIO 对象存储框架的短视频点播平台设计相关的知识,希望对你有一定的参考价值。
作者 | 中国农业银行 艾明浩 李云婷
出品 | CSDN(ID:CSDNnews)
短视频平台简介
以短视频点播为代表的流媒体技术应用在移动互联网时代实现了快速扩张。在互联网内容趋于多元化的今天,短视频迅速替代了传统的文字图片,席卷了人们的视野和生活,成为信息传播的重要渠道。视频点播一般包含视频上传、存储、处理、播放等流程及相应的流程管理与审核。因此,如何安全可靠地存储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开源存储框架,快速设计并搭建出一套支持海量短视频上传、存储、点播等功能的视频点播平台,为当下不断涌现的短视频点播平台及相关应用提供了一定技术选型与设计参考。
☞不同芯片的 Mac 电脑,差距会逐渐拉大吗?☞乐视 logo 换新:显示“老板造车美利坚”;雷军给米粉起名小粽子;谷歌浏览器不再隐藏完整 URL|极客头条
☞“搏一搏,单车变摩托!”华为天才少年耗时四个月,将自行车强势升级为自动驾驶
以上是关于基于 MinIO 对象存储框架的短视频点播平台设计的主要内容,如果未能解决你的问题,请参考以下文章