直播平台的高并发架构设计3-方案

来源:互联网 发布:淘宝礼服店推荐知乎 编辑:程序博客网 时间:2024/05/17 21:44

直播系统架构

这个是我们这边的系统架构图。最下层是依托金山的云服务,因为我们已经有了很好的平台,提供了我们计算资源,提供了存储,提供了很多自建的节点,当然还不够多,我们还是个融合CDN,然后提供了数据分析的能力。我们依托它做了橙色的这一层,就是我们自己的核心,流媒体直播,然后围绕这个核心我们再做的回看点播、在线转码、鉴权、内容审核。

为什么要做回看点播?因为这不是一个短视频录播的项目,而是一个直播,直播就决定它的并发不会很高,内容不会很多,热点比较少。如果你不回看的话,用户很难维持它的日活,很难维护用户黏度,所以用户一定会要求做回看的。

为什么要做在线转码?推流端其实做了很多把更好的画质想尽办法传上来的工作,投了很多人力来做。传上来之后,观看也在移动端,它不一定看得了。如果他看不了怎么办?我们就需要在线转,在线转码其实承担的更多更重要的事情。

鉴权,用户都不想被盗链,尤其是推流的时候,如果我不鉴权,谁都可以来推,推个法lun功怎么办?这是必须要有的。内容审核,现在我们没有办法帮他做到自动审核,技术还不够。现在做到的是截图,按用户指定的时间定期截图,这样的话,用户就可以请一些外包来看是不是有敏感内容,是不是要下线,这个对于现在这种三四秒延迟的直播来说非常重要。你做不到的话,没准政策因素你就做不下去了。

数据分析一部分是依托金山已有的,一部分是我们自己做的,因为我们延迟性,时效性要求更高。客户会经常大半夜突然提出一个主播看起来特别卡,问你为什么,要是像以前那种方式,一个小时生成报表,然后出体验图,告诉他为什么卡了,客户可没有这个耐心。

我们现在基本能做到5秒间隔就出之前的各种问题定位,这个定位包括从源站收集的数据画的曲线。还有从端上,如果端上用户允许的话,推流和拉流端我们都会有上报数据,几个曲线一拟合,我们就知道问题出在哪里。所以现在不止是RD可以来查这个问题,我们很多售前都在承担着帮用户出这个图的工作。

业务流程图

这个是介绍业务具体的流程图,这个流程图并没有什么特别,只是一般的流媒体的数据走向、各种请求。但是其中有一些坑我可以跟大家重点说一下,首先看一下直播发起流程,这肯定是由应用向自己的服务端去请求一个推流地址,这个推流地址他就用来向我们的流媒体服务器推,然后我们给它鉴权。

鉴权之后,它可以在参数里选择是不是要录像。如果需要录像截图,或者需要HLS的分发,我们都可以帮他做,做完之后存到我们的存储里,这也是后面会提到的,我们各个业务之间在做隔离、分不同的优先级,这种后端的多媒体的处理尽量都会依赖别的服务,然后就是正常的结束流程。

这个是实际中遇到的一个问题,现在做流媒体,用户推流,他想知道这个流结没结束,一般互联网公司做云服务都怎么做?都是给回调,如果这个推流结束了,我来回调业务方,让业务方知道我结束了,你可以做你的逻辑了。

但实际操作中我们遇到了问题,就是业务方的服务器没那么可靠,我们可能过去时间特别久,有延时,有丢,或者他们的服务稳定性我们也确认不了,这其实就是一个双方的耦合了。而且它的服务器,由于是我们来调,它的鉴权功能没有办法做得很复杂,他自己的服务器也存在安全漏洞。如果有人来攻击他的话,他的整个业务流程的状态全是乱的。

在试了几家客户之后,我们就改成另外一种方式,也是大家普遍都接受的,就是由APP和自己的Server发心跳,如果APP的网络不异常的话,它自己结束它的Server肯定是知道的。如果异常的话心跳断了,他也会判断出是结束了的。而且我们这边源站服务也会保证,你5秒钟没有数据就一定是结束的了,我们会把你的流给踢掉,这样就能达到用户的业务状态也是稳定的,我们的流媒体服务也是稳定的,而且耦合也会比较少。

这是我们实际遇到的一个坑,这个其实不难,只是看现在普遍云服务提供商还都是在用回掉的方式,所以我特别提一下另外还有一种可选的方式,效果更好。

播放的流程,播放器会先向他自己的服务请求播放地址,然后来我们这拉流,可以是鉴权也可以不鉴权,取决于它的业务形态。如果拉流失败,我们有一些定制化的操作,他用RTMP来拉流的话,我们会告诉他具体是什么错,包括鉴权失效,鉴权参数错误,还是这个流有问题,我们都会在状态告诉他的。这是之前用户提到的需求,说是播放需要知道哪里出了问题,所以我们尽量把状态码都特别详细的返回给用户。包括我们原站也有查询接口,如果他需要那种统一查询也可以来查。

0 0
原创粉丝点击