百万人在线的直播间实时聊天消息分发技术

随着直播类应用的普及,尤其直播带货概念的风靡,大用户量的直播间场景已然常态化。

大用户量直播间中的实时互动是非常频繁的,具体体现在技术上就是各种用户聊天、弹幕、礼物、点赞、禁言、系统通知等实时消息。

如此大量的实时消息,在分发时如何处理才能不至于把服务端搞垮,而到了客户端时也不至于让APP出现疯狂刷屏和卡顿(不至于影响用户体验),这显然需要特殊的技术手段和实现策略才能应对。

其实,直播间中的实时消息分发,在技术上是跟传统的在线聊天室这种概念是一样的,只是传统互联网时代,聊天室同时在线的用户量不会这么大而已,虽然量级不同,但技术模型是完全可以套用的。

我们以一个百万人观看的直播间为例进行分析,看看需要面临哪些技术挑战。

1)在直播中会有一波一波的消息高峰,比如直播中的“刷屏”消息,即大量用户在同一时段发送的海量实时消息,一般情况下此类“刷屏”消息的消息内容基本相同。如果将所有消息全部展示在客户端,则客户端很可能出现卡顿、消息延迟等问题,严重影响用户体验。

2)海量消息的情况下,如果服务端每条消息都长期存储将导致服务缓存使用量激增,使得内存、存储成为性能瓶颈。

3)在另外一些场景下,比如直播间的房间管理员进行操作后的通知消息或者系统通知,一般情况下这类消息是较为重要的,如何优先保障它的到达率。

基于这些挑战,我们的服务需要做一个基于业务场景的优化来应对。

下面将针对主要服务进行简要说明。

1)直播间服务:

主要作用是:缓存直播间的基本信息。包括用户列表、禁言/封禁关系、白名单用户等。

2)消息服务:

主要作用是:缓存本节点需要处理的用户关系信息、消息队列信息等。

具体说是以下两个主要事情。

直播间用户关系同步:

    a)成员主动加入退出时:直播间服务同步至==> 消息服务;

    b)分发消息发现用户已离线时:消息服务同步至==> 直播间服务。

发送消息:

    a)直播间服务经过必要校验通过后将消息广播至消息服务;

    b)直播间服务不缓存消息内容。

将各服务实例均注册到 Zk,数据用于服务间流转时的落点计算。

具体就是:

    a)直播间服务:按照直播间 ID 落点;

    b)消息服务:按照用户 ID 落点。

我们的消息分发流程主要是以下几步:

    1)用户 A 在直播间中发送一条消息,首先由直播间服务处理;

    2)直播间服务将消息同步到各消息服务节点;

    3)消息服务向本节点缓存的所有成员下发通知拉取;

    4)如上图中的“消息服务-1”,将向用户 B 下发通知。

另外,因为消息量过大,我们在在分发的过程中,是具有通知合并机制的,通知合并机制主要提现在上述步骤 3 中。

上述步骤3的通知合并机制原理如下:

    a)将所有成员加入到待通知队列中(如已存在则更新通知消息时间);

    b)下发线程,轮训获取待通知队列;

    c)向队列中用户下发通知拉取。

通过通知合并机制,我们可以可保障下发线程一轮只会向同一用户发送一个通知拉取,即多个消息会合并为一个通知拉取,从面有效提升了服务端性能且降低了客户端与服务端的网络消耗。即时通讯聊天软件app开发可以咨询蔚可云。

我们的消息拉取流程主要是以下几步:

    1)用户 B 收到通知后将向服务端发送拉取消息请求;

    2)该请求将由“消息服务-1”节点处理;

    3)“消息服务-1”将根据客户端传递的最后一条消息时间戳,从消息队列中返回消息列表(原理详见下图 ▼);

    4)用户 B 获取到新的消息。

对于直播间中的用户来说,很多消息其实并没有太多实际意义,比如大量重复的刷屏消息和动态通知等等,为了提升用户体验,这类消息是可以有策略地进行丢弃的(这是跟IM中的实时聊天消息最大的不同,IM中是不允许丢消息的)。

PS:直播间中消息分发的丢弃策略,跟上节中的通知合并机制一起,使得直接间海量消息的稳定、流畅分发得以成为可能。

我们的丢弃策略主要由以下3部分组成:

    1)上行限速控制(丢弃)策略;

    2)下行限速控制(丢弃)策略;

    3)重要消息防丢弃策略。

