转载请注明出处:https://blog.youkuaiyun.com/impingo
项目地址:https://github.com/im-pingo/pingos
第一、搞清几个重点关键词
之前的文章里已经介绍过怎么实现两台或者多台服务器之间推拉流。
分布式直播系统(四)【nginx-rtmp流媒体直播服务器单集群实现方式】
- 回源:服务器A向服务器B拉流,这个操作称作回源。
- 转推:服务器A将流主动发送给服务器B,将服务器A的操作称作转推。
- 收流节点:接收推流客户端流的服务器节点。
- 分发(边缘)节点:为播放端提供数据分发功能的服务器节点。
- 核心节点:拥有整套直播系统里全量的流。
简单的节点层级结构如图
第二、核心节点
解决用户处在不同网络环境的问题
首先,我们需要达成一个共识,那就是观众和主播(或者其他推流硬件)分布在各个省市,并且使用的是不同运营商的网络。
其次,我们需要认清一个事实,那就是电信网络用户如果访问联通网络下的服务器,其效果是极其不稳定的。同理跨运营商访问服务器是件极其不靠谱的方案。
为了给各个运营商环境下的用户提供稳定的网络服务,我们有两个解决方案:
第一、将服务器部署在BGP机房,用户推拉流操作都向BGP机房的服务器发起连接,这种方式带宽价格昂贵,只要脑子没坑大概率是不会采用这种方案的。
第二、在每个运营商网络下分别部署边缘服务器,将核心服务器部署在BGP机房,用户推送上来的流通过收流节点转推给BGP机房的核心服务器。观众请求播放的时候从各自网络环境下的边缘节点拉流,边缘节点向核心服务器回源拉流。
多个核心
多个核心是为了解决:
1、其中一个核心集群崩溃的异常情况。
2、不同地域大区之间距离太远的情况。
核心之间的关系图如下。
收流节点
收流节点分散部署在各个运营商网络,主播选择就近节点的一台运营商网络下的收流节点并向其推流,收流节点将收到的流推送给核心节点。
需要注意的是,有偏远地区的主播距离核心节点较远,只通过收流节点转推到核心节点可能会出现大概率卡顿。这时候需要再加一级转发进行接力。
边缘节点
边缘节点优先向距离自己近的大区核心节点回源,如果就近的核心节点不可用,则向其他核心节点回源。具体架构图参考”多个核心“的架构图。
另外需要特别提醒的是,一般情况下同一个机房内的多台实例只需要选出一台向核心节点回源(分布式直播系统(四)【nginx-rtmp流媒体直播服务器单集群实现方式】其中有介绍这种情况)。
边缘互拉
边缘互拉的概念是指如果两个相邻的边缘集群可以相互拉取流,而不必再向核心回源,这样可以省下一部分BGP带宽,另外由于是就近的节点可以保证网络友好。
这种方案对调度系统要求较高,这里不建议研发能力有限的团队尝试。
QQ交流群:697773082
博文每周一周四定期更新,欢迎关注后续更多流媒体技术讨论,也希望更多人加入到我们的交流群里。
2692

被折叠的 条评论
为什么被折叠?



