分布式直播系统(七)【10分钟掌握高并发高可用直播集群架构】

转载请注明出处:https://blog.youkuaiyun.com/impingo
项目地址:https://github.com/im-pingo/pingos

第一、搞清几个重点关键词

之前的文章里已经介绍过怎么实现两台或者多台服务器之间推拉流。

分布式直播系统(四)【nginx-rtmp流媒体直播服务器单集群实现方式】

  • 回源:服务器A向服务器B拉流,这个操作称作回源。
  • 转推:服务器A将流主动发送给服务器B,将服务器A的操作称作转推。
  • 收流节点:接收推流客户端流的服务器节点。
  • 分发(边缘)节点:为播放端提供数据分发功能的服务器节点。
  • 核心节点:拥有整套直播系统里全量的流。

简单的节点层级结构如图

转推
转推
转推
回源拉流
回源拉流
回源拉流
收流节点1
核心节点
收流节点2
收流节点3
边缘节点1
边缘节点2
边缘节点3

第二、核心节点

解决用户处在不同网络环境的问题

首先,我们需要达成一个共识,那就是观众和主播(或者其他推流硬件)分布在各个省市,并且使用的是不同运营商的网络。
其次,我们需要认清一个事实,那就是电信网络用户如果访问联通网络下的服务器,其效果是极其不稳定的。同理跨运营商访问服务器是件极其不靠谱的方案。
为了给各个运营商环境下的用户提供稳定的网络服务,我们有两个解决方案:
第一、将服务器部署在BGP机房,用户推拉流操作都向BGP机房的服务器发起连接,这种方式带宽价格昂贵,只要脑子没坑大概率是不会采用这种方案的。
第二、在每个运营商网络下分别部署边缘服务器,将核心服务器部署在BGP机房,用户推送上来的流通过收流节点转推给BGP机房的核心服务器。观众请求播放的时候从各自网络环境下的边缘节点拉流,边缘节点向核心服务器回源拉流。

转推
转推
转推
回源拉流
回源拉流
回源拉流
收流节点1电信机房
'核心节点' BGP机房
收流节点2联通机房
收流节点3移动机房
边缘节点1电信机房
边缘节点2联通机房
边缘节点3移动机房

多个核心

多个核心是为了解决:
1、其中一个核心集群崩溃的异常情况。
2、不同地域大区之间距离太远的情况。

核心之间的关系图如下。

转推
回源拉流
本核心没流则向其他核心拉流
本核心没流则向其他核心拉流
回源拉流备线
回源拉流
回源拉流备线
收流节点1
核心节点1
核心1的边缘节点
核心节点2
核心2的边缘节点

收流节点

收流节点分散部署在各个运营商网络,主播选择就近节点的一台运营商网络下的收流节点并向其推流,收流节点将收到的流推送给核心节点。
需要注意的是,有偏远地区的主播距离核心节点较远,只通过收流节点转推到核心节点可能会出现大概率卡顿。这时候需要再加一级转发进行接力。

推流
转推
转推
转推
转推
回源拉流
回源拉流
回源拉流
偏远地区主播
收流中继节点
收流节点1电信机房
'核心节点' BGP机房
收流节点2联通机房
收流节点3移动机房
边缘节点1电信机房
边缘节点2联通机房
边缘节点3移动机房

边缘节点

边缘节点优先向距离自己近的大区核心节点回源,如果就近的核心节点不可用,则向其他核心节点回源。具体架构图参考”多个核心“的架构图。
另外需要特别提醒的是,一般情况下同一个机房内的多台实例只需要选出一台向核心节点回源(分布式直播系统(四)【nginx-rtmp流媒体直播服务器单集群实现方式】其中有介绍这种情况)。

边缘互拉

边缘互拉的概念是指如果两个相邻的边缘集群可以相互拉取流,而不必再向核心回源,这样可以省下一部分BGP带宽,另外由于是就近的节点可以保证网络友好。
这种方案对调度系统要求较高,这里不建议研发能力有限的团队尝试。

对流A回源
对流A回源
对流B回源
对流B回源
播放流A
播放流B
播放流A
播放流B
核心节点
就近边缘节点1
就近边缘节点2
用户播放流A
用户播放流B
用户播放流A
用户播放流B

QQ交流群:697773082

博文每周一周四定期更新,欢迎关注后续更多流媒体技术讨论,也希望更多人加入到我们的交流群里。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值