<返回更多

从0到1实现一个直播弹幕系统

2020-07-28    
加入收藏

前言

直播业务现在特别火爆,也给人们的互动方式带来了很多新的改变,比如刷礼物、弹幕、排行榜等等。面对巨大的流量规模,直播技术的发展也备受关注。作为一个技术爱好者,相信你也会对直播的技术比较感兴趣,于是我去翻了几篇文章,了解了直播的技术方案,发现涉及到的技术细节太多,有部分已经是知识盲区,如音频、视频的编码传输等。

直播中弹幕是一个非常亮眼和重要的功能,相比于秒杀架构,直播弹幕系统也有很多有趣的知识可以挖掘,一起来 YY 下如何设计一个直播弹幕系统,不对的地方还请有经验的大佬指出。

直播弹幕系统

直播弹幕是一个读写 QPS 要求都很高,假设一个直播间有 100w 用户同时在线观看,假设弹幕的提交频率为有 10000条/秒,那么需要每秒同时推送给在线用户的次数为 100w * 10000。由此可见,读请求的吞吐量需要远大于写请求,这点类似于 IM 实时聊天。、

架构设计考虑以下几个场景:

MVP版本

为了不影响读写的性能,采用读写分离架构。

Redis 存储结构选择:SortedSet。

有什么问题?

假如让你从0到1实现一个直播弹幕系统

 

缓存优化

如果能让最新的实时弹幕数据都能命中本地缓存,那性能是最高的,同时大幅度降低了 Redis 的读取压力。所以弹幕读服务可以每秒轮询 Redis 数据,构建本地缓存。

热点问题:

假如让你从0到1实现一个直播弹幕系统

 

热点优化

如何降低本地缓存的使用量?

假如让你从0到1实现一个直播弹幕系统

 

上述方法可以有效地解决问题,但是不能解决流量不均衡的问题。不同直播间分配的机器资源不是拍脑袋定的,需要有理论依据, 可以根据直播间的一些数据指标进行动态分配机器资源。

单元化架构

单元化可以说是解决性能容量以及容灾的杀手锏。实现单元化需要完成有很多重要的工作,如数据同步 DRC、流量调度等,在此不作展开。

假如让你从0到1实现一个直播弹幕系统

 

推荐一篇携程的 DRC 实践: 携程异地多活-MySQL实时双向(多向)复制实践

客户端长连接推送

为了保障客户端消息的推送性能和实时性,长连接基本是必备的,最新的消息可以直接采用长连接实时推送。

假如让你从0到1实现一个直播弹幕系统

 

弹幕回放

增加一组专门用于回放的 Redis 集群,同时增加回放的本地缓存,其余设计与上述方案保持一致。

总结

抱着学习的心态,思考了直播弹幕系统的架构应该如何设计,本文主要讨论了以下几个点:

暂时就 YY 这么多吧,做好一个系统还有需要细节需要考虑:高可用、监控、限流降级、延迟优化等。有什么错误和好的实践经验欢迎留言。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>