搭建视频通信服务器架构的一点总结

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

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

关于高并发

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

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

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

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

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

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

3.语言优化:比较常见的优化方式,比如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穿透方案,客户端在通信时可以采用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情况等,智能分配给客户端合适的服务器地址,在保证资源有效利用的同时又避免服务器过载。

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

总结

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容