基于大规模边缘计算的千万级聊天室技术实践

bdfd00d8d0528d64d949cfc3271d7c9d.gif

在技术的迭代更新下,面对大型、超大型的直播场景,大规模边缘聊天室成为新热潮。

作者 | 张超      责编 | 王子彧

出品 | CSDN(ID:CSDNnews)

当前直播成为一种流行趋势,带货直播,网红带货,明星在线演唱会等,进一步使得直播聊天室变成了一个当前必备的能力,面向大型,超大型的直播场景,技术上也在不断的进行迭代更新。

b73760c75d1748dfd7ae899a09361968.png

大规模边缘聊天室如何工作?

c4be09144b4fb8088693f2ad0f017495.png

大型边缘聊天室的工作过程非常的简单,用户 UserA 加入聊天室 X,用户 UserB 也加入聊天室 X,此时用户 UserA 向聊天室发送消息 hello,服务端接收到该消息后,会向 UserA 发送一个接收成功的回应,服务端同时会将消息进行扩散到所有在同一个聊天室中的人,此示例中为 UserB。

02db0f163d612d6c3dfa520c3e93b7fa.png

场景简单化但制作不简单

每个环节都需要额外关注

1.如何稳定,高效的保持住百万甚至千万的长连接

2.如何进行聊天室成员状态的维护

3.如何进行消息路由的选择

64647752de695b37d699aece17184318.png

如何稳定超大规模的连接?

主要通过两个方向来解决这个问题,单机的连接数和集群的规模。

1.单机负载

关于单机连接的提升上,单机的连接数支撑虽然可以达到很高的数值,但是也要考虑是否为有效连接,因为高负载的连接和低负载的连接是完全不同的概念,且不说其他的业务逻辑,单纯其中的心跳保持逻辑,就会造成 CPU 和 IO 非常大的负担,这些还是完全没有谈及业务逻辑的基础上,故而在单机负载上,一般采用的是不超过10W的单机负载。

2.集群规模

集群的水平扩展能力决定了集群的规模,下图是服务端的整体部署结构:

02483340dfb61b24010cc1ab6aeae783.png 

上图中绿色的区域为负责客户端长连接的区域,所有的 IMS(IM Server)提供的服务完全相同,而且相互之间完全没有任何的依赖关系;上图中的黄色是部署在 IDC 中,主要服务聊天室的路由管理以及消息的路由分发。IMS 可以认为是可以无限水平扩展的架构设计,所以集群的规模可以认为是无限的。集群的规模上来了,尤其是在边缘侧的负载调度又称为了一个新问题,基于公司稳定而高效的边缘调度方式,通过客户端和服务端的完美配合实现高效,用户无感的连接体验。

bfe6e3d689d4f7532bad7d133e94e35e.png

关键:连接承载的瞬时数量

对于长连接的场景,连接保持固然重要,连接能够承载的瞬时数量也是非常关键的指标。而这个点也同样的是单机和集群的两个不同维度的问题,集群的角度则和上面的连接保持大致相同,而针对单机的连接创建和断开,则比单纯的保持住连接要复杂一些,需要考虑到登录时的鉴权问题,聊天室的特定场景,还需要考虑退出时的聊天室清理工作。

265ddf6bb1b7abd13ec102e2682f9bbf.png

简单介绍一下整体的策略,主要将创建和断开时发生的事情分成了两大类,一类是需要同步去执行的动作,另外一类是可以进行异步处理的,则放入到异步队列进行处理。策略本身比较简单,但是真正在执行的过程中能够做到,而且能够随着版本的迭代一直保持策略则显的比较困难,为了达到该目标,我们坚持着一个原则,凡是要添加到同步逻辑中的内容,需要给明相应的理由,并且需要团队内部同步讨论,否则只能采用异步队列的方式,这里并不是说异步队列的事情不需要审核或者讨论,而且同步的需要明确的针对性的处理,这样才能保证同步逻辑的清晰以及策略的可持续性。

2ee93d422a7b84edb3ba46b6dd0b968b.png

如何进行成员状态的维护?

聊天室属于多人聊天的一种特定的形态,消息仅仅扩散到在线的用户,用户离线则自动退出聊天室,并且再次上线后也不会接收到离线时的消息。至于像是一些断网了重新连接后还能继续观看直播的场景,进去时能够看到一些历史消息的情况,则是通过其他的手段实现自动订阅,拉取历史的能力。

成员的分级管理 

3bcb30618014df9c6653829b5868e703.png

上图中的左侧为聊天室与用户直接对应的关系表,也就是图中的用户聊天室信息,同步会产生聊天室成员信息,后续在消息路由的情况下,会高频的使用该结构查询聊天室的人员,进一步进行消息的扩散。分层的核心点在于节点聊天室的维护,只在当前节点的聊天室列表发生变化时才会修改节点聊天室信息,并且将该变更同步到 IDC,也即是上一次路由表中。这里只有第一个人加入聊天室和最后一个人退出聊天室时才会触发相应的逻辑。

