每秒高达千万分发,如何应对直播互动平台中海量消息挑战?

由于直播平台的特点,对系统功能设计的可靠性要求更高,同时,如何在直播火热的当下快速实现直播平台的构建,成为很多企业的现实需求。本文主要分享融云直播互动系统的设计与实践,详细介绍礼物、红包等以消息为基础的互动方案设计思路和实践方案并阐述如何结合融云自身技术优势,助力直播企业快速布局市场。

直播互动平台的特点

融云于 2014 年成立时,国内直播平台还未大批兴起,当时我们只提供聊天室服务。2015  
年,源于大量客户对直播互动的需求,融云预见直播平台未来会有很好的前景,于是开始与客户积极交流来挖掘需求,最终我们将聊天室转变为直播互动平台。经历了
2016 年一个完整的直播元年,直播互动系统也正式步入了成熟期。

目前,融云主要做实时通信云平台,就是所谓的 IM 云,提供包含单聊、群聊、客服、推送、公众账号、直播平台等云服务。得益于 2016 年直播市场的异常火热,平台每天可达到对外产生 2200 亿条消息,峰值每小时 450 亿,每秒高达千万的分发。

直播互动平台的特点是什么呢?我们做视频直播的时候,可能有用户需要跟主播以及其他用户发一些文字消息、点赞消息等等进行互动,由于这些消息的存在,把以前单纯的只是受众于视频的应用这种视频直播,变成了可以进行互动的平台。

用户在平台发消息进行互动,这个互动场景和聊天室类似,就是用户加入聊天室,可收到别人的消息,同时也可发送消息,用户下线时消息不再进行推送,这个场景实际上可以满足简单的直播互动。

相较其他 IM 来讲,没有离线消息存储,也没有离线消息 Push,在业务形态来讲,聊天室比较简单一些。

如下是直播互动平台的主要特性:

  • 直播互动平台的用户量实际是无上限的,因为不可能去限制一个主播加入观众的成员数量。
  • 通过把消息进行分级控制的方式来保证礼物、红包等消息传输的可靠性。
  • 瞬时消息吞吐量大,融云某个聊天室曾经一秒钟产生过近千万的消息。
  • 针对伸缩及稳定性方面的高要求。

消息平台的逻辑设计及设计原理

消息是直播互动系统最重要的元素,消息处理做的好不好会直接影响用户的体验。融云的消息平台逻辑设计是怎样的呢?

如上图,我用一张时序图针对这个问题进行了解答。A 客户端是发消息方,服务端是融云整个后端平台,B 客户端是接收消息方。

首先,客户端向服务端发送消息,服务端接收消息先进行消息验证,消息验证里面包含了高危词、敏感词的过滤,反垃圾系统对消息进行反垃圾的过滤及权限验证。

当消息通过之后,对消息优先进行存储,之后会给 A 客户端返回应答,告知消息已经发送成功,这时服务端会遍历成员分发通知。

值得注意的是,现在还没有向客户端发送消息实体,当接收客户端接收消息通知时,会从自己本地存储里面拿到当前直播间里面最新的消息版本号。

同时向服务器发起同步请求,服务器获取客户提交的版本号之后,会以这个版本号为起点,到最新版本号把所有消息全部拿回来返回给客户端,客户端收到这个消息进行消息展示以及存储这个最新版本号。

整个通信流程,版本号获取方式,跟常用版本控制软件比较类似。之所以把流程变得这么复杂,在发送完通知之后再同步消息,主要原因如下:

  • 通知的推送重试可以依赖 TCP 的重试,无须逻辑保障。
  • 服务器端存储的消息顺序与到达的客户端顺序一致。
  • 当消息密集时可以将多条消息进行合并。
  • 可以控制下发的消息条数。
  • 以存储分级实现消息分级。
  • 不以消息数量衡量服务器规模,以在线用户数量做为考量。

消息平台在服务端实现细节及最佳应用实践

直播消息系统在服务端的实现细节,主要从数据预处理、消息分级、消息存储和消息分发队列四方面进行介绍,但在实际服务开发过程中,还有很多优化。

数据预处理

当服务端接收消息之后,优先对数据进行序列化以及存储,序列化消息和要下发的客户端数据要保持一致,通过这种预处理的方式,CPU 的使用率在当前基础上降低了  30%。

消息分级存储

根据消息类型按照中、高、低序列进行分级存储。

Skiplist 转化为环形队列存储

每条消息有唯一且递增版本号,消息按照版本号顺序存储。这样的数据在内存存储情况下,跳表是一种非常合适的数据结构。

