直播平台的高并发架构设计3.2-分发网络

多集群源站

分发网络是躲在很远的一个地方了,我们当时设计的三个原则就是高并发、高可用、系统解耦,前两个很虚了,只要是做系统都会想怎么高并发,怎么高可用,怎么横向扩展最容易。

我们做了一个多源站,相对于很多公司在做单源站的方式,我们就是为了让用户能更好的触达我们的网络。在各个集群、各个城市做了多源站,现在不光是国内有几个点,在香港和美国我们也各做了一个点。这样怎么能做到横向的扩容和数据与业务中心的隔离,是花了一些心思的。这种方案并不是很难,用一些存储做好同步其实也做到了。

高可用,就像DNS这种,保证服务单点的,高可用都能做到。怎么做到系统解耦,因为传统的CDN只是负责流媒体的分发,我们相对于它的优势就是我们除了做流媒体分发以外,还做了很多多媒体的功能,像截图、录像、转码、多分辨率适配这些东西,这些东西是会影响系统稳定性的。怎么能在这里做到真正的解耦,保证系统稳定是下了很多工夫的。

一些开源服务,也做多分辨率适配,但是它所有的转码调度都是由它的流媒体服务来调起的。包括转码的生命周期也是流媒体服务来控制的,他们都在同级部署。其实这是有很大问题的,多分辨率适配和原画的推送和分发完全不是一个优先级的服务。做系统定级的时候就应该把它们分离开,应该分离在不同的系统来做。

多集群源站工作流

多集群源站就是刚才说到的,尽量用三线机房,或者BPG机房,然后在各个城市南北都布点,尽量的更近的触达用户,让用户推流更容易。同时我们在每个源站都部署了金山云的存储,KS3。

部存储的目的也是为了能够更好的保证用户截图和录像的文件的可靠性,存下来之后我们就不管了,交给KS3,当然KS3多媒体服务也是我们维护的。做转码截图,或者是转分辨率合并一系列操作,是由另外一套系统来做,我们把这些多媒体的服务和源站的服务做了解耦。

在线转码是一个非常耗CPU的业务。一台现在很高端配置的24核机器,如果我想转一些画质比较好的视频,每个视频转三个分辨率,这样我转八路就把它打满了,这是很耗CPU的。如果我转了没人看,这个CPU就在那耗着,而且这个是不适合和源站混部的一个服务。

转码要和数据离的近,在那个源站集群的同一机房,我们会申请一些转码的资源,然后由核心机房来统一调度。我们把调度和具体的功能分离开,根据你这个流推到哪,我们就就近在哪里转码。转码也加了一些实时转码的策略。

为什么要做在线转码?因为推流端已经是尽最大努力把最好的画质、最高的带宽传上来。但是播放端不一定看得了,这样我们就需要把它转出来,而且h.265虽然好,但是有个最大的问题就是在移动端的浏览器上没有办法播。分享出来的必须是h.264,要不然去微信或者是QQ浏览器,你是看不了的。

就是如果我用了很高深的技术手段,把你的h.265的视频推上来了,画质很好。但不在我们端上就看不了,你要想分享的话,我们可以帮你转出一份h.264的来分享。转码是一个高CPU占用的场景,如果我不对CPU做合理的分配的话,很快我的机器资源就会被打满。

我们做了两种策略,一种是有限的机器合理调度。我们的转码系统是个分布式,流水线式的,类似Storm那种系统,但是我们自己做得更适合转码。任务进来之后,我们第一个流程不是转,而是分析,看看你是要转成什么样,你是什么画质,大概会用什么CPU。

如果你的CPU占用很多,我会认为这是一个很难再次被调度的服务,比如你一下进来一个占四个核的转码服务,后来再来一堆占一个核的,肯定是一个核的比较好调度,这个机器资源紧张了,我可以给你调度另外一台机器,或者另外一台机器本来就有些空余,现在剩三个核,我接不了四个核的,我只能先接一个核的,所以我们会按优先级,优先分配高CPU占用的任务,然后才是低CPU占用的任务,在流式系统里,会在预分析之后把不同的任务扔进不同的优先级队列,这个优先级队列就承担着去转不同分辨率视频的职能。

而且在后头如果需要降级容灾的话,也是靠这个优先级队列来解决的,每个用户会有配额。我刚才说24和准24路,其实对于一个云服务公司来说这个量太小了。像我之前在百度做媒体云的时候,每天转码量是有30万,我觉得一个业务做大了,一天30万的转码量是很正常的。

这是考验并发的一个项目,怎么能做到尽量的把CPU打平,因为波峰波谷很明显。像h.265这个场景,我们是做了一套实时转码,有人分享就立刻给你转,让用户一旦开始分享的时候,能达到秒开的作用。但是你不看的时候,我们会有策略尽快帮你停下来。因为这种分享出去的视频并不是一个高并发的业务,有人看我们才给他转是个比较合理的场景。

对于那些低分辨率的现在也在逐步上灰度,不是说所有的你分发了,你发起了,我都给你转,我们会逐渐判断,有人看我们才转,尽量节省系统资源。后面也会考虑存储资源,因为每个机房都会有存储,存储是完全不用CPU的,它保证的是磁盘和IO,和我们完全是资源不复用的,是可以混部的,后面我们会考虑一步一步的混部。

CDN的分发环节,分发环节其实有很多东西是需要播放来配合的,比如说现在推流为了保证画质好,我会增加B帧,加大GOP,这样编码出来的视频质量会变好,代价就是我增加了GOP,那我的延迟就会大,用户一定是从上一个关键帧开始看,这样他看到的可能就是5秒甚至是10秒之前的视频,这个对社交类的移动直播是不可忍受的。既然有这种需求,源站就需要把之前的都保存好。但是怎么能让延时被消化掉,就要靠播放端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用中的信息,Spring Cloud Gateway是一个用于构建API网关的库,它提供了路由、断言和过滤功能。它旨在提供一种简单而有效的方法来路由到API,并为它们提供跨领域的关注点,例如安全性、监视/指标和弹性。 根据引用中的信息,当客户端向Spring Cloud Gateway发出请求时,如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。该处理程序通过特定于请求的过滤器链运行请求。过滤器可以在发送代理请求之前和之后运行逻辑,以实现各种功能。 关于"nextcloud高并发 504 Gateway Time-out"的问题,根据提供的信息,无法直接回答关于Nextcloud高并发的问题。下文提供一个关于如何解决"504 Gateway Time-out"错误的方法: 1. 首先,了解"504 Gateway Time-out"错误是由于网关服务器在一段时间内没有从上游服务器(例如应用程序服务器或其他网关)收到响应而引起的。这可能是由于上游服务器过载或响应超时导致的。 2. 检查上游服务器的性能,确保它可以处理预期的并发请求。如果服务器负载过高,可以考虑增加服务器资源或优化代码以提高性能。 3. 如果问题是由于请求超时引起的,可以考虑调整网关服务器的超时设置。可以增加请求超时时间来容忍较慢的上游服务器响应。 4. 考虑使用负载均衡器来处理高并发请求。负载均衡器可以将请求分发到多个上游服务器,以提高系统的可扩展性和性能。 5. 可以使用监控工具来跟踪和分析网关服务器的性能和响应时间。这有助于及时发现问题并采取相应的措施。 需要注意的是,以上提到的解决方法是一般性的建议,具体的解决方案可能因环境和具体情况而异。因此,建议在实施解决方案之前进行仔细评估和测试。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [springcloud5-服务网关zuul及gateway](https://blog.csdn.net/zhangchen124/article/details/125583909)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值