在 2021 LiveVideoStackCon 音视频技术大会上海站,聚焦 “轻端重云和边缘架构新模式” 专场,阿里云视频云的 RTC 传输专家杨成立(忘篱)带来 “基于边缘云原生的 RTC 服务架构演进” 的主题演讲,与行业伙伴分享视频云在 RTC 服务架构演进之路上的挑战和经验,如下为完整的演讲内容。
后端传输网络是 RTC 系统的核心能力,好比阿里云的 GRTN、声网的 SD-RTN 等。本文介绍了阿里云视频云如何不断改进 RTC 架构,扩展 GRTN 网络,并基于云原生技术得到云的强大能力。算法
你们好,我是杨成立(忘篱),目前在阿里云负责 RTC 的传输网络,以前在蓝汛 CDN 负责直播的传输网络,这十年左右一直在作视频的后端服务,也是开源视频服务器 SRS 的做者,SRS 目前是全球 Top1 的开源视频服务器。后端
后端服务都架构在云上,CDN 的趋势也是边缘云,这是由于云计算成为各类服务的基础设施,固然也包括视频的后端服务。开发者能够便捷的直接使用云厂商的 SDK 和视频云服务,也可使用开源方案在云上构建本身的系统。安全
我正好活跃在视频开源和云服务这两个领域,一直都有朋友询问这两个的差别,借此次机会正好分享下这个话题,但愿经过此次分享,你们能够了解,从一个开源服务器,到能够提供服务的商业系统,到底有哪些路要走。性能优化
由于有些朋友不是作服务器的,我仍是先介绍下 RTC 服务是什么吧。服务器
直播通过这些年的发展,你们都理解须要后端服务,好比 OBS 推流,是不能直接推给播放器的,而是通过 CDN 转发,CDN 就是直播的后端服务了。网络
RTC 是大不相同的,好比 WebRTC 自己设计是通话,通话场景大部分时候都是一对一的对话,因此 WebRTC 设计了多种传输方式,好比直接 P2P、经过 STUN 转发、经过 SFU 或 MCU 转发。架构
若是只是跑 DEMO,那么不用 RTC 服务器,直接 P2P 也是能够跑起来的。真实线上,确定是要通过服务器,如今使用最广的是 SFU 转发。主要缘由以下:并发
各家云厂商都有本身的后端服务,好比阿里云的 GRTN,声网的 SD-RTN 等等。实际上传输网络并不等于传输服务器,而是一个传输的系统,包括调度、路由、协议处理、发布和维护、问题排查、数据分析等等。负载均衡
AliRTC(阿里云 RTC)的传输网络,传输协议使用 GRTN,除了 GRTN (CDN) 的网络,咱们还扩展实现了 GRTN (Tenfold);GRTN (Tenfold) 补充了 BGP 专线、ENS、专有云网络、第三方云支持 K8S 的云网络等,适应多种不一样场景的传输要求。ide
其中 GRTN (Tenfold) 就是基于 SRS 作的,增长了不少能力,有些已经反馈给了 SRS 社区。
下面介绍下 SRS,以及咱们为什么要选择 SRS。
视频服务器的主要问题是:门槛高、领域广、更新快,开源和云服务不一样步。
为何这个问题很重要?
SRS 如何解决这个问题?SRS 的定位是云原生的视频服务器,应对云原生作了大量改造,能够很是方便上云和迁移。
除了云原生的能力,SRS 也是很是高性能的开源服务器。固然性能没有最高只有更高,每一个大版本都须要作性能优化,而后用性能交换功能和用户体验。
特别说明下,这里并非说 Nginx 和 Janus 就作不到 SRS 的并发,只是目前的版本压测出来的数据。性能和行业背景是很是相关的,好比 2012 年大可能是千兆网络时代,因此 Nginx 的性能足够能打满带宽了。而 Janus 同类的服务器差很少都是 Janus 这个量级。SRS 之因此一直重视性能是由于互联网很关注成本,成本必须使用性能交换。
今年是 SRS 第八个年头,去年已经成为开源视频服务器的 Top1,主要仍是由于国内的视频行业发展很快,另外活跃的视频开源服务器比较少。
这里说点八卦,此次疫情给全球经济带来很大影响,也带来了互联网视频的大爆发,好比直播、教育、会议、云游戏、IoT 等等。你们只能在家活动,因此互联网成了你们交流的重要方式,各个开源项目也在 20 年初有很大的增加,好比 Janus。
极可能这是咱们惟一会经历的黑天鹅了,我以前一直有个疑问,就是疫情结束后,是否互联网视频会回到解放前?从 Janus 的增加速度看,半年后增加的速度回落到疫情前了。这也许也说明了,就算是作开源也不能依赖这种事件。
SRS 的快速增加是在 19 年末,这个时间点也是 SRS 支持 WebRTC、SRT 和 GB28181。因此也分不清多少是疫情的拉动,多少是由于 SRS 本身的努力。好消息是 SRS 的增加并无回落,并且是目前增加最快的开源视频服务器项目。持续的增加和全球 Top1,这不是结束,而是一个新的开始。
咱们认为只有公众号订阅的开发者超过 100K,才能有机会提高了整个视频行业开发者的创造力。只有达到 100K 的 Star,才能叫互联网视频的标准开源服务器。只有不断推进新场景的 DEMO 和探索,才能不断拓展视频的边界。
SRS 是一个雄心勃勃的开源项目,十年的 OKR 是个挺大的目标。若是咱们看三十年后,那么有三代新的开发者进入视频行业,而随着视频成为互联网基础设施的一部分,那么这个目标也不算是很大,最大的问题多是在于 SRS 可否活够 30 年吧。
回到今天的主题,从开源 SRS 到商业服务,还须要解决哪些问题。
这些问题,前四个和云原生是有很是紧密的关系。后面几个问题,每一个都是很大的话题,限于时间关系,咱们会在之后给你们分享。
云的发展方向,无论是中心云、边缘云仍是专有云,都是云原生方向。云自己就云里雾里,云原生更加云山雾罩了,咱们能够看看云自己的思考。
能够说,开源项目若是作了云原生的改造和从新设计,具有了云架构的能力,就解决了商业化服务一个大问题。咱们一块儿来看,须要作哪些改造。
长会话:RTC 中最长有 48 小时的会议,甚至更长,直播有时候也是很是长时间推流,好比昨天雷军的视频号直播,折叠小米手机的折叠屏,连续直播折叠三天。这三天直播服务怎么升级?
问题:长会话,最长有 48 小时会议,升级困难。
为什么重要:真正提供服务的线上系统,不是在升级,就是在升级的路上,一天到晚都是升级。是不可能彻底停下来,中断服务,全量升级后再提供服务。长会话意味着必须支持无中断升级,不然就会形成不可用和服务中断的问题,严重影响客户体验。
扩缩容也会受到长会话的影响。业务量增加时,须要增长机器扩容,现有长会话没法迁移到新的机器,扩容只能应对新的流量。业务量下降后,能够缩容下降成本,若是长会话的周期,超过了业务周期,就没法实现缩容。
直播的业务质量,是按百分比计算,好比百分之 N 的卡顿是能够接受的。而在 RTC 中,会议中有一我的不可用,整个会议就没法继续。每一个会议都很重要的,一个会议的重要性,并不必定低于另一百个会议。
现状和将来:开源 SRS 改进了退出逻辑,能够作到等待必定时间后退出。SRS 还作不到无状态升级,由于要作到无状态化须要依赖存储,而开源的 SLA 还不须要那么高。
GRTN (Tenfold) 已经作到无状态化升级,可随时升级(固然会选择业务低峰期升级)。因为能够无状态重启,咱们也顺便解决了 Crash 后恢复的问题,C++ 的程序,就像移动端的 Crash 率同样的,必定会有 Crash。
将来 GRTN (Tenfold) 还会作到状态迁移和 K8S 的滚动升级。
中心、边缘、专有云 SLA 差别大:中心云的网络情况,基础设施的完善度很高,会话的迁移相对比较容易。而边缘和专有云的 SLA 就差不少,不能用一样的机制作迁移。
问题:没有 100% 的 SLA,底层设施必定会出问题,早晚会出问题,宕机、IO Hang、网络不可用;中心、边缘、专有云,SLA 差别大,迁移难。
为什么重要:当底层基础设施出现问题,虽然几率不大,但一旦出现问题,服务就是不可用了。一台服务器不可用时,影响的不只仅是这台服务器的会话,而是这个服务器上的全部会议,一个会议通常会跨多个服务器。
中心云的迁移,可用的基础设施比较完善。边缘云和专有云,网络情况和基础设施可靠性,不如中心云,迁移的难度更大。
现状和将来:SRS 没有支持迁移,开源的 SLA 容忍度高一些,同类开源服务器也没有迁移能力;将来计划使用体验差的重连方案支持迁移。
GRTN (Tenfold) 具有了底层迁移能力,预计今年能够支持中心云迁移。将来须要不断优化迁移能力,支持边缘云和专有云的迁移;还须要考虑计划中的迁移,好比流量再均衡。
端口和 IP 复用:传统 RTC 通常是内网应用,有能够随便使用的 IP,能够分配几万个随机端口,这些在云上有安全隐患,公网 IPv4 地址不能随意用几万个,扩容就很难作。
问题:安全要求只能开固定的端口;企业防火墙只能开特定的端口;不能开必定范围端口,好比 10000 到 20000 端口。
为什么重要:不符合安全规范,没法经过安全审核。多端口更容易被攻击,若是出现安全事故,比一台服务不可用还要严重,这也是为什么 WebRTC 正在作 E2E(端到端)加密的缘由。
有些用户在企业防火墙后面,访问公网时不能访问任意端口,必须收敛到某些 IP 和端口。若是不支持端口复用,就没法在这些企业场景下使用。
端口本质上是一种状态,它是一种对用户的标示,好比 IP+ 端口就能够认为是某个客户端。这也给服务迁移带来问题,须要迁移更多的状态。
现状和将来:云原生的标准作法,是经过 SLB/Service 隐藏服务,流量经过 SLB 转发到真实的 Pod 服务器。SRS 已经支持了这种方式。
线上还有移动端切网问题,会影响 SLB 定位客户端。SRS 目前使用 ICE 的 PingPong 标示客户端,将来和更好的作法是用 QUIC,QUIC 协议自己考虑了会话的标示,在 SLB 层就能够解决问题。
GRTN (Tenfold) 还支持了 TURN 协议的 SLB 转发。将来还须要解决在边缘云中的端口复用问题,和中心云不一样,边缘云多是分运营商的,客户端切网后须要更换 IP 入口。
流多且有关联,还有切网问题:直播的流之间没有关联性,能够在服务器负载高时调度新的会话到其余服务器,而 RTC 流之间有关联性,有时候不能随意调度,致使负载均衡很难作。
问题:流有关联性,服务的会话数不变,负载可能会突增。流的关联性,码率的波动,以及 QoS 算法的动态变化,致使水位评估不许,会话数目不增长时,消耗的 CPU 和带宽都不一样。
为什么重要:水位若是没法精确评估,就只能预留较多资源,保持较低的水位运行,避免水位突增,服务器被打爆。保持较低水位致使总体成本高。
现状和将来:SRS 尚未解决这个问题,正在作 QUIC 级联,将来会考虑给出服务器的水位,但不会作流量调度和负载均衡,这个是系统要作的。
GRTN (Tenfold) 已经支持多级级联,跨区域级联,有粗略的水位评估。正在作精确的水位评估,将来会考虑作流量均衡。
总结来讲,云原生解决的都是脏活累活,并且仍是干不完的脏活累活。云原生往前走了一大步,让基础设施能够不断的标准化发展,应用只要遵照云原生的规范,就能够在多个云上怡然自得。
视频的门槛真的很是很是很是的高,还记得十一年前刚开始接触 Flash 和 FFmpeg,仅仅各类概念和协议,就让人一头雾水。SRS 但愿能让视频的门槛不断下降,保持易用性让开发者少一些焦虑和压力,保持浓密的头发。
但,这不是 RTC 服务的所有挑战。生生不息,填坑不止,后端服务就没有作完的那一天。
「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。