APP下载

一种基于高性能对象存储框架的文件存储服务和视频点播服务

2023-10-23高瑜雄周子涵叶婉茹

机电产品开发与创新 2023年5期
关键词:代理服务器静态容器

姜 亮, 高瑜雄, 周子涵, 叶婉茹

(中国机械总院集团 云南分院有限公司信息技术所, 云南 昆明 650000)

0 引言

随着科技的进步工业互联网平台建立异构的IT 软硬件资源池,提供高效的资源调度和管理服务。为加快企业数字化进程,并加快转型,工业生产管理系统的建立和使用越来越重要,数字视频、音频、文档文件以其直观性、易于存储、检索和共享,是企业可视信息管理系统的重要组成部分。管理制造企业的海量数据,解决企业文件散落在各部门、员工电脑、业务系统的问题。 制造业企业下设多个部门,涉及多个产品,该框架能以部门、产品为维度灵活建库,分类存储相关文件。 并和主流业务系统对接,各系统通过该框架存储、调用文件,提供文件中台服务。支持实时同步, 智能文件去重, 文件上传增量同步等技术。 简化文件上传,节省流量和存储空间,避免重复文件占用空间、耗费上传流量。

1 系统概述

1.1 关键技术介绍

1.1.1 Docker 容器技术

Docker 是基于Linux 内核实现的,Docker 最早采用了LXC 技术,LXC 是Linux 原生支持的容器技术, 可以提供轻量级的虚拟化.Docker 基于LXC 发展, 提供了LXC 的高级封装,标准的配置方法,在LXC 的基础上,Docker 提供了一系列更强大的功能。

Docker 相比虚拟机的交付速度更快,资源消耗更低,Docker 采用客户端/服务器端架构, 使用远程API 来管理和创建容器,其可以轻松的创建一个轻量级的,可移植的,自给自足的容器.Docker 的三大理念就是build,ship,run.Docker 通过namespace 和cgroup 来提供容器的资源隔离与安全保障等,所以Docker 容器在运行时,不需要类似虚拟机的额外资源开销,因此可以大幅度提供资源利用率。

1.1.2 MinIO(对象存储服务)

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。 此外,其存储后端除使用磁盘外,还可通过网关对接其他存储系统与资源。

1.1.3 Nginx

Nginx(发音同engine x)是一款轻量级的Web 服务器/ 反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris, 以及Microsoft Windows 等操作系统中运行。反向代理(Reverse Proxy)方式是指以代理服务器来接受internet 上的连接请求,然后将请求转发给内部网络上的服务器, 并将从服务器上得到的结果返回给internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 由于我们这里是用Docker 启动的Nginx,所以我们只需要关注Nginx 内部配置文件即可。

1.1.4 nginx-vod-module 点播模块

nginx-vod-module 模块是基于nginx 来提供VOD(video on demand)服务的第三方模块,它支持基于DASH、HDS、HLS、MSS 的点播服务搭建。 点播(VOD,video on demand)即根据用户需求播放,音视频内容一般已经存放在服务器上了,不同于先下载再播放,点播要求即点即播。

(1)映射响应格式。 当配置为在映射模式下运行时,nginx-vod-module 向配置的上游服务器发出HTTP 请求,以便接收它应该生成的媒体流的布局。 响应必须采用JSON 格式。

(2)文件名。 basename+扩展名-选项集是打包者特定的(下面的列表适用于默认设置):seqparams-可用于通过id(在映射JSON 中提供)来选择特定序列,例如mastersseq1.m3u8。fileparams-可用于在使用多个URL 时按索引选择特定序列。 例如,manifest-f1.mpd 将仅从第一个URL返回一个MPD。 trackparams-可用于选择特定的音频/视频轨道。 例如,manifest-a1.f4m 将返回仅包含每个序列的第一个音频流的F4M。 默认是包含每个文件的第一个音频和第一个视频轨道。在文件名中选择的曲目与使用/tracks/path 参数选择的曲目进行AND 运算。v0 / a0 分别选择所有视频/音频轨道。

大学生498人,其中女生342人,男生149人,7人未报告性别;平均年龄19.72岁(标准差为1.78)。

(3)HLS 流媒体协议。 HLS(HTTP Live Streaming)自适应码率流媒体传输协议,来自Apple 公司,该协议基于Http 协议,HLS 诞生之初旨在能够从iPhone 中删除flash,如今已成为使用最广泛的协议。 HLS 的优缺点也比较明显。Html5 能够直接支持HLS,有浏览器就能播放,不需要安装额外的app, 不用考虑防火墙或者代理问题;HLS 也支持最新的H.265 编解码器,H.265 编码的质量要比H.264 高很多。 因为HLS 基本是采用了点播切片的方式实现的直播, 在直播上相对于其它协议有较高的延迟(5~8s 延迟)。

