随着移动互联网的发展,视频通信使用场景越来越多,如视频聊天、视频会议、在线直播等。但是随之而来对前端设计的要求、对后端服务器的要求也不断增加。所以如何搭建一个完善的服务器以适合视频通信,是每个视频通信研发人员都关注的问题。

一个完善的音视频服务器需要解决高并发、低延迟、NAT穿透和扩展性负载均衡等问题,我们关注这个方向已有一年多,下面是总结的部分经验:

关于高并发

在这里主要介绍了如何设计互联网分布架构以提高系统并发能力。

有两种常用的方法:垂直扩展(Scale Up)与水平扩展(Scale Out)。

一、采用垂直扩展来提升单机处理能力。

写代码时,我们能做的优化可分为三类:架构优化、算法优化和语言优化

架构优化:如用异步IO来增加单服务器吞吐量,多线程的时候通过减少锁的使用来提高服务器性能等。

算法优化:其在服务器中比较少见,因为服务器逻辑代码里通常没有繁琐的算法,但是如果有能优化的空间,还是要进行优化。

语言优化:比较常见的优化方式,比如const加引用传参,比如复杂对象遍历时前置加加与后置加加等,具体看参阅《effective c++》和《more effective c++》。当然,如果有数据库,那么SQL语句的优化也算。

现在代码已经写好了,也跑起来了,发现性能还是不满意,怎么办呢?

看瓶颈! 就好比医生治病,要先找病因。Linux下的gperftools、Windows下的vs、Mac下的xcode都能进行集成性能分析。

这些性能分析工具能帮助你大致定位到哪一行代码占用了CPU时间。找到病因后,就是对症下药。

当然了,对于这种主要由于占用CPU、内存不够和网卡而导致的服务器性能不高,提升硬件还是非常有效的。

但是单机性能总是有极限的,会受到时代技术的限制。所以互联网分布式架构设计高并发的解决方案还是要依靠水平扩展。

二、采用水平扩展来增加服务器数量,以扩充系统性能

这点与互联网的分层架构有关,在互联网的分层机构中,各层次水平扩展的实践是不同的,比如:反向代理层通过“DNS轮询”的方式;站点层通过nginx来进行,而服务器则主要依靠服务连接池。在各层实施水平扩展后,通过增加服务器数量的方式,可以在理论上做到系统性能的无限提升。

简单说就是,活太多时一个人干不完,多个人一起干。然后牵扯到多个人,必然会涉及到调度分配管理的问题。

相关的名词有:CDN,负载均衡,Hadoop,云计算等。

解决完高并发的问题,现在来说一下低延时。

关于低延时

低延时是所有视频通信研发人员都会关注的一个点,更低的延时必将提升用户使用体验。可是如何做到低延时呢?

图鸭的产品是采用了如下的方法:服务器采用udp协议传输音视频数据、tcp协议传输控制信令,以此来保证控制信令可靠且音视频数据传输延时低。

众所周知,UDP协议与TCP协议相比:采用UDP协议传输数据可能导致数据丢失,但客户端接收信息延时低;而TCP协议有丢包重传策略,但速度不快。我们的产品在使用时,将这二者结合,以确保UDP在接收到的包不完全时也能正常解包。

在解决了高并发和低延时的问题后,我们要来考虑一下流量成本的问题。降低流量成本是每个视频通信使用者的需求,也是每个研究视频通信的程序员们要解决的问题。在这里我简单介绍下NAT穿透。

关于NAT穿透

(NAT穿透)

视频聊天的一大技术难点就是服务器的网络带宽占比过高。使用NAT穿透方案,客户端在通信时可以采用P2P的方式。P2P方案能够使A客户端的视频数据不经过服务器到达B客户端,在降低服务器带宽消耗时保证传输低延时。

那么如何实现NAT穿透呢?我们首先需要知道NAT的特性:NAT会拒绝陌生来源的数据包。简单来说,如果NAT后不存在向某个NAT之外的主机发送过数据的主机,那么外部主机就不能主动发送数据包到NAT之后的主机。

一种可行的方案,是利用一个信令服务器,先获取客户端暴露在NAT上的IP:PORT信息,再协调两个客户端,朝其NAT上暴露的IP:PORT发送信息。由于处于NAT(这里设为NATA)后的机器向另一个NAT(这里设为NATB)后的设备发送信息了,NATA就会允许NATB后的主机的数据。反之亦然。

但是还有个要点需要注意:先发送数据的客户端的第一个数据包会被NAT丢弃,因为对方NAT并不知道该如何分配这个未知来源的数据包。NAT穿透完整的解决方案可以参考RFC5389协议,根据协议实现。

关于扩展性强,负载均衡

(一种负载均衡方式)

在处理完上述问题后,可以考虑怎样让整个服务器负载均衡。

在这里图鸭君主要介绍主从节点集群设计:客户端从负载均衡服务器获取转发服务器地址,负载均衡服务器根据客户端的身份以及从节点服务器的带宽流量、CPU情况等,智能分配给客户端合适的服务器地址,在保证资源有效利用的同时又避免服务器过载。

这样的设计在提高了可扩展性的同时能够在从节点无缝加入主节点。

总结

事实上,前文所述的都是搭建高性能服务器的基础,好的架构是基础,好的优化才能盖高楼。对于如何更好地优化服务器?一种合理的做法是:对服务器的运行状况进行分析,对执行频繁、资源消耗过高的部分进行特别的优化。