02ec34964c2f045bfdd4db7c4e40fc16.png

上面是进一步抽离了关于分级注册的逻辑,由每一级将当前层级的聊天室对应关系注册,保活到上一级的聊天室关系中,我们也仅仅验证了3层,至于更多的层级理论上是可行的,但是不推荐使用,每增加一层复杂度和对异常情况的处理就会翻倍,对于后续介绍的消息投递则必须是所有的层级都正常工作才能将消息正常投递下来。

成员的心跳保持

6298e82d6114a9f68ea93e2905e7bff9.png

本节点上的聊天室信息由于都是内存级别的操作,所以一般出问题的概率比较小。保障其一致性比较简单,但是跨节点,尤其是跨机房的,跨地区的网络交互,很难保证每次都是正常的,所以在同步相关的信息的时候,添加了类似的保活机制,异步队列机制,重试机制等来进一步保障业务的稳定性,当然还有及时异常处理机制,毕竟不能让用户进入了聊天室,但是确一直不能接收消息,还不能恢复当前的状态。

1465ba3668eaf0c99a3fb40746892e4c.png

如何进行消息路由的选择?

多级路由

db78e7fec3df5a0143c23f2455c0a71a.png

基于上面的分级注册的逻辑,可以看出消息的下发也是分级进行下发的,这种设计上减少了每层的下发的难度,举个例子如果有200IMS,10个Edge,则极端情况下IDC需要分发的数量为10个,每个Edge的分发数量为20个,如果只有一级的话,则IDC需要分发200个请求,这个看着不是一个很大的数字,但是不要忘记这个仅仅为一条消息的分发量,而如果有5000请求则是200*5000=1,000,000则有百万级别的分发量,通过分级的方式能够有效的降低各个层级的复杂度,同时也能尽量减少跨机房,跨地区的调用,进一步降低风险。分级分发虽然带来了好处,也使得路径的维护变得相对复杂很多。

消息推拉结合

f1fda621ddbb2ce27151db65b5664ffd.png

聊天室的场景,大部分场景下是采用直接推送消息的方式。大型的聊天室消息的过滤,筛选以及丢弃的策略的方式也是非常复杂的问题。至于消息到投递阶段之后,直接推消息给客户端,这样消息的即时性确实得到了保证,但是客户端的情况是不同的,机器的配置不同,机器当时的运行状态不同,网络状况也是不同的,所以在这种情况,需要支持客户端能够根据自己的情况进行拉取一定数量的消息,这样能够更加灵活的适应不同的场景。这些策略虽然说这简单,但是真正的落实到线上的服务,还是有很多的细节点需要考虑,真正做到稳定还是比较困难的,毕竟这种特定的场景期望很好的监控也是比较困难的。我们也是先从简单的固定模式的推拉方式进行处理,后续根据具体的情况进行更加细节性的调优。

固定路由

f721958ee6642a811b0eaca20b0b7c5e.png

针对一些明确大型直播的场景需求,也提供了一种简单的路由方式,从上述的聊天室路由管理,可以看出出问题的情况还是可能存在的,所以针对已知特别大的聊天室场景,该场景的话,可以认为能够覆盖到所有的 IMS 服务,所以聊天室的分级注册就显得有点多余,所以聊天室级别的注册变更为节点的注册,依赖系统的服务注册发现默认就完成相关的内容,这样整个事情就变得非常的简单高效了。

这种方式有其在这种超大型聊天室的优势,也存在其自身的瓶颈点,所以的消息不管是否在本节点有用户加入了该聊天室,消息都会投递到该节点,故而每个 IMS 都要处理所有的消息,尽管很多的消息是没有下发投递的需求。方案没有万能的,所以这两种处理方式是互补的,并不是互斥的。

970be31cf241e7669d90d2f6d58459fa.png

大规模边缘聊天室 VS 中心集群

大规模边缘聊天室的方案,相较于传统的中心集群式的聊天室,从技术的大的架构是没有本质的区别,依然是多级路由,消息推拉结合的方式。

不同的点在于部署的形态不同,而恰恰是这些的不同使得很多东西发生了变化。大规模边缘聊天室的方式,增加了边缘的连通性,能够在更加靠近用户的地方进行就近部署,达到解决最后五公里的目的。并且能够利用各个机房的资源,从而达到百万,千万级别甚至更高量级的用户数量。大规模边缘聊天室的方案在实施的过程中,对成本的降低也起到了关键作用,由于中心机房一般保证可用性和稳定性,一般采用的都是 BGP 的网络,成本相对边缘机房的非 BGP 网络要贵很多。系统整体可用性的角度,大规模边缘聊天室相比于中心集群式的聊天室,对于机房故障的容灾性更好。当然这里主要介绍了大规模聊天室的优点,任何一种方案都不是全能的,有其优点就有其自身的劣势。大规模边缘聊天室部署形态复杂,对于运维体系的要求相对较高,服务间网络稳定性也比较难以保障,所以一般适用于对大规模的,公开的聊天室,对于比价多精细玩法的场景,或者小规模不太适合,反而增加了很多的不确定性。

