马艾田,耿立宏,王闰强,肖 云,杜义华
(中国科学院计算机网络信息中心,北京 100190)
随着4G技术的成熟推广以及中国移动互联网的发展,中国互联网用户尤其是手机用户持续增长。根据中国互联网络信息中心(CNNIC)发布的第40次《中国互联网络发展状况统计报告》,截至2017年6月,我国网民规模达到7.51 亿,其中手机网民规模达到7.24亿。各类手机应用的用户规模不断上升,场景更加丰富。网络直播因其移动性、持续性、及时性和较强的互动性与参与感,在2016年后也进入高速发展期,数据显示我国互联网直播平台为200家左右,用户数量已经达到2亿[1]。
科普云直播系统是中国科普博览提供的泛科学类直播服务平台。科普云直播系统依托科普云资源管理平台,基于Nginx开源系统、实时消息传输协议(Real Time Messaging Protocol,RTMP)、EasyDarwin开源系统、RTSP、HLS协议,采用混合的技术构架进行搭建。中国科学院科普云资源管理平台是中国科学院网络化传播平台——中国科普博览提供的资源虚拟化管理平台。平台基于海云捷迅的云服务平台AWCLOUD为中国科学院各个研究院所提供科普信息化服务。平台对授权云资源用户提供云资源的配置管理和调度服务。
科普云直播系统采取了混合云的架构,架构分为3层:物理层、IAAS基础设施服务层和应用层,如图1所示。
物理层分为3部分:计算服务器、存储服务器和网络服务器。其中,计算机服务器主要由DELL M610刀片服务器构建;存储服务器采用的是中科蓝鲸的Blue Whale BWstor BW3200DI集群NAS,它由高速存储系统和内置的专有NAS系统组成,内置的专有NAS系统提供了BWFS、CIFS、NFS、FTP、HTTP等多种文件级访问接口,同时还可以提供FC/IP SAN协议的块级访问接口[2];网络服务器主要采用的是H3C的交换机及网络安全设备。
图1 科普云直播系统架构
IAAS基础设施服务层基于海云捷迅的云资源管理平台AWCLOUD对基础的物理资源进行了虚拟化,由管理节点、计算节点和存储节点组成。其中分为5部分组件,分别是云控制器(Cloud Controller,CLC)、集群控制器(Cluster Controller,CC)、存储控制器(Storage Controller,SC)、节点控制器(Node Controller,NC)和Walrus。其中,云控制器主要处理身份验证,账户、报告、配额管理,从整体上进行资源的管理和调度。集群控制器一般会同时连接到云控制器和在同一个以太网广播域的节点控制器。集群控制器一方面收集各个节点机的使用信息对虚拟机进行调度,另一方面集群控制器也管理虚拟网络,在云控制器的引导下进行服务等级的实施。存储控制器提供弹性的块存储,接入中科蓝鲸的Blue Whale BWstor BW3200DI集群NAS,管理动态的块、卷以及快照。节点控制器控制虚拟机的整个生命周期,包括虚拟机实例的运行、检查、重启、终止等。Walrus主要是用来存储长久性的数据,兼容Amazon的S3服务[4]。其既可以存储镜像卷快照,同时也可以HTTP方式进行put/get存储即服务。此外,在中科蓝鲸的集群NAS中对NAS的RAID5盘阵列进行了LUN(Logic Unit Number)的划分,在通过光纤交换机相连的存储节点上对各个逻辑存储设备进行了Multi-path多路径配置,以消除路径单点,在盘阵之上又通过LVM(Logical Volume Manager)对多个逻辑存储设备划分了VG(Volume Group)、PV(Physical Volume)、LV(Logical Volume),为整个平台提供可伸缩的公共存储服务,实现存储空间资源的动态管理。
应用层主要由RTMP(Real Time Messaging Protocol)流媒体服务器集群和RTSP(Real Time Streaming Protocol)流媒体服务器集群构成,分别支持通过RTMP和RTSP协议进行直播流的推送和拉取。为了保证流媒体服务器可以应对高并发的情况,面向用户通过Nginx反向代理的方式来做负载均衡。其中流媒体服务主要是通过开源的Nginx Web服务器整合了RTMP扩展来进行媒体流的,而RTSP服务则是基于苹果的开源流媒体服务Darwin以及Nginx Web服务器、Redis存储服务构成。
Nginx系统因为其轻量级模块化设计、内存占用率低、并发高、开源且可以灵活扩展的特性,被广泛地用于部署高性能高并发的服务器集群[3]。考虑到高并发的用户场景,科普云直播系统采用Nginx反射代理的方式对流媒体用户的请求进行负载均衡。
Nginx应用服务器采用Master-Worker的多进程、异步非阻塞的工作模式。Nginx启动时会启动一个Master进程和若干Worker进程,Master进程负责对Nginx本身和Worker进程进行管理调度,而Worker进程则负责对客户端实际发来的请求进行响应。Worker中的ht_core模块监听到互联网上的用户请求通过与backend的应用交互产生相关的响应内容,通常一个单独的Worker进程使用一个处理器核,这样能完全利用多核体系结构,并且避免线程抖动和锁。在一个单线程的Worker进程内部不存在资源匮乏,并且资源控制机制是隔离的[5]。Nginx在文件系统上使用分层数据存储实现缓存。缓存主键可配置,并且可使用不同特定请求参数来控制缓存内容。缓存主键和元数据存储在共享内存段中,缓存加载进程、缓存管理进程和Worker进程都能访问。其详细的架构图如图2所示。
图2 Nginx系统架构图
不同于作用于客户端的正向代理,反向代理主要作用于服务器端。Nginx的反向代理机制则主要通过Ht_upstream和Ht_prpoxy来实现。反向代理机制对用户透明,用户请求发送给Nginx后,Ht_upstream重新组装用户请求并按照Ht_proxy指定的负载均衡策略发给Backend应用处理[6]。目前,Nginx支持两种负载均衡策略,分别为加权轮询(Weighted Round Robin)和IP Hash。
Nginx是一个功能丰富的应用服务器,通过第三方扩展Nginx-rtmp-module结合音视频解决框架FFMP EG即可提供流媒体服务。科普云直播系统采用Linux的Centos版本作为基础应用平台。
系统搭建部署过程中,需要在CentOS中首先编译好Nginx-rtmp-module的模块,然后在Nginx的编译安装过程中,指定编译成功的Nginx-rtmp-module位置,加入RTMP协议扩展。然后在Nginx本身的配置文件中,加入RTMP相关配置指令。指定监听端口,默认指定RTMP默认端口1935,也可以根据自身系统构建需要指定其他可用端口,然后指定HLS(HTTP Live Stream)协议相关文件目录即可。Nginx启动过程可以从端口中看到监听RTMP流和提供Web服务的进程。
图3为Nginx FFMPEG推流示意。Nginx推流端设备需要安装FFMPEG,然后通过FFMPEG采集视频音频信号,使用RTMP协议推送给Nginx服务器。RTMP服务器一方面可以通过RTMP协议为用户提供直播流,同时也会把直播媒体流信号切割分片,并以 m3u8分片文件的格式(分片文件会随着直播流而不断切割更新)存储在Nginx指定的HLS目录中,以HTTP流的方式推送给客户端。
图3 Nginx FFMPEG推流示意
EasyDarwin是基于苹果开源项目Darwin Streaming Server核心流媒体服务器开发扩展而来的。它支持跨平台的PC端、移动端(iOS和Android)的RTSP直播(H264/MJPEG/MPEG4、AAC/PCMA/PCMU/G726)功能,底层(Select/Epoll网络模型、无锁队列调度)和上层(RESTful接口、Web管理、多平台编译)、关键帧索引等[7]。
EasyDarwin架构如图4所示。其中EasyPusher通过EasyNVR和EasyCamera采集到视频信号,然后经由EasyAACEncoder将音频内容转化成AAC格式,并通过RTP/RTSP协议进行传输,同时流媒体服务器可以通过EasyHLS和EasyRTSPClient将媒体流转化为RTSP和HLS的直播流供EasyClient在HTML5或EasyPlayer中进行播放[8]。
图4 EasyDarwin系统架构
通过以上架构,科普云直播系统一定程序上解决了互联网上海量直播观看用户压力,在系统的并发性、可扩展性以及多直播流协议兼容性均有较好的表现。
系统通过AWCloud创建多个虚拟机模板,包括RMTP流媒体服务器和Darwin流媒体服务器模板。RMTP流媒体服务器模板中部署了Nginx和RTMP流媒体扩展服务以及FFMPEG转码服务;Darwin流媒体服务器模板中部署了Darwin流媒体以及转码服务。
当进行一次大规模直播时,直播流媒体用户迅速增加,服务器以及带宽出现压力时,可以通过AWCloud平台轻松快速扩展出多个RMTP流媒体服务器和Darwin流媒体服务器虚拟服务,通过负载均衡来均衡负载。同时,当直播结束,资源也可以迅速通过AWCLoud平台收回,增加了资源的弹性,提升了资源的利用效率。
此外,这两种模板也可以应对当前移动端不同客户端设备不同格式的媒体流RTMP以及RTSP,从而让直播系统在扩展性和协议兼容性上有较好的改善提升。
为验证科普云直播系统的并发能力,通过使用Apache Jmeter工具来对服务器性能进行监控的方式对科普云直播系统进行了并发性测试。
系统资源层面,系统通过AWCloud创建了一个Nginx负载均衡服务器、10个流媒体服务器。系统配置如表1所示。
表1 系统配置信息表
通过分布式的方式,同时使用5台Jmeter Slave对系统进行了1 000、5 000、10 000、50 000并发的压力测试,10台流媒体服务器单机100、500、1 000、5 000人并发。
科普云直播系统在总并发50 000、单机并发5 000时,响应错误率在0.2%,正确响应率可以达到99.8%,满足需求;而在单机5 000以下,单机100、500、1 000并发时响应错误率为0%;单机并发超过5 000(总并发50 000)时,错误率上升较快,系统出现瓶颈,错误率达到了20%左右,可见系统在应对50 000(单机5 000)之内总并发时可以满足用户正常的使用,而在超出此并发时,系统在负载均衡及网络层面开始出现瓶颈。可以通过增加流媒体服务器数量、换用硬件负载均衡、增加网络带宽的方式对系统并发性能进行扩展。
科普云直播系统目前主要依托于中国科普博览科普云在各个新媒体渠道及中国科普博览求真云课堂面向中国科学院及社会公众提供泛科学类直播服务,同时也为中国科学院继续教育网面向中国科学院各研究所提供继续教育培训类的网络直播服务。科普云直播系统在腾迅、百度、新浪及知乎平台进行了“悟空卫星的大发现与暗物质”的直播;在求真云课堂进行了“林群院士微积分课程”的直播;同时,本系统也为移动科学秀提供了直播服务。移动科学秀平台是一个基于科普云平台采用HTML5技术的跨终端数字内容管理与阅读的应用服务系统,平台提供可视化的视频编辑功能,可以为终端用户通过丰富的科普博览数字媒体资源库快速生成H5、iOS/Andoid APP形式的数字化科学科普内容,截至目前,平台入驻创作团队447个,发布作品数量64期,总下载阅读量达到101 024次。
科普云直播系统主要通过多机位采集多信号源,经由导播台进行信号切换,然后经过网络推流设备将信号通过RTMP或者RTSP协议推送至相应的流媒体服务器,然后由服务器进行直播信号的分发,用户则可通过计算机、智能手机、投影等多种设备进行直播的观看。详细的科普云直播系统直播示意见图5。
图5 科普云直播系统直播示意
科普云直播系统目前可以支持万级用户、数千并发,但在应对十万级、百万级用户和
一些强实时、强互动、用户异地分布的场景时仍有待于一些新的解决方案,如CDN、云加速等技术,这需要在下一步工作中继续研究并进行系统实现。