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

author author     2022-09-16     632

关键词:

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

直播互动平台的特点

融云于 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 年就职于移动飞信团队,历任高级技术经理,架构师,一直关注大规模高并发系统设计和研究。

技术分享

本文出自 “雪夜凋零” 博客,请务必保留此出处http://wangxy.blog.51cto.com/12562290/1958872

美女直播的网页flash推流进行网络高清直播

全民都在直播;每个人都可以通过直播平台分享出去让更多的看到,关注到。尤其目前美女直播秀场的应用,可以说是热火朝天。很多平台都在进行美女秀场直播,打出的口号都各有千秋,又都万变不离其宗。那么看下主流的直... 查看详情

美女直播的网页flash推流进行网络高清直播

全民都在直播;每个人都可以通过直播平台分享出去让更多的看到,关注到。尤其目前美女直播秀场的应用,可以说是热火朝天。很多平台都在进行美女秀场直播,打出的口号都各有千秋,又都万变不离其宗。那么看下主流的直... 查看详情

美女直播的网页flash推流进行网络高清直播

全民都在直播;每个人都可以通过直播平台分享出去让更多的看到,关注到。尤其目前美女直播秀场的应用,可以说是热火朝天。很多平台都在进行美女秀场直播,打出的口号都各有千秋,又都万变不离其宗。那么看下主流的直... 查看详情

ab单,拍a发b哪个礼品代发平台好?

...本高。挑选一家靠谱的礼品代发平台就成了最佳选择。拿如何挑选一个优选平台呢?下面是您必须认真考虑的几点 1、礼品的选择礼品要质优价廉有实用价值,然后选择多。卖家选取的礼品B,一定要是买家普遍喜欢和实用的... 查看详情

“315”曝光:带货直播间水军泛滥,该如何应对?

2023年“央视315晚会”曝光了一些网络平台明目张胆地售卖直播水军,人气、播放量、点赞、评论等等,均可24小时自助下单,达成烘托直播间气氛的目的。根据报道,某公司推出额云控系统,一台手机,可同时操控200到20000台手... 查看详情

如何在信使平台直播?

】如何在信使平台直播?【英文标题】:Howtobroadcastinmessengerplatform?【发布时间】:2016-11-0604:46:52【问题描述】:有没有办法向将机器人添加到联系人列表的许多(或所有)用户广播消息?或者我需要为每个用户使用https://graph.fac... 查看详情

互动直播与激进直播的区别是什么

2016年,互动直播的大潮席卷了整个互联网,同时更对寓公等传统播出机构业务造成了巨大攻打,一如当年web对纸媒的打击。下面小编就为大家讲解一下互动直播与激进直播的区别是什么?互动直播的大热,一是经纬度的参加互... 查看详情

消息队列rocketmq应对双十一流量洪峰的“六大武器”

简介:消息队列RocketMQ是如何帮助各企业交易系统扛住瞬间千万级TPS、万亿级流量洪峰的冲击,并保持各个应用之间的消息通畅的呢?下文将为您介绍消息队列RocketMQ应对双十一流量洪峰的“六大武器”。作者:不... 查看详情

大厂二面:应对千亿级高并发场景,mysql如何分库分表?

大厂二面:应对千亿级高并发场景,MySQL如何分库分表?你回答得出来吗?前两天看到字节一个老哥写的帖子,提到高阶开发者必须掌握的技能,其中他明确提出了“精通MySQL”。为啥MySQL对开发人员如此重... 查看详情

如何基于zegosdk实现web基本消息收发

即时通讯(InstantMessaging)是一种基于互联网的即时交流消息的业务。实时聊天交互功能是市面上主流APP的重要功能之一,人们所熟悉的就是微信,QQ的聊天消息系统,IM看似简单,技术开发绝非易事,海量并发,超低延时,消息... 查看详情

物联网平台rabbitmq实际应用rabbitmq的使用场景?消息队列产生严重消息堆积怎么处理?

...itMQ的使用场景消息队列产生严重消息堆积怎么处理?如何应对严重消息堆积呢?例如有订单消息丢了,那就需要找出哪些订单消息丢了,然后重新发到队列。快速处理海量积压消息具体问题应用场景:因硬件... 查看详情

在线直播:支撑海量用户的阿里中间件技术

    阿里巴巴集团中间件技术部,是国内为数不多的极具技术挑战性的团队之一,依托于全球规模最大的阿里巴巴电子商务平台所带来的巨大流量和海量数据,对于系统稳定性的苛刻要求,对于产品性能的极致追求... 查看详情

重磅消息:网易视频云互动直播公测通道正式启动

...内,而网易视频云互动直播的延时低至200ms,又是如何做到的呢?  网易云技术专家吴桐介绍到,传统的互动直播在主播端将主播的声音和观众的声音做混音,并将主播与观众的画面做视 查看详情

公众微信平台ppt如何发

公众平台不能直接发布ppt文件,可以将ppt文件逐页保存为图片,然后按顺序上传插入公众平台图文消息中,还可以用第三方平台,比如易企秀,以下步骤可以在电脑或者手机上操作,步骤是一样的。1.百度搜索易企秀。2.打开网... 查看详情

小程序如何集成即构im实现即时通讯发消息聊天

之前的文章已经介绍了如何实现Web端的即时通讯IM,为了让大家全面的体验通信互动的快乐。本文介绍如何使用ZIMSDK快速实现实现小程序端的基本的消息收发功能,在微信中实现一个mini版微信,也就是常见的聊天功能。之前的文... 查看详情

财路网每日原创推送:终于按捺不住,腾讯也要上交易所发币?

...区块链电子竞技娱乐平台SLIVER.tv合作,创建一个电子竞技直播频道。据财路网记者查阅相关资料显示,该频道还发行了自己的代币Theta,而且还在众多知名交易所上市交易了,这是不是意味着腾讯在变相上交易所发币呢?与区块... 查看详情

微信公众平台的模板消息如何发送?

不是问如何申请,是如何发送。需要SDK?微信公众平台的图文消息是这样发的:1、先在左侧栏目管理栏目下点击素材管理项,然后在中间编辑区选择“单图文消息”或“多图文消息”进入编辑界面。(单图文消息适合一条消息... 查看详情

Netty:如何限制每秒 websocket 通道消息?

】Netty:如何限制每秒websocket通道消息?【英文标题】:Netty:Howtolimitwebsocketchannelmessagespersecond?【发布时间】:2018-04-0211:34:01【问题描述】:我需要限制netty服务器每秒在websocket通道上接收的消息。找不到任何想法如何做到这一点... 查看详情