海量用户实时互动直播架构探索

现在比较流行的直播,经常会出现这样的情况: 用户打了一个弹幕上去,主播念出来的时候,弹幕已经飞出去了。二者时间是不匹配的。

这是我们的一个客户,两个主播连线互动,实时交互。试想,如果直播时延时高达几秒,像这样的双主播组合是没有办法进行交谈的。A说完之后,对方要等几秒才能听到,又过了几秒,A才能听到对方的回答。

这两个例子其实要说明实时互动直播和普通直播相比有本质的区别:延时。实时互动直播延时必须低达几百毫秒。

为什么是几百毫秒?为什么不是几秒也不是几毫秒?这是由人们日常交流习惯决定的。人的说话声音通过声波传播,如果两人相隔34米,那么延时就是100毫秒。基于这个范围,略长的延时,观众还能。基于互联网的音视频通信,音频通话延时标准在400毫秒以内,视频通话延时在800毫秒以内,这可以让通话双方无延时感知的。延时如果达到秒的数量级,那么通话双方就会有明显的等待。

互联网是基于电磁波或者通过光纤传播的。光绕地球一圈,耗时300毫秒,这是无法逾越的物理定律延时。有人号称可以做到0延时,他们估计用上了量子通信。在实际互联网应用中,网络条件并不理想,互联网信号绕地球一圈的延时必然大于300毫秒。这就给实时互动直播,带来了巨大的挑战。

实时互动直播的挑战

第一,互联网的骨干网上路由器的部署,不是直线点到点,而是中间要经过很多路由器的跳数,实际上是在走“弯路”。所以,互联网传输没有办法绕地球一圈正好300毫秒,最好的情况也需要要近400毫秒。

第二,公共互联网上,路由器其实经常出现故障。比如,在晚高峰的时候,网络会比较慢。这是因为部分路由器可能过载。因为路由器有最大的处理能力上限,一旦超过上限,就不能处理,会造成丢包、拥塞。

第三,无线网络相对有线网络,可靠性较低。无线网络普及度越来越高,,越来越多的手机、笔记本连接无线网。但是无线网络相对有线网络没有那么可靠,同时也会引入信号污染。信号覆盖不到的地方,效果较差。

第四,高并发挑战。首先需要普及一个概念:并发和在线是有区别的。当今的移动互联网,大家都在讲千万级。当我们谈及海量用户架构这个话题时,似乎如果不说到上亿这个量级,是落后了。但是实际上,前面这些说法都混淆概念了,它们都在说“在线”,而不是“并发”。以下图为例:

左边是QQ在线好友列表,图中可以看到很多好友展现,其实没有交互,使用者不会有压力。右边是一个框同时和很多人聊天,使用者会感受到巨大压力。同样的,对于直播服务而已,如果用户只是在线,很少会跟服务器有交流,最多偶尔发一个心跳包。

用户在线时,如果参与了“看”“说”,这就是并发。直播的并发峰值具有突发性,往往跟主播的活动密切相关。比如,主播会跟粉丝约定直播时间,到了约好的时间,粉丝就会在短时间大量涌入一个直播频道。观众慢慢进入频道,服务器没有压力,但如果瞬间涌入,后台的压力非常大。

本文,将重点介绍互动直播的可用性问题。电信业务的可用性标准是四个九,我们期望做到五个九。双十一时,支付宝的处理能力非常强,百度百科上提供的数据显示,支付宝当天处理了96%订单。但是,我们对自己的互动直播有更高的要求,期望做到99.999%。

实时互动直播要保证高可用性,有巨大的难度,原因如下:

  1. 实时很难。互联网基础设施不是为实时通信设计的。
  2. 覆盖很难。机房找点,互联互通。对通信云来说,覆盖不好会影响到可用性。
  3. 高并发很难。不能看着看着就不动了,没声了。
  4. 突发性很难。系统容量要高,还要防止雪崩。

这些挑战我们在做整个服务的时候,都需要全面考虑。

直播架构的演进


1、CDN直播架构

这是当前流行的直播架构,左下角是一个主播,主播通过手机或电脑等设备,把自己的视频流上传到服务器,接入目前流行的CDN服务,通过CDN服务进行网络分发,分发到各地的用户。所有用户都可以看到主播的表演。

2、单服务器实时互动直播架构