针对上行的限速控制,我们默认是 200 条/秒,根据业务需要可调整。达到限速后发送的消息将在直播间服务丢弃,不再向各消息服务节点同步。

针对下行的限速控制,即对消息环形队列(见“5.2 消息拉取流程”中的拉取消息详细逻辑图)长度的控制,达到最大值后最“老”的消息将被淘汰丢弃。

每次下发通知拉取后服务端将该用户标记为“拉取中”,用户实际拉取消息后移除该标记。

拉取中标记的作用:例如产生新消息时用户具有拉取中标记,如果距设置标记时间在 2 秒内则不会下发通知(降低客户端压力,丢弃通知未丢弃消息),超过 2 秒则继续下发通知(连续多次通知未拉取则触发用户踢出策略,不在此赘述)。

因此消息是否被丢弃取决于客户端拉取速度(受客户端性能、网络影响),客户端及时拉取消息则没有被丢弃的消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/71585.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨境电商属于外贸吗,Starday跨境电商靠谱吗?

跨境电商属于外贸吗?近年来,随着跨境电商平台以及卖家逐渐进入大众视野,众人对这个新鲜又稍显神秘的事物感到好奇。如何来定义跨境电商?跨境电商作为一种国际贸易新业态,打通了传统的国际贸易与互联网之间的联系&#…

自己写的一个彩票生成号码程序