也就是说对于具体的服务器具体分析,只有如此才能让服务器做到最优

如何搭建视频通信服务器架构相关推荐

  1. 构建在线教育弹性高可用视频处理架构实战

    简介: 对于负责建设视频处理系统的技术团队而言,这样的业务场景就留给了他们一系列的挑战. 前言 近些年,在线教育行业飞速发展,为整个社会的知识传播提供了前所未有的便利性.通过多种形式的在线教育平台,学 ...

  2. 阿里云搭建视频网站和视频服务的省钱方案

    在阿里云.腾讯云等云平台上搭建视频应用,包括搭建视频网站和视频APP,最大的费用是存储费用和流量费用. 如果视频量和访问量都很大,就需要经济的存储和流量方案,认真阅读本文档,将会给您节省大量费用. 一 ...

  3. 直播软件搭建直播服务架构

    直播软件搭建直播服务架构 前言 随着移动设备的普及和4G网络建设的全面铺开,短视频和直播行业日益火爆,其代表应用抖音.头条更是火遍大江南北,逐渐成为家喻户晓的国民APP.各大厂商也纷纷入局短视频赛道, ...

  4. java + ffmped + mencoder搭建视频处理平台

    java + ffmped + mencoder搭建视频处理平台 ffmpeg+mencoder几乎可以完成目前基于web的播客平台任何音视频处理的操作.如果还需要添加一些什么的话,那么就是视频在线录 ...

  5. 微软视频直播服务器,使用微软云媒体服务快速搭建视频直播

    原标题:使用微软云媒体服务快速搭建视频直播 2020庚子鼠年假期结束,众多企业开始进入开工模式,但"战疫" 仍在进行中,大家仍以居家办公.避免外出及商务会面为主.在大量传统线下交流 ...

  6. 关于搭建视频直播运营平台的一点经验和心得

    视频直播,目前在各行各业得到了广泛的应用.那么该如何搭建一个自己的直播运营平台?需要投入多大的财力和物力呢? 下面根据我个人的从业经验讲一下,不具有绝对的权威性,但是都是经验的总结,希望和大家一起学习 ...

  7. 声网下一代视频引擎架构探索与实践

    为应对愈发多样化的音视频互动场景下的挑战,Agora 开始设计自己的下一代视频处理引擎,在过程中关于引擎架构.性能调优.插件系统设计等方面总结了很多经验,希望与各位音视频领域的爱好者.行业从业者分享. ...

  8. 【活动预告】即构受邀分享实时音视频服务架构实践

    今年年初,受所服务的线上应用爆炸式增长的影响,即构作为底层音视频服务商,平台数据节节攀升,高达数千万的并发,日均音视频互动时长突破20亿分钟. 要扛住千万级的高并发,首先要有一个支持千万级并发的底层架 ...

  9. 梨视频:基于阿里云E-MapReduce搭建视频推荐系统实践

    专注新闻资讯的梨视频近来表现亮眼. 梨视频由前澎湃新闻掌门人邱兵创立. 在上线之前,它就获得了黎瑞刚华人文化近1亿美元投资,旗下<微辣>栏目总播放量已经超过4亿,并在上线1个月后获得&qu ...

最新文章

  1. Java项目:车租赁管理系统(java+Gui+文档)
  2. 线程Queue,进程Queue和RabbitMQ区别
  3. java io系列10之 FilterInputStream
  4. 关于mybatis里面的Executor--转载
  5. MHA监控进程异常退出(MHA版本:0.56)
  6. 5下载的demo在哪_归类专业能力水平评价练习盘!快来下载呀
  7. android AsyncTask介绍(转)
  8. 基于Matlab的循环码实验报告,基于MATLAB的循环码实验报告
  9. 寻虫记:BOM头制造的冤案,无故多出空白行
  10. _DEVOBJ_EXTENSION结构体
  11. Objective--C Practice and source code
  12. Failed to connect to Etherscan API at url https://api-rinkeby.etherscan.io/api
  13. Webpower中国区发布《2015年中国酒店旅游行业邮件营销市场报告》
  14. dos命令行的四种打开方式
  15. 深圳清洁公司深南环境发展近日获得19个高科技专利发明
  16. 菜鸟腾飞安全网之精通vmware虚拟机系列教程(12课全)听课笔记
  17. ★三个和尚与机构臃肿的故事
  18. Looking up JNDI object with name [LOGGING_PATTERN_LEVEL]
  19. PaddleOCR 文字检测部分源码学习(8)-损失函数(4)
  20. 阿里云服务器通用型g7a实例AMD处理器CPU及网络性能说明

热门文章

  1. HiAll面试真题讲解集锦(选摘1)
  2. DCWriter 电子病历文档编辑器的 电子病历功能规范对照表
  3. python实现局域网攻击软件_使用python的scapy库进行局域网内的断网攻击(基于ARP协议)...
  4. 黑客大军“撞库”攻击交易所,是谁泄露了用户数据?
  5. Tableau同环比分析系列(一)--基础同比、环比
  6. 经典算法(动态图展示)
  7. 《首席执行官》观后感
  8. quill.js官方文档(六)【增量Delta】
  9. 人事不干人事,这算什么事
  10. 计算机硬盘磁盘有什么有害物质,电脑硬盘分区分错了有哪些危害?如何正确分区?千万别弄错了!...