7c24086cdce5750003c6d0515114595c.png

大规模边缘聊天室 VS CDN方式

针对大规模聊天室,曾考虑过是否可以使用业界比较成熟的 CDN 分发技术。在具体的实践过程中发现,针对这种小包,而且不会重复分发的场景,这里指的是同一个消息,不太会被一段时间不断的获取,聊天室的场景一般是当时收到了就收到了,如果没有收到,后续也不太期望需要收到消息。而且 CDN 的方案都是将消息聚合后,客户端定时拉取的方式,消息存在重叠性,延时性等不能满足客户的需求。

技术难度上,加入1000万的聊天室,每10s重新刷新一次消息,也有将近100W的 QPS 请求,这对于 CDN 系统也是一个非常大的调整,而且即使接入多家的 CDN 也会存在比较高比例的超时。更何况10S的延时,对于有些场景已经能够明显感知到了。

大规模聊天室相对于集中式,单中心的方案,不仅仅在服务的稳定性,承载的用户量级上有了显著的提升,而且在成本上也能有大幅的降低,同时用户体验也变得更好。至于业界一直尝试的 CDN 的聊天室方案同样存在着本身的局限性,不同于音视频消息单个内容相对较小,瞬时性访问量较大,重复访问的概率几乎没有等特定,使得 CDN 的实践方案无法满足该场景的需求。如2022卡塔尔世界杯期间,环信针对运营商客户对于世界杯的直播聊天室进行专业改造,并且帮助客户实现千万级聊天室的技术支持。解决了客户对于世界杯赛事直播海量用户在线的需求,通过架构的调整,能够同时支撑1800万用户同时在线,消息的处理能力达到了5000 QPS,消息的下发量达到了4000万+/秒的级别。环信整体方案不仅能够支持到如此大规模的量级,而且成本也能够比肩 CDN 的方案,机器能够进行高效的扩缩容。

 

f485441e6fb0c2791066e19e8ad042fc.gif

 

d819bb8df3b63481ac4ac4dae5362999.jpeg

☞ChatGPT 带火的「提示工程师」岗,不用写代码,也能获得年薪数百万?
☞CSDN 亮相 2023 全球人工智能开发者先锋大会
☞ChatGPT 火爆,程序员会不会被取代?答案都在这里!

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

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

相关文章

JavaScript成功背后的四个关键人物!

前言:JavaScript能如此成功,至少有四位关键人物: 1. JavaScript作者Brendan Eich 2. JSLint,JSON作者Douglas Crockford 3. jQuery作者John Resig 4. Node.js作者Ryan Dahl。 Brendan Eich以及JavaScript的发明过程大家已经非常熟…

爬虫教程( 3 ) --- 手机 APP 数据抓取

1. Fiddler 设置 这是使用 fiddler 进行手机 app 的抓包,也可以使用 Charles,burpSuite 等。。。 电脑安装 Fiddler,手机 和 安装 fiddler 的电脑处于同一个网络里, 否则手机不能把 HTTP 发送到 Fiddler 的机器上来。 配置 Fiddle…

以某乎为实战案例,教你用Python爬取手机App数据

1 前言 最近爬取的数据都是网页端,今天来教大家如何爬取手机端app数据(本文以ios苹果手机为例,其实安卓跟ios差不多)! 本文将以『某乎』为实战案例,手把手教你从配置到代码一步一步的爬取App数据&#xff0…

利用Python爬虫抓取手机APP的传输数据

大多数APP里面返回的是json格式数据,或者一堆加密过的数据 。这里以超级课程表APP为例,抓取超级课程表里用户发的话题。 1、抓取APP数据包 表单: 表单中包括了用户名和密码,当然都是加密过了的,还有一个设备信息&am…

22. 听说你想要用爬虫采集我的手机号?哎 ~ 我展示用的是图片

本篇博客我们实现图片渲染手机号码案例,用于防止爬虫直接采集文字信息。 爬虫训练场 本案例实现的效果如下所示 文章目录 bootstrap5 实现名片样式卡片补充数据生成逻辑生成用户 5 个汉字的昵称调用头像 API,生成图片将手机号码生成图片bootstrap5 实现名片样式卡片 在 Boo…

一种解决Qobuz客户端一直转圈加载不出来的思路