但是,跳表时间复杂度和空间复杂度比较大,同时往跳表中插入数据时使用的锁范围非常大,会对服务器产生一些额外的开销。之后,由跳表演进成一种类似环形队列的数据结构,会对服务器性能开销提升很多。

Map 与队列构建复合数据结构,降低无意义消费

服务端下发通知,对于通知来讲在这一时刻无论有多少条消息,每个用户只有一条通知,通过 Map 与队列构建这样的复合结构进行存储。

队列里面存储是数据的指针,Map 存储用于下发的通知实体,Map 使用的 key 为用户标识,这样可以降低无意义的消费。

融云线上直播互动平台的整体架构

直播互动平台的 2.1 架构

如上图,是融云线上 2.1 架构图,可分为连接层、业务层和存储层等,连接层和业务层构建成整个大的集群,然后进行服务。

连接层主要是负责客户端与服务器保持长连接,同时将客户端的协议与内部服务的协议进行相互转化。

业务层负责 IM 相关业务处理,采用的是微服务架构,线上服务有 40 多个类型,但对于直播互动平台包含如下三项服务:

  • 上行控制服务。主要目的是用于处理接收的上行客户端的消息,进行敏感词和高危词的过滤。这个服务的负载方式采用的是随机分配。
  • 直播服务。负责维护直播间的成员关系和负责接收上行控制服务给它的消息,上行控制服务会先期进行消息抛弃,抛弃到直播服务可以接收的范围之内,然后将消息下发到直播服务,直播服务再广播到直播消息服务。
  • 直播消息服务。负责给用户进行分发通知,是以用户 ID 进行一致的哈希方式进行负载。每个服务节点包含部分用户关系。

整个直播消息服务构建了一个整体成员关系,等同于直播消息服务上的一个节点。这层除分发通知外,还负责客户端同步拉取获取的消息。

存储层主要职责是用来存储各种消息,数据等,含多个数据库。

线上 2.1 架构和之前的架构相比,降低了直播服务压力和上行总量的控制,但面临的问题是需要更高的网络质量要求。

直播互动平台的网络优化

如下图,是链路架构 1.0:

链路架构 1.0,线上进行网络加速主要是加速海外业务。融云选购了第三方海外专线链路,涉及全球五个国家,覆盖欧洲、美洲以及中东、日本等等。

实现国际链路优化,就近区域接入的同时,又出现专线的流量过大,成本过高,跨国消息延时等问题。

如下图,是链路架构 2.0:

链路架构 2.0 采用模拟 CDN 模式进行数据分发,专线内只跑上行消息和广播消息的方式。

融云提供的是直播互动平台,是一个基础的 PAAS 服务,本身并不会去做直接面对用户的直播  APP。未来,它也会不停地向前探索,如降低专线的依赖,数据中心进行链路选择等。

以上内容根据李淼老师在 WOTA2017 “高性能直播系统架构”专场的演讲内容整理。

负责融云后端服务平台的设计和架构工作,2007-2013 年就职于移动飞信团队,历任高级技术经理,架构师,一直关注大规模高并发系统设计和研究。

时间: 2024-08-23 22:55:20

每秒高达千万分发,如何应对直播互动平台中海量消息挑战?的相关文章

转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)

转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的技术挑战 作者 陈康贤 发布于 2016年1月28日 | 2 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件分享 稍后阅读 我的阅读清单 前言:一直以来双十一都是以交易为重心,今年当然也是如此,但是这并不妨碍万能的淘宝将双十一打造的让用户更欢乐.体验更丰富.玩法更多样.内容更有趣

短视频直播系统平台是如何实现盈利的?

短视频即短片视频,是一种互联网内容传播方式,一般是在互联网新媒体上传播的时长在5分钟以内的视频传播内容:随着移动终端普及和网络的提速,短平快的大流量传播内容逐渐获得各大平台.粉丝和资本的青睐.那么他们是如何进行盈利的呢? 主要是靠以下五种模式获得平台收益: 1. 打赏主播,平台抽成的盈利方式.这是最常用也是最直接的盈利方式,盈利是由主播和平台按照一定的百分比来分成的.你应该也不陌生,经常看到直播主持人在直播时说"感谢XX的礼物~",这就是观众在送直播礼物,而这些礼物是需要付费充值的.观

LMAX Disrutpor—多生产者多消费者中,消息复制分发的高性能实现