1.1.5 minio-client 客户端

是minio 服务器的客户端, 对ls,cat,cp,mirror,diff,find 等UNIX 命令提供了一种替代方案,它支持文件系统和兼容Amazon S3 的云存储服务 (AWS Signature v2 和v4)。 并将minio-client 中的视频目录映射到点播服务的视频目录下面,将其他文件目录映射到nginx 静态文件访问目录下。

2 系统总体设计

2.1 系统架构设计

整体架构图如图1 所示。 整体平台采用服务端上传(提供多语言minio SDK),点播服务支持hls、 thumb、dash等主流的流格式, 支持终端播放器根据网络情况自动切换到最合适播放的分辨率。 自适应码流也是承载媒体加密、DRM、字幕、广告等前沿功能的主流格式。 图片文件、pdf 文件则采用静态资源访问方式。整个平台具体容器列表如图2 所示。

图1 整体架构图

图2 容器列表

2.2 文件存储服务功能实现

文件存储服务的核心为Minio 对象存储系统, 其具有文件上传、下载、查询和删除等功能支撑,采用去中心化无共享架构进行分布式部署。 整个服务采用读写分离模式,文件上传和删除通过Minio java SDK 访问Minio 对象存储系统进行文件的上传和删除。 下载文件则通过nginx 的静态文件访问方式, 中间通过minio-client 进行文件实时同步。

2.3 视频文件点播服务模块实现

nginx-vod-moduled 点播服务模块具体实现步骤为:

(1)将minio 存储服务添加到minio-client 的配置中。

(2)将minio 存储的视频文件同步到minio-client 的视频目录下供点播服务使用。

(3) 修改nginx-vod-moduled 中nginx.conf 的server加入以下hls、thumb、dash 的播放流配置。

(4)nginx 配置,创建一个video.xxx.xn.conf 配置文件,该文件用于编写实现文件访问功能server 模块代码,映射至nginx-vod-moduled 容器访问点播服务。

2.4 静态文件nginx 服务器文件访问实现

Nginx 文件访问模块具体实现步骤为:

(1)将minio 存储的图片文件同步到minio-client 的图片目录下供nginx 静态文件访问使用。

(2)将minio 存储的pdf 文件同步到minio-client 的pdf目录下供nginx 静态文件访问使用。

(3) nginx 配置。 创建一个file.xxx.xn.conf 配置文件,该文件用于编写实现文件访问功能server 模块代码。 映射至/file/data 目录进行静态资源的访问。

3 文件存储服务和点播服务的应用

3.1 后端文件操作

在Maven 项目中引入minio SDK 包。

采集服务接收到一个文件的完整数据后,调用Minio sdk 将文件保存至Minio 系统。

核心连接Minio 代码如下:

核心上传文件代码如下:

3.2 前端文件访问

前端是不能直接访问服务器上面的文件的, 但是由于我们对文件目录配置了Nginx 转发, 这样就可以通过浏览器直接访问了。

对于点播服务的使用, 由于我们搭建的点播服务支持HLS 协议,Html5 能够直接支持HLS,有浏览器就能播放。 所以我们可以直接使用Html5 的播放器直接播放点播地址。

4 结束语

该基于MinIO 高性能对象存储框架的视频点播服务、文件服务,并使用容器化部署。 解决了企业生产管理系统海量图片、文档文件、视频大量存储导致的系统扩展差、资源利用率低的问题,MinIO 本身较为轻量,以及服务容器化能进一步降低运维维护成本。 同时也为企业生产管理系统中海量数据管理提供了一定的参考价值。 在网络上传输音、视频等多媒体信息,主要有下载和流式传输两种方案。下载的方式对于体积较大的音、视频数据而言,在使用前下载整个媒体文件耗时很大;流媒体(streaming media) 传输提供了一种低延时的方式来避免这个问题,流媒体技术是指将多媒体数据压缩后,经过网络分段发送,在网上即时传输音、视频数据供用户播放的一种技术。点播(VOD,video on demand)即根据用户需求播放,音视频内容一般已经存放在服务器上了, 不同于先下载再播放,点播要求即点即播,各大音视频网站提供的服务就是VOD 服务。

猜你喜欢

代理服务器静态容器
拒绝改动锁定电脑的代理服务器设置
Different Containers不同的容器
最新进展!中老铁路开始静态验收
难以置信的事情
猜猜他是谁
地铁信号系统中代理服务器的设计与实现
IP地址隐藏器
取米
具7μA静态电流的2A、70V SEPIC/升压型DC/DC转换器
50t转炉静态控制模型开发及生产实践