实时互动直播,不能使用CDN方案,因为CDN方案性质决定了延时达不到实时的要求。下图是我们认为可以实现实时互动的架构。主播把自己的视频流上传到服务器,通过这台服务器分发给其他用户,再采用合适的传输协议,延时可以做到很小。从主播到服务器再到观众的延时,加上编解码和抖动的延时,可以做控制在几百毫秒以内。

这个架构很简单,但有一个缺点,没有考虑覆盖不同地用户的问题。并且一台服务器支撑不了大规模用户。这台服务器如果宕机,或者服务器机房出故障,整个传输都会受到影响。这必然达不到高可用架构的标准。

3、分布式实时互动直播架构

主播的视频流上传到一个接入服务器,这个服务器会把这个视频流分发到我们部署在世界各地的服务器。然后这些服务器接入本地的用户,把视频传下去。

在这个架构里面,首先可以解决的是覆盖问题,部署在世界各地的服务器,可以让用户可以快速就近接入。整个视频流通过我们在互联网上做的分布式传输算法,把它实时的传输到世界各地的机房。其次,可以避免机房甚至骨干网故障,对传输造成的影响。

如何实现高可用性

可用性可以分为两个部分:接入可用性和使用可用性。你在使用服务的时候,能够接得进去,能够听得到,这是接入可用性。举个例子,打电话的时候,有时会出现你所呼叫的用户无法接通,因为用户的手机没有接入电信服务,这就是接入可用性问题。在通话的时候,听不到对方说话了,使用中掉线了,这就是使用可用性。

为了实时监测可用性,我们做了两方面的监测:

1、主动监测

服务可用性不能依靠用户数据反馈或者用户主动上报,这样你永远是最后一个知道的。况且初期用户量小怎么办?因此,我们需要自己给出我们的服务有多可靠。为此,我们研发主动监测系统来监测整个服务。端到端监测,接入有没有问题,在使用的过程中会不会出问题。

2、被动监测

用户在使用我们的服务的时候,我们会收集用户接入服务的整个过程,多长时间可以接入,接入时经过了几次请求,使用中有没有掉线,中间有没有声音终端或卡顿。我们会收集这些数据,据此了解服务的可用性。

有了监测数据,那么就可以据此来不断改进我们的服务,解决前面所说的挑战。

1、覆盖问题

在中国做互联网的人应该都有一个感受,联通跨电信,用户之间是难以交互的。早期的QQ传文件没有做中转,如果联通和电信的用户要互相传文件,速度非常慢,甚至会中断。玩网游的用户,也会遇到有电信专区、网通专区。下图是一个简单的测试,当跨运营商的时候,发一个包,可以看到里面有很多丢包。这个数字是RTT,这个测试结果可以看出,最小是62毫秒,最大是840毫秒。

不但中国有网络互通的问题,国外也有。很多人以为发达国家,比如美国、日本,互联网的基础设施较好,所以不会有互联互通的问题。但是,在我们做实际测试时,美国的互联网也存在互联互通的问题,只是状况比中国好一些。

上图,展示了一个一个阿尔及利亚用户的网络状况。他接入的是国家电信的服务商,从骨干网接入阿尔及利亚电信有很多线路,最下面的线路意大利电信是最直接的。如果不走意大利电信,那么中间就必须经过很多运营商跳转。在这种情况下,要保证用户有做最快的传输,就要保证传输走意大利电信。这必须依靠覆盖来解决。

如何解决覆盖问题?

首先,部署大量边缘服务器。边缘服务器的地理位置越接近用户越好,二者的线路越接近约好,同一个SP最好。比如中国国内,我们会有大量电信、联通、移动服务器。当我们发现一个接入的用户是电信时,我们会找电信线路,如果是联通的会找联通线路。再看回上一个图,如果遇到阿尔及利亚的用户要怎么办?在现在的服务里面我们就要找一个意大利电信接入,而不是随便找欧洲的机房。必须部署很多边缘服务器才能做到这一点。

其次,要有分配服务。有边缘服务器之后,用户还是无法接入边缘服务器,因为他不知道接哪个。因此,必须有配套算法,根据用户的SP,找到和他最匹配的边缘服务器,来进行接入分配。

2、跨地域问题

我们在全中国有好几十个机房,其中有很多电信的机房,不同的电信用户来使用我们的服务,应该给他哪个电信机房呢?如果把北京电信用户接到广州的电信机房,虽然大多数情况下丢包不会很高,但延时会比较大。为此,我们设计了就近接入算法,使用我们服务的每个用户,都会接入到最靠近他,且线路最匹配的服务器。

