直播弹幕是直播系统的核心功能之一。如何迅速作出一个有很好扩展性的弹幕系统?如何应对业务迅速发展?相信很多工程师/架构师都有自己的想法。
长洲ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!
本文作者美拍架构师王静波经历了直播弹幕系统从无到有,从小到大的过程并对构建弹幕系统的经验进行了总结。
直播弹幕指直播间的用户,礼物,评论,点赞等消息,是直播间交互的重要手段。
美拍直播弹幕系统从 2015 年 11 月到现在,经过了三个阶段的演进,目前能支撑百万用户同时在线。
本文比较好地诠释了根据项目的发展阶段,直播弹幕系统进行平衡演进的过程。这三个阶段分别是快速上线,高可用保障体系建设,长连接演进。
快速上线
消息模型
美拍直播弹幕系统在设计初期的核心要求是:快速上线,并能支撑百万用户同时在线。
基于这两点,我们的策略是前中期使用 HTTP 轮询方案,中后期替换为长连接方案。
因此在业务团队进行 HTTP 方案研发的同时,基础研发团队也紧锣密鼓地开发长连接系统。
直播间消息,相对于 IM 的场景,有如下几个特点:
对于用户来说,在直播间有三个典型的操作:
我们把礼物,评论,用户的数据都当做消息来看待。
经过考虑选择了 Redis 的 sortedset 存储消息,消息模型如下:
因此总的流程是:
不过这里有一个隐藏的并发问题:用户可能丢消息。
如上图所示,某个用户从第 6 号评论开始拉取,同时有两个用户在发表评论,分别是 10,11 号评论。
如果 11 号评论先写入,用户刚好把 6,7,8,9,11 号拉走,用户下次再拉取消息,就从 12 号开始拉取,结果是:用户没有看到 10 号消息。
为了解决这个问题,我们加上了两个机制:
消息模型及并发问题解决后,开发就比较顺畅,系统很快就实现上线,达到了预先设定的目标。
上线后暴露问题的解决
上线后,随着消息量的逐渐增加,系统陆续暴露出三个比较严重的问题,我们一一进行了解决。
问题一:消息串行写入 Redis,如果某个直播间消息量很大,那么消息会堆积在 Kafka 中,消息延迟较大。
解决办法:
因此有四种组合,四个档位,分别是:
问题二:用户轮询***消息,需要进行 Redis 的 ZrangByScore 操作,redis slave 的性能瓶颈较大。
解决办法:
解释:这里本地缓存与平常使用的本地缓存,有一个***区别,就是考虑了成本问题。
如果所有直播间的消息都进行缓存,假设同时有 1000 个直播间,每个直播间 5 种消息类型,本地缓存每隔 1 秒拉取一次数据,40 台前端机,那么对 Redis 的访问 QPS 是 1000 * 5 * 40 = 20 万。
成本太高,因此我们只有大直播间才自动开启本地缓存,小直播间不开启。
问题三:弹幕数据也支持回放,直播结束后,这些数据存放于 Redis 中,在回放时,会与直播的数据竞争 Redis 的 CPU 资源。
解决办法:
解释:回放时,读取数据顺序是: local cache -> Redis -> mysql。localcache 与回放 Redis 都可以只存某个直播某种消息类型的部分数据,有效控制容量;local cache与回放 Redis 使用 sortedset 数据结构,这样整个系统的数据结构都保持一致。
高可用保障
同城双机房部署
双机房分为主机房和从机房,写入都在主机房,读取则由两个从机房分担。从而有效保证单机房故障时,能快速恢复。
丰富的降级手段
全链路的业务监控
高可用保障建设完成后,迎来了 TFBOYS 在美拍的四场直播,这四场直播峰值同时在线人数达到近百万,共 2860 万人次观看,2980 万评论,26.23 亿次点赞,直播期间,系统稳定运行,成功抗住压力。
使用长连接替换短连接轮询方案
长连接整体架构图
详细说明:
长连接消息模型
我们采用了订阅推送模型,下图为基本的介绍:
举例说明,用户 1 订阅了 A 直播,A 直播有新的消息:
如果是大直播间(订阅用户多),那么推送层与连接层的告知/拉取模型,就会自动降级为广播模型。如下图所示:
我们经历了客户端三个版本的迭代,实现了两端(Android 与 iOS)长连接对短连接的替换,因为有灰度和黑白名单的支持,替换非常平稳,用户无感知。
总结与展望
回顾了系统的发展过程,达到了原定的前中期使用轮询,中后期使用长连接的预定目标,实践了原定的平衡演进的原则。
从发展来看,未来计划要做的事情有:
王静波,毕业于西安交通大学,曾任职于网易和新浪微博,微博工作期间负责开放平台业务和技术体系建设。2015 年 9 月加入美图,就职于架构平台部,目前负责部分核心业务和基础设施的研发工作,包括弹幕服务、Feed 服务、任务调度和质量监控体系等。十余年的后端研发经历,拥有丰富的后端研发经验,对于构建高可用、高并发的系统有较多实践经验。欢迎通过 wjb@meitu.com 跟他交流。
网站栏目:支撑百万用户同时在线的高并发直播弹幕系统是如何炼成的?
转载来于:http://www.shufengxianlan.com/qtweb/news30/248080.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联