/net-video

基于acl框架的分布式流媒体

Primary LanguageC++

net-video

基于acl框架的分布式流媒体

分布式存储

随着业务持续发展,对应用系统高响应和高可用性要求更高。分布式存储主要为解决单台资源服务器性能有限的问题,其中包括: 容灾系统:相互备份和热交换
存储系统:实际存储文件内容
仲裁系统:由算法确定文件存储位置

分布式流媒体

Keepalived:在多台存储服务器和多台跟踪服务器之间实现热交换
        组:内容对等的存储服务器集合,其文件系统通过GlusterFS实时同步
存储服务器:实际存储流媒体文件的服务器,同组存储服务器互为备份
跟踪服务器集群:由多台跟踪服务器组成的集群,互为热备、负载均衡

项目总体架构

1688825022500(1)

项目概述

分布式流媒体系统是一款可用于互联网环境下的,分布式流媒体管理和播放平台。
提供流媒体文件的上传、下载、存储、删除和在线播放等功能。系统由跟踪服务器、存储服务器、ID服务器、管理客户机、Web服务器、流媒体播放器等组成,支持业务扩展和二次开发。

开发环境

分布式流媒体系统构建于Linux、Windows、C/C++、Qt、Redis、MySQL、ACL和VLC等基础组件之上。

关键技术

基于C++语言的面向对象化系统设计技术,基于C语言Unix/Linux内核编程技术,高效内存管理及对象池化技术,基于TCP/IP协议的网络通信技术, 基于HTTP协议的Web服务器技术,基于Redis的内存数据库技术,基于文件系统和MySQL的数据持久化技术,基于ACL框架的应用服务器技术, 基于VLC框架的流媒体播放技术,基于GlusterFS的文件同步技术,基于高并发、高可用、适度冗余和均衡负载的分布式云存储技术, 基于反向代理的服务注册与服务发现技术,面向互联网应用的多媒体信息处理技术等。

模块功能

跟踪服务器子系统的设计与实现:系统中包括一到多台跟踪服务器,每台跟踪服务器均维护完全相同的数据结构,以实时跟踪系统中每台存储服务器的状态变化。每台存储服务器启动伊始即将自己的详细信息加入到每台跟踪服务器所维护的数据结构中,并在此后以一定的时钟周期向每台跟踪服务器发送心跳信息, 将自身的状态标记为活动。同时跟踪服务器也以一定的时钟周期检查其所维护的数据结构,将长期收不到心跳信息的存储服务器标记为离线。

存储服务器与ID服务器子系统的设计与实现:系统中包括一到多台存储服务器,它们被划分为若干组。每个存储服务器组通过GlusterFS保证其所有组员文件系统的同步性。 每台存储服务器上的文件保存在特定的目录结构中,其存储路径根据取自ID服务器的唯一标识计算而得。每台存储服务器通过启动时的加入和周期性的心跳,保证其运行状态得以实时反映在每台跟踪服务器所维护的数据结构中。

客户机子系统:当某台客户机需要上传、下载或删除文件时,会首先向任意一台跟踪服务器索要可用存储服务器的地址列表。跟踪服务器根据客户机提交的用户ID,通过查询数据库确定其所隶属的组, 并从其所维护的数据结构中挑选出若干台该组当前处于活动状态的存储服务器,以地址列表的形式返回给客户机。而后客户机便可从此地址列表中选择一台存储服务器,发起业务请求。后者一方面根据取自ID服务器的唯一标识确定存储路径或从数据库读取已保存文件的元数据,据此执行业务逻辑并响应客户机。

Web服务器与Web客户机的设计与实现:Web服务器将客户机的下载功能封装在针对HTTP请求GET方法的处理中,直接将从存储服务器下载得到的文件内容数据以HTTP响应的形式回传给Web客户机。Web客户机是基于Qt和VLC库实现的流媒体播放器,既可以离线播放本地多媒体文件,也可以实时播放在线流媒体内容。