当我们就近按SP接入时,遇到了一个新问题:假如一个香港用户,接入的是香港机房,想看北京联通用户的表演,那么这个香港用户怎么看到北京用户的表演呢?我们就需要有一个分布式传输的架构和算法,来把北京的流量传到香港。

3、DNS解析问题

今天无线互联网非常普及,使用无线网时,有一个问题比有线网更严重:DNS解析。用户接入时,第一步是通过域名解析,解析到最近的服务器。但是,做DNS解析时,无线网络的信号会存在污染,导致DNS解析失败。为此,我们优先使用解析,解析不到再用静态IP配置。

4、骨干网故障问题

我们发现在骨干网上,很多默认的骨干网路由经常出问题,同时有一些骨干网部分是不会拥堵的。基于这样的发现,我们做了自己的路由网络。

在默认路由之外,我们会额外部署路由机房。比如,从上海到洛杉矶,假设默认线路到晚上高峰期会比较拥堵,同时我们发现从上海经过广州再经过香港再到洛杉矶,这条线路不会拥堵。那么,我们就会部署这样一条路由线路,然后做自动的适配。

如果骨干网上出故障了,我们通过路由的方式构建Overlay应对。首先,我们的应用会先连接到分配服务,分配服务会给出一批可接入的机房,当接入的机房坏了,就立即切换到下一个可用机房,如果发现还是坏了,则再次接入到分配服务,继续寻找当前可用服务器。

5、蜂拥

蜂拥是实时互动直播里面特别突出的现象,短时间内大量用户进入频道或者使用服务。蜂拥对整个后台的冲击力非常强。大多数的互联网的后台服务器每秒接入大概千的量级,但是对于蜂拥而来的用户,处理量远远不够。这时候就会遇到一个问题,后台处理响应速度越来越慢,很多用户的请求会超时。超时之后就会进入更多的请求,请求就会像滚雪球一样越来越大,导致整个后台系统不能响应,整个系统就会产生雪崩,这叫雪崩效应。

如何防止雪崩效应

1)要把性能上限提高。通常来说我们的性能上限会达到峰值处理能力10倍以上。性能上限提高要做分配服务性能扩展,我们的做法一般是水平扩展,因为垂直扩展比较困难。

2)应用里面做自动的重复请求,它会不断累计请求量,我们要做退避的策略。

3)保证整个接入服务本身的可用性问题,处理方法很简单,多点备份,然后做并发的请求。我们有很多分配的服务器,们的应用接入的时候会同时从几个点请求分配,分配到一批边缘服务器之后,会同时连接几个边缘服务器,哪个先响应就处理哪个。

本文整理自声网Agora.io 1号架构师李伟,在ArchSummit深圳2016 全球架构师峰会 的演讲。

【李伟】

2006年-2008年,在PP live工作的时候研发了PP live(已更名PPTV),当时最高有接近150万人在线。

2008年到2010年,在新浪负责新浪视频的研发,2008年的欧冠直播,40万人在线。

2010年到2013年在YY工作,主要负责YY的架构,最高在线是超过一千万,最大的单人频道达150万左右。

2013年,加入声网,负责声网音视频的系统架构。

时间: 2024-10-11 21:43:59

海量用户实时互动直播架构探索的相关文章

在线直播:支撑海量用户的阿里中间件技术

阿里巴巴集团中间件技术部,是国内为数不多的极具技术挑战性的团队之一,依托于全球规模最大的阿里巴巴电子商务平台所带来的巨大流量和海量数据,对于系统稳定性的苛刻要求,对于产品性能的极致追求,使得团队的工程师有机会去面对一个又一个技术难题,创造一个又一个技术奇迹. 在刚刚过去的"2015双十一网购狂欢节"中,912亿元销售奇迹背后的每一笔交易订单都和中间件技术部的技术小二们息息相关.未来,随着阿里巴巴生态系统的业务不断发展壮大,中间件技术部将会支撑更多的业务系统,碰到更多的技术难题. 直播地

Spark Streaming实时计算海量用户UV

提出需求 实时统计业务系统(web,APP之类)的访问人数,即所谓UV,或者DAU指标. 这个需求怕是流计算最最最常见的需求了. 计算UV的关键点就在于去重,即同一个人访问两次是只计一个UV的.在离线计算中统计UV比较容易想到的方法就是用group或distinct机制来去重.但是在实时计算场景,还用group就不太科学了,一个是全量数据的group是比较费时的,第二个是全量数据的group是很费内存和CPU的.特别是当用户量巨大的时候,还要做到秒级更新就更难了. 总结起来,需求就是:海量用户场