一个朋友要我帮他写个7色球的生成号码程序,本以为挺简单的,但是的确耗费了我满多时间,而且第一个版本还把算法搞错了 :(,用了两个晚上大概4个小时的时间才完成一个Java Swing版和一个JavaScript版,看来我的基础还真是弱啊,需要多多锻炼 要求:随机生成7个数字,前6个是…

机器人也会“恐吓”人?与Claude的聊天记录,真让人细极思恐

ChatGPT不错啊,花一美刀买了账号,找人搭了梯子,但是最近账号被封了。 最近,朋友推荐了一款媲美ChatGPT,名为“Claude”的AI语音助手应用。作为 ChatGPT的忠实用户,我对新的AI产品总是抱有试一试的好奇心。注册完outlo…

用Kaptcha第三方包做验证码验证

Kaptcha是google提供的一个第三方的包,可以做验证码验证。他是运行原理把验证码存放到session域中,当用到的时候,从session域中取出来,然后与输入的验证码进行对比,就可以了。接下来,来看代码。 首先&…

Kaptcha-验证码使用及扩展

一、第三方验证码API 1、引入 kaptcha-datasource-spring-boot-starter。 引入kaptcha-spring-boot-starter: 基于 SpringBoot Google Kaptcha 验证码 快速启动器的验证码生成包 <dependency><groupId>com.baomidou</groupId><artifactId>kaptcha-s…

python-第三方接口获取验证码

一、图鉴 图片识别-打码平台-打码网站-识别验证码-图鉴网络科技有限公司 需要注册&#xff0c;每次识别成功需要0.002元/次&#xff0c;详细接口文档见上面路径 说明&#xff1a;识别度高&#xff0c;基本不会错&#xff0c;但是收费 通用图片识别接口 接口地址说明Conten…

仿照支付宝等——自动获取短信中的验证码

仿照淘宝支付宝等&#xff0c;自动获取服务器端发来的验证码&#xff0c;实际是监听特定的号码的内容&#xff0c;主要方法如下&#xff1a; 当系统收到短信时&#xff0c;会发出一个action名称为android.provider.Telephony.SMS_RECEIVED的广播Intent&#xff0c;该Intent存放…

利用支付宝短信服务接口 实现手机号 验证码登录Demo

一、首先需要去阿里云注册账号并登录 二、注册阿里云的短信服务 会有100条免费短信 获取自己的AccessKey&#xff08;accessKeyId&#xff0c;accessKeySecret&#xff09; 三、在阿里云短信服务 注册短信的 签名 和 模板 阿里云短信服务参考地址&#xff1a;https://www.aliy…

阿里短信验证码接口和支付宝沙箱支付接口

阿里短信验证码接口和支付宝沙箱支付接口 一、阿里短信验证码接口 1. 申请阿里AccessKey&#xff0c;填写AccessKey ID和AccessKeySecret 2. 申请短信的签名名称和模板 Java的API接口如下&#xff0c;其中模板可根据自己需要进行修改 /**发送短信*/public Integer SendMsg(Stri…

关键词生成原创文章及句子的软件!开发原理分析

朋友们大家好&#xff01;今天又要来给大家上一课吧&#xff0c;关于输入关键词自动生成文章的软件大家觉得网上有没有&#xff1f; 答案&#xff1a;肯定是没有&#xff01; 那么我们今天就给大家带来这么一款软件&#xff0c;我们只需要输入你的关键词就能自动生成原创文章…

写文案,认准这几个APP就够了

想要写出10w的文案&#xff0c;也不是那么容易的&#xff0c;毕竟如果要是能够那么轻易的就写出来的话&#xff0c;也不会有那么多人为了这个文案而感到头秃了。但是你要是说它容易的话&#xff0c;也是有窍门的如果我们按照窍门来进行编写的话&#xff0c;就会相对来说容易一些…

这款“狗屁不通”文章生成器火了,效果确实比GPT 2差太远

整理 | 夕颜 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 【导读】最近&#xff0c;一个名字相当接地气的“狗屁不通”文章生成器&#xff08;BullshitGenerator&#xff09;火了&#xff0c;截至目前 GitHub 上 Star 数已超过 3200&#xff0c;还上了微博热搜…

【IEEE】IEEE论文接收后proof(校样)全流程实例讲解

文章目录 1. proof邮件内容分块解读1.1 获取你的校对文件的步骤1.2 上传修正稿关于什么时候缴费 2、校对稿首页的一般说明 在论文被接受并提交Final Version.pdf文件之后的第4天&#xff0c;收到了proof(校样)的要求。(注意&#xff1a;由于IEEE旗下期刊众多&#xff0c;编辑和…

计算机硕士论文盲审,研究生毕业论文盲审那些事,你造吗?

原标题&#xff1a;研究生毕业论文盲审那些事&#xff0c;你造吗&#xff1f; 首先声明&#xff0c;盲审研究生论文——无论博士或是硕士——纯粹属于扯淡之列&#xff0c;虽然鄙人无权更正&#xff0c;也不敢不从&#xff0c;但根本没有看得起发明该项技术的人&#xff01; 有…

输入正确的账号密码和验证码后 验证码一直报错误的解决办法

这两天写了一个登录的功能页面&#xff0c;用的是ivew&#xff0c;大致样子长这样 输入正确的账号密码以及验证码后死活提示验证码错误&#xff0c;后来查了下才发现需要对发起请求的时候配置 withCredentials: true 我用的是axios&#xff0c;配以了一下就可以了&#xff0c;…

Windows10系统中Foxmail修改密码之后登录一直提示密码错误

情况说明&#xff1a;这是Windows10中自带的针对Foxmail邮箱的特殊毛病 1&#xff1a;右键Foxmail图标&#xff0c;选择属性 2&#xff1a;点击“兼容性” 点击下面“更改所有用户的设置” 3&#xff1a;勾选“以管理员身份运行此程序”

java基于Android快递物流服务系统

&#xff08;1&#xff09;后台管理平台 设计实现物流管理平台&#xff0c;完成对司机、所载货物、出发点、目的地、运输轨迹等的管理。主要研究的内容为前后端框架的选择&#xff0c;对系统信息的展示与管理。 数据展示&#xff1a;管理人员通过不同的筛选条件&#xff0c;查…

一篇文章告诉你,为什么移动数据捕获对运输物流公司很重要?

随着世界走向数字化和智能手机的使用增加&#xff0c;移动数据采集正在成为大多数行业的新常态。航运物流也不例外。从捕获详细的订单和交付信息到跟踪货运和仓库位置&#xff0c;条形码技术用于运输物流世界的每一步。通过智能数据采集&#xff0c;运输和物流公司可以获得更好…

盘点那些参与央行数字货币的公司们

来源:互链脉搏 法定数字货币一直属于央行内部的保密项目&#xff0c;其参与方的身份更是神秘。而12月24日&#xff0c;几则消息的公布&#xff0c;使得央行数字货币参与方的轮廓愈加清晰。 当天&#xff0c;腾讯内部发布了《关于成立数字货币研究项目组&#xff08;虚拟组织&am…

新春特辑 | 大数据专题合辑 报告下载

志在哪里&#xff0c;哪里就有成功&#xff1b;心在哪里&#xff0c;哪里就有风景&#xff1b;爱在哪里&#xff0c;哪里就有感动。在新年来临之际&#xff0c;互联互通社区衷心祝愿您&#xff1a;春节快乐&#xff0c;身体健康&#xff0c;心想事成&#xff01; 1、2020大数据…