解决的问题 当我们有多个消息的生产者线程,一个消费者线程时,他们之间如何进行高并发.线程安全的协调? 很简单,用一个队列. 当我们有多个消息的生产者线程,多个消费者线程,并且每一条消息需要被所有的消费者都消费一次(这就不是一般队列,只消费一次的语义了),该怎么做? 这时仍然需要一个队列.但是: 1. 每个消费者需要自己维护一个指针,知道自己消费了队列中多少数据.这样同一条消息,可以被多个人独立消费. 2. 队列需要一个全局指针,指向最后一条被所有生产者加入的消息.消费者在消费数据时,不能消费到这

哪里有专业的不间断、在线、互动直播教学平台?

QSkyABC是一个不间断互动直播教学平台.与传统的单向直播教学模式不同的是,QSkyABC集互动教材(iCourse).优秀老师开展互动授课直播(Live-V)及学生不间断互动课程直播学习(Live-C)三种互动教学形式为一体,更好地满足师生的实时互动教学需求,大大降低学校及机构在线教育的实施成本,提升学校.教育机构的教学效益. 公司创始人辛思谦先生拥有数十年北美生活和创业的经验.基于对技术的前瞻性和对互联网教育的无限热情,他带领在线教育经验丰富的产品团队和先进的互联网技术团队成功开发了QSk

一对一直播软件开发中,如何进行推流?

推流环节对直播链路的影响非常大,如果推流网络不稳定,就算前期在音视频处理.编码和封装上做何种优化,用户体验都会很糟糕.因此接下来,小编就以一对一直播软件开发为例,为大家讲述下推流过程中涉及的协议.实现方案等. 更多Android高级面试合集放在github上面了(更多面试文档,项目下载,源码)https://github.com/xiangjiana/androids需要更多项目下载,源码的小伙伴可以点击关于我 联系我获取 一.推流的定义 推流实际上就是在把封装好的视频和音频传输到服务器的过程.

从用户角度上,开发直播功能平台时应该注意的功能

自主开发直播平台涉及到的内容比较多,像音视频编解码.流媒体传输.美颜功能,以及各类接口问题等.如果没有专业的技术支撑,实现起来会比较难,那么也可以找一些现有的解决方案,比如拓幻科技,就是专业为企业级用户搭建直播平台,提供完整功能服务的厂商.如果自行搭建,其中应用层功能的实现是必不可少的,那么从用户角度来说,直播开发,哪些平台功能是必不可少的呢?用户登录页面广告引导页:绝大多数APP应用具备的基础功能,可以展示图片和视频形式的广告内容.注册登录:主要包括手机验证码注册登录和一系列三方登录方式,需要

直播系统开发中互动功能必不可少

现在直播互动已经成为大家比较熟知的交流方式,可以通过直播沟通.学习.宣传.商业等,粉丝经济也是很多人加入主播的一个重要原因,展示自己的魅力,技能,知识,让更多的人了解自己.今天,拓幻科技告诉你,如何搭建一套比较完整的直播体系,直播系统开发中都有哪些直播互动功能? 弹幕直播里面基础的功能,可以带动房间的活跃,有的大主播的房间更是可以看到满屏的弹幕,非常震撼.弹幕是采用 go 写的,可以支持非常高的并发和请求下发,采用 websocket 下发消息,写消息是写到 kafka 集群中,下发消息可以根据

多人语音直播系统开发中聊天室功能实现方案?

"直播+"不仅是视频.直播平台的尝试方向,也成为众多音乐平台的创新业务,而语音直播正是其中一种尝试.语音直播的用户更偏向年轻化,多为追求新鲜感的90后群体,他们有自己的行为处事方式,喜欢把孤独和无聊的时间用声音的方式宣泄.对于喜爱声音的这类群体来说,语音直播系统开发既保护了他们的隐私又让他们倍感亲切.那么从技术层面讲,多人语音直播系统开发中聊天室的功能实现需要特别注意哪些呢?一.语音直播系统开发的优势是什么?想必有人会问语音直播和传统的电台有什么不同呢?语音直播也有着自己的优势主要有以

如果时间停止一秒,Google会如何应对?

根据 Technie News 的报导,Google 正在通过在其系统时钟中增加非常少的时间增量来对抗今年会发生的网络中断事件.你一定会觉得非常奇怪,为什么今年会发生这种事情,而且为什么只要调整系统时钟就能解决这个问题. Google 之所以这样做,是因为 2015 年比以往年份更长一点:国际地球自转服务(International Earth Rotation Service,IERS)的科学家们已经公布了"闰秒"将被添加在 6 月 30 日这一天,以补偿地球自转速度减慢. 也就是