直播体验深度优化方案——连麦互动直播

一.前言 移动直播这把火从2015年一直烧到2016年,毫无疑问直播是当前移动互联网最热门的领域之一,在超大热度的引导下直播领域也吸引了大量的商业资本.在这各大直播应用万花齐放的时刻,也正是直播应用面临的真正风口.站在这个风口上,直播应用只把握好风向标,推出具备高用户粘性的差异化功能,才能在这个不断推陈出新的时代站稳脚跟,获得不可动摇的地位. (移动直播火爆) 当前国内大多数的直播应用,使用的是单主播模式,主播与观众仅仅使用文字.点赞.礼物等方式进行互动.在主播直播时,观众如果能够与其进行实时的

支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃用户,系统日传输tweet更多达4亿条,并已完成了以服务为核心的系统架构蜕变. Twitter如今在世界范围内已拥有1.5亿的活跃用户,为了给用户生成timeline(时间轴)需支撑30万QPS,其firehose每秒同样生成22MB数据.整个系统每天传输tweet 4亿条,并且只需要5分钟就可以让一条twe

[转载]浅析海量用户的分布式系统设计

我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ拉.微信拉.淘宝拉.那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是想从最基本的地方开始,探寻服务器端系统技术的基础概念. 承载量是分布式系统存在的原因 当一个互联网业务获得大众欢迎的时候,最显著碰到的技术问题,就是服务器非常繁忙.当每天有1000万个用户访问你的网站时,无论你使用什么样的服务器硬件,都不可能只用一台机器就承载的了.因此,在互联网程序员解决服务器端问

浅析海量用户的分布式系统设计

我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ拉.微信拉.淘宝拉.那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是想从最基本的地方开始,探寻服务器端系统技术的基础概念. 承载量是分布式系统存在的原因 当一个互联网业务获得大众欢迎的时候,最显著碰到的技术问题,就是服务器非常繁忙.当每天有1000万个用户访问你的网站时,无论你使用什么样的服务器硬件,都不可能只用一台机器就承载的了.因此,在互联网程序员解决服务器端问

从Html5直播到互动直播,看直播协议的选择

目前,国内主流的直播协议有HLS.RTMP.HTTP FLV,适用于不同的直播场景. 一.HLS.RTMP与HTTP FLV 1.HLS HLS 全称是 HTTP Live Streaming, 是一个由 Apple 公司实现的基于 HTTP 的媒体流传输协议. 它跟 DASH 协议的原理非常类似. 通过将整条流切割成一个小的可以通过 HTTP 下载的媒体文件, 然后提供一个配套的媒体列 表文件, 提供给客户端, 让客户端顺序地拉取这些媒体文件播放, 来实现看上去是在播放一条流的效果. △HLS

互动直播系统源码,直播系统依托于IM技术

互动直播中最常见的互动有聊天室(弹幕).礼物.点赞.打赏等,互动系统涉及消息的互动性和实时性,在技术实现上大多是使用IM的功能来实现的.对于在线人数比较多的房间,弹幕消息量是非常大,主播与用户其实都看不过来,为了缓解服务器压力,在产品策略需要做一些必需的优化. 1.直播系统源码聊天室互动直播中的弹幕互动是主播和用户互动的 主要方式,实际上就是IM中的聊天室功能.聊天室和群聊功能类似,但聊天室的消息是不需要分发给不在线的用户的,历史消息也不需要查看,用户只有进入聊天室后才能查看聊天消息和群成员信息

互动直播与激进直播的区别是什么

2016年,互动直播的大潮席卷了整个互联网,同时更对寓公等传统播出机构业务造成了巨大攻打,一如当年web对纸媒的打击.下面小编就为大家讲解一下互动直播与激进直播的区别是什么?互动直播的大热,一是经纬度的参加互动(技术及机制),二是普遍新颖的内容(高频及长尾).对照于激进的电视直播而言,它有如下几大分辨:海量频道:对照保守的几个或者数十个播出频道,互动直播的播出频道要超出跨越几集子目级,要能撑持至少上千的播出频道,映客等挪动端互动直播也曾切近亲近上万个主播同时在线.互联网推流:对照激进播出的拘泥书