先上图,Qobuz在Win10上的客户端是这样滴 之前是最高音质,换到最差音质还是加载不出来。可能是我网络的问题,但是代理节点是没问题的。然后我尝试了一下Qobuz的Web Player。 就是登录之后画红圈这个 秒开好吧,也不卡顿&#xff…

2022年注册会计师(CPA)考试测试题及答案

1、某外国投资者协议购买境内公司股东的股权,将境内公司变更为外商投资企业,该外商投资企业的注册资本为700万美元。根据外国投资者并购境内企业的有关规定,该外商投资企业的投资总额的上限是( )万美元。 A.1000 B.1400 C.1750 D…

【PMP】PMP考试练习题(中英文对照)

1. A company wants to ensure that project failures are addressed in project documentation. Where should the project manager include them? A. Project management plan B. Risk management plan C. Change management plan D. Communications management plan 公司希…

PMP通过率大跌,是否与新版考试大纲有关?

通过率的增长和下降并不是只看考试内容或者说考试是否有重大改革来的,毕竟每年的考生水平都是不一的,我们也没有办法去确定一个考试的通过率高低是否准确,你相信那就是,不相信同样对于你是否能过通过考试也没有多大影响。 考试并不…

超级好用『PMP考试答题24计』一次通过考试~(1)

作为一个想一次通过PMP考试的老考试人。 刷题、报班、看视频、看教材甚至是通过人的经验贴都不会放过的我,只要是与通过PMP考试有关的都想去看看了解了解,避避坑。 但是内容有太多,而且考试的经验也就只能看看,在自己身上好像没…

PMP中文报名注意事项

随着PMP得到越来越多的关注和认可,报考人数也在逐年快速增长着。 而PMP的考试,分为英文报名和中文报名。在PMI官网通过英文报名之后才能进行英文报名。 一般报了机构的学员,机构都会提供英文代报名服务。 而中文报名因为涉及预约考点&…

证券从业资格考试 超全指南

一、考试科目 分为一般从业资格考试、专项业务类资格考试和管理类资格考试三种情况。 一般从业资格考试,即“入门资格考试”,主要面向即将进入证券业从业的人员,具体测试考生是否具备证券从业人员执业所需专业基础知识,是否掌握…

PMP扫盲篇2 | PMP报名、缴费、考试那些事儿~~

接上一篇: ​PMP是一种项目管理考试认证,更是一种思路。 抱着考试的思路,你必须至少把PMBOK完整学下来;抱着学习PMP知识和思路的态度,你要终生阅读PMI的各种guide和参加各种pmp分享会、讨论会——因为你必须不停的学…

2022年注册会计师(CPA)考试模拟题及答案

1、股份有限公司的下列股票发行方式中,不需要证监会核准的是(  )。 A.上市公司发行新股 B.非公众公司非公开发行股票,发行后股东人数为80人 C.非公众公司向特定对象发行股票,发行后股东人数为210人 D.非上市公众…

PMP澳门机考3A学员考试攻略

(刚到澳门,考试前一晚,寻找考场) 备考篇 如何高效学习? 项目整合管理大概13章节,每次直播上课会讲其中的几个章节。 在上课前最好可以预习下讲义,很多内容并不是非得在课上才能获得,…

1. python学习基础

这里写目录标题 python学习总结python学习参考网址环境配置⚖ 包管理说明(涉及包的位置,包的查找原理,如何设置模块,__init.py__)conda和pip换源conda创建激活和切换环境pip进行包的管理🪝[pip官网&#xf…

[精简]快速入门五线谱

五线谱的每一根线,线与线之间的空间,都可以代表一个音,它是可推的低音谱号:高音谱号:接下来,我们需要记住4个do的位置(因为记住了do的位置,其他音就可以推算出来)&#x…

html5 五线谱,五线谱难学?5分钟完成五线谱入门

五线谱 (Musical Notation)是目前世界上通用的记谱法。在5根等距离的平行横线上,标以不同时值的音符及其他记号来记载音乐的一种方法。最早的发源地是希腊,它的历史要比数字形的简谱早得多。在古希腊,音乐的主要表现形式是声乐。到了罗马时代…

国产麒麟软件安装

1、通过应用商店安装 2、软件官网下载 下载qq 1、打开qq官网,找到linux版本 2、找到对应的安装包下载 麒麟是基于Ubuntu版本开发,下载Ubuntu的安装包 3、下载之后直接在下载文件夹双击安装下载的文件 4、输入用户的密码进行授权 5、安装成功 6、打…

CSDN年度征文 | 你好,2023

祝大家新年快乐~🧧🧧🧧 ⭐过去的2022⭐ 2022已成过去,2023慢步向我们走来。回首2022,这一年不是平凡的一年。这一年,有苦也有乐。冬奥会的成功举办、香港回归25周年、二十大胜利召开、航天任务圆满成功等等…