一、概述

流媒体服务器(视频服务器)是在线视频应用的核心系统,用于支持海量大并发的视频播出服务,实现将视频存储、视频转码、协议复用、大并发播出等的工作集中处理,业务系统可以只关注业务细节而不用再去处理与视频相关的诸多技术细节,从而实现提高项目实施效率、降低项目实施风险的目标。
那么流媒体服务器是如何实现高负载大并发的呢,其中有几项技术细节至关重要,下面以流媒体服务器 NTV Media Server G3 所采用的技术细节为例来说明。


二、关键技术

1、epoll技术

epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。
epoll的主要优势包括:1)支持一个进程打开大数目的socket描述符
select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是1024。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译服务器代码,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的Apache方案),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步的高效,所以也不是一种完美的方案。不过 epoll则没有这个限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左右,具体数目可以cat /proc/sys/fs/file-max查看,一般来说这个数目和系统内存关系很大。2)IO效率不随FD数目增加而线性下降
传统的select/poll另一个致命弱点就是当你拥有一个很大的socket集合,不过由于网络延时,任一时间只有部分的socket是“活跃”的,但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。但是epoll不存在这个问题,它只会对“活跃”的socket进行操作---这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有“活跃”的socket才会主动的去调用 callback函数,其他idle状态socket则不会,在这点上,epoll实现了一个“伪”AIO,因为这时候推动力在os内核。在一些 benchmark中,如果所有的socket基本上都是活跃的---比如一个高速LAN环境,epoll并不比select/poll有什么效率,相反,如果过多使用epoll_ctl,效率相比还有稍微的下降。但是一旦使用idle connections模拟WAN环境,epoll的效率就远在select/poll之上了。3)没有使用mmap加速内核与用户空间的消息传递

2、sendfile技术

Linux系统的sendfile 函数实现在两个文件句柄之间直接传递数据,避免了内核缓冲区和用户缓冲区之间数据的拷贝,操作效率非常高,称为零拷贝。传统的编程,从文件到网卡发送文件数据,需要在两个缓冲区之间拷贝数据,使用sendfile函数,可以直接通过共享文件指针来实现。linux系统开发指南是这样描述的:
“sendfile() copies data between one file descriptor and another.Because this copying is done within the kernel, sendfile() is more efficient than the combination of read(2) and write(2), which would require transferring data to and from user space.”
原型定义如下:

#include<sys/sendfile.h>
ssize_t sendfile(int out_fd,int in_fd,off_t*offset,size_t count);

3、文件指针复用

对于视频点播应用,理想的情况是在大并发情况下很多用户在访问有限的数个热点资源,这时候优化的空间就很大。如果为每个用户请求单独打开一个文件句柄,那么就无法在进行文件指针复用,磁盘IO和内存会显著增高。如果我们只为每个相同文件打开一个句柄,多个用户请求一个文件时进行读指针复用,情况就会好的多。另外,这个打开的文件会被加载到内存里,众多的读操作只是在内存中进行,而不是进行磁盘读写,这个操作对消除磁盘IO瓶颈起到了关键作用。

三、超大并发的处理

当并发量超过1万,达到数万甚至数十万时,在单机上进行优化的手段就显得力不从心了,这时候需要从网络架构和集群的较多去考虑问题。NTV Media Server G3有两种方案处理海量并发,一是集群方案,通过多台服务器之间建立负载均衡来实现大并发;二是CDN加速方案,通过与CDN系统建立加速配置关系,将负载转移给CDN,实现全球范围的大并发播出。 当然,CDN与流媒体服务器的负载已经没有太多关系,是另外一个可以独立探讨的技术话题。

