卡桑德拉(Cassandra)是Globo直播平台的核心

几年前,我的朋友Juarez Bochi在Planet Cassandra上写了一篇文章 ,分享了我们在实施Globo.com的实时流媒体平台时遇到的挑战,特别是从RedisCassandra的迁移。

对于不熟悉的人来说, Globo.com是Grupo Globo的互联网分支,Grupo Globo是全球5大媒体集团之一,生产电视连续剧,电视小说,电视节目,新闻节目等内容,并将其出口到世界各地。 实时流媒体平台起着至关重要的作用,它使用HTTP实时流媒体(HLS)协议来摄取和流式传输这些内容,从而允许Web,移动和智能电视客户端通过HTTP无缝地向最终用户广播视频。

正如Juarez在他的帖子中指出的那样,我们在2014年世界杯足球赛平台上实现了数字视频录制功能(即DVR),允许用户随时暂停和倒带视频。 由于我们希望快速读取(类似于缓存),因此首先使用Redis作为HLS文件的基础存储机制来实现此解决方案。 当时那是一个很棒的解决方案,因为我们最多只能同时进行几场比赛。 几个月后,随着巴西总统和州长选举的进行,我们需要找到一种方法来扩展这种架构,以便能够直播所有27个州长同时进行的辩论。 那时我们开始考虑其他存储替代方案,专门寻找诸如高可用性和可伸缩性之类的东西,因此我们决定尝试一下Cassandra。
最初,持久保存二进制数据并直接从数据库提供数据有点尴尬,因为我以前看到的大多数实现都使用了文件系统解决方案,但是当我看到带有响应时间,读写的图形时,吓死我了

Screen-Shot-2016-06-20-at-2.36.12-PM

对于我们平台上的每个频道流,我们都有一个编码器,在大多数情况下是Elemental ,它以H.264编码视频信号,以生成六个比特率流,范围从264k到2864k,以进行自适应比特率流传输 。 那么每一个流推到我们的分割( Nginx的RTMP使用实时消息传递协议,或) RTMP ,它创造了HLS视频块和磁盘上的视频播放列表和商店。 接收服务,侦听任何磁盘活动,并将视频块和播放列表存储在Cassandra中,并将生存时间(TTL)设置为DVR持续时间。 因此,如果将流配置为具有1个小时的DVR持续时间,以允许用户倒退到该时间点,则视频块将在此时间段后到期。 所有这些都可以通过API在内部进行配置。

Screen-Shot-2016-06-20-at-2.37.34-PM

我们使用一个名为Clappr的播放器,该播放器是内部开发的,但是现在是开源的。 Clappr支持HLS协议,因此播放实时流变得非常简单,只需向Streaming Service发出GET请求以获取特定广播的播放列表,然后从该播放列表中进行后续GET请求即可,每个请求均针对一个单独的视频块。 Streaming Service在带有LuaJIT的 Nginx服务器上运行 ,对于Cassandra交互,我们使用内部开发的Lua驱动程序

对新架构进行测试

在巴西大选之后,我们非常有信心在我们的两个主要产品Globosat Play( http://globosatplay.com )和Globo Play( http://globoplay.com )上对该新架构进行测试。 这导致在平台上提取并流处理了168个新流,价值88GB的磁盘空间。 两种产品均取得了巨大的成功,每月有超过1400万用户在台式机,手机,平板电脑和智能电视上观看视频。 从以下示例中可以看出,使用Cassandra的决定似乎是我们的正确选择。

Screen-Shot-2016-06-20-at-2.42.38-PM

Screen-Shot-2016-06-20-at-2.42.47-PM

Screen-Shot-2016-06-20-at-2.40.31-PM

为奥运会做准备

现在,随着奥林匹克运动会在几个月内开始,我们需要扩展我们的体系结构,因为我们要增加324个新的流来广播。 这是我们目前工作量的三倍以上! 我们正在另一个物理数据中心上配置另一个Cassandra数据中心,并将其添加到同一集群中。 自动多数据中心复制非常漂亮! 我们还将迁移到Cassandra Enterprise版本,以依靠24/7支持。

展望未来…

Globo Play内置的功能之一就是能够根据用户的地理位置向用户广播由Globo的全国分支机构制作的区域电视节目。 因此,一个地区的用户将观看与其他地区的用户不同的内容。 当前,所有这些数据都存储在单个Cassandra数据中心上,我们希望改进的事情之一是使它们分布在基于不同区域的数据中心上,以及它们之间的某种备份策略。 这个想法是为了改善最终用户的响应时间,更好地分发内容,并避免我们今天遇到的不必要的网络跳跃。 供参考,请参阅本文

Cassandra安装

我们目前正在使用两个Datastax Enterprise 4.8数据中心,每个中心有四个节点。 我们的复制因子为2,而查询一致性级别则定义为1,因为我们的数据集从未更新,从而无需检查其他节点的一致性,从而缩短了响应时间。 每个节点都在RHEL 6.5上运行,并具有24个内核,64GB RAM和1TB SSD。

结论

我相信Globo在选择采用Cassandra作为广播其实时视频内容的基本机制时就钉牢了。 快速,易于扩展,高度可用……做得好! 期待下一次进一步探索它的机会。

翻译自: https://www.javacodegeeks.com/2016/06/cassandra-heart-globos-live-streaming-platform.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值