流媒体服务器(视频服务器)实现超大并发的解决方案相关推荐

  1. 视频服务器与流媒体服务器的区别和应用介绍

    我每天都在感叹,网络真是个神奇的东西.有的用户想了解流媒体服务器,就上网搜流媒体服务器,然后看见相关的搜索有视频服务器,于是又搜视频服务器,结果流媒体服务器和视频服务器都没搞懂是什么意思.视频服务器和 ...

  2. 与视频服务器相比,流媒体服务器有什么优势?

    流媒体技术作为新一代互联网应用的标志,近年来发展迅速,包括新闻发布.在线直播.视频点播.网络广播.音乐下载等.VeCloud为流媒体输出所需的巨大数据流和并发数据流提供了高性能的服务器和流畅的网络环境 ...

  3. 流媒体(视频)服务器调研

    这篇文章主要向大家介绍流媒体(视频)服务器调研,主要内容包括基础应用.实用技巧.原理机制等方面,希望对大家有所帮助. 标签:javascriptphphtmljavapythonlinuxandroi ...

  4. Car-eye JT/T1078 视频服务器开发过程中的音频处理

    JT/T 1078视频协议是基于JT/T 808协议的扩展.其中视频服务器和指令控制服务器用两个SOCKET 进行通信. 因为协议采用TCP-ip协议的基础上进行封装,需要对协议的数据进行解释.然后转 ...

  5. 到底一台服务器能够支持多少TCP并发连接?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 朱小厮 来源 | 公众号「朱小厮的博客」 曾几 ...

  6. HLS视频服务器SRS简介

    原文出处: https://xugaoxiang.com/2019/12/06/hls-srs/ 软硬件环境 ubuntu 16.04 64bit srs 2.0release SRS简介 SRS,即 ...

  7. 关于电影视频服务器架设的方法

    首先是硬件方面 视频服务器硬件选择需要注意以下几点: 1.不需要高频CPU 视频服务器在提供服务时,主要体现为持续的I/O操作,CPU资源占用并不大.以笔者经验,50台机器的网吧,PIII500左右的 ...

  8. 分发服务器性能,高性能P2P流媒体内容分发服务器的设计与实现

    摘要: 互联网技术的不断进步,各种新颖的互联网应用服务如雨后春笋般出现在人们面前.以网络视频.网络电视等为代表的流媒体技术的诞生和发展,为互联网注入了新的活力和发展契机.但是,传统的流媒体系统多采用C ...

  9. 从服务器分发性能,高性能P2P流媒体内容分发服务器的设计与实现

    摘要: 互联网技术的不断进步,各种新颖的互联网应用服务如雨后春笋般出现在人们面前.以网络视频.网络电视等为代表的流媒体技术的诞生和发展,为互联网注入了新的活力和发展契机.但是,传统的流媒体系统多采用C ...

  10. 运维初学者必备之SRS音视频服务器搭建

    运维初学者必备之SRS音视频服务器搭建 什么是srs音视频服务器? 答:SRS是一个流媒体集群,支持RTMP/HLS/HTTP-FLV/RTSP/DASH/WebRTC/SRT/GB28181,高效. ...

最新文章

  1. 【网络编程】epoll 笔记
  2. 邬贺铨:工业物联网的技术与前景
  3. oozie捕获标准输出异常capture-output
  4. 130242014076+陈旭+第3次实验
  5. ubuntu 安装sun-java5-jdk
  6. API Hook在TA中的应用
  7. 找出无序数组中最小的k个数(top k问题)
  8. go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...
  9. Python将时长转换为MM:SS格式
  10. 中富之命能有多少钱_做建筑师到底能赚多少钱?
  11. Hbase和MySQL的区别是什么?
  12. anchor锚点 antvue_浅谈vue 锚点指令v-anchor的使用
  13. python3.7怎么安装wsgiref_python3.x - python3使用wsgiref时环境变量出现乱码
  14. 20200210_logistic回归来预测违约的概率
  15. 股票交易软件接口编程语言
  16. 大数据视频资源——尚硅谷大数据视频地址
  17. creo4.0的计算机系统要求,Creo4.0系统配置文件教程详解 参数设置
  18. Python小数整数输出
  19. 一款熊猫游戏java_狂热的熊猫_JAVA游戏免费版下载_7723手机游戏[www.7723.cn]
  20. Image Signal Processor

热门文章

  1. 虚拟机 无法 ftp服务器系统,访问不到虚拟机上的ftp服务器上
  2. matlab常微分方程2次初值问题,MATLAB求解二阶常微分方程初值问题
  3. php 开源 博客,推荐常用PHP开源博客TOP10
  4. 4场直播丨EsgynDB连接服务层、Oracle、openGauss
  5. SQL列转行/行转列
  6. 4.郝斌C语言笔记——基本的输入和输出函数的用法
  7. python手机代码编辑器_Pycharm(Python代码编辑器) V2020.1.2 官方版
  8. 微信小程序调查问卷避坑
  9. 企业网络管理和华为企业级路由交换产品介绍
  10. steam插件_Steam是如何了解一款游戏的?看了这篇文章会让你豁然开朗!