技术干货 | 网易云信大规模聊天室系统架构解析

:聊天室是一类非常重要的 IM 系统,不同于单聊和群聊,聊天室是一种大规模的实时消息分发系统。本文我们来详细介绍一下网易云信大规模聊天室系统的具体架构以及实践应用案例

文|曹佳俊 网易云信资深服务端开发工程师

聊天室有多种技术实现方案,业界也有一些开源的实现,每种实现都有自己的特点和应用场景。网易云信作为 PaaS 平台,其聊天室的系统架构和方案有几个突出的特点:

  • 水平扩展能力:主要体现在两方面,一个是聊天室数量,一个是单个聊天室的人数。

  • 功能丰富:作为一个平台,聊天室提供底层通信能力,提供了丰富的功能集,来适配各种各样的业务场景,使用方可以根据自己的业务要求按需使用。

  • 支持全球化:云信目前提供了覆盖全球的通信网络,通过接入云信自研的 WE-CAN 大网,全球范围内延迟不超过 250ms。

下面,我们一起来看看网易云信大规模聊天室系统的具体架构以及实践应用案例。

网易云信聊天室系统架构

首先,我们先来看一下网易云信当前聊天室的详细技术架构,以及我们在架构升级优化过程中做的一些事情。

整体架构图

如下图,是网易云信聊天室的技术架构:

主要包括以下部分:

  • 接入层的 ChatLink

  • 网络传输层的 WE-CAN、WE-CAN bridge

  • 调度层的 Dispatcher

  • 服务层的 Callback、Queue、Presence、Tag、History 等

  • CDN 分发层的 CDN Manager、CDN Pusher、CDN Source

下面,我们针对每一层展开详细分析。

接入层 

接入层根据客户端的类型不同会有不同的实现,例如常见客户端(iOS、Andriod、Windows、Mac 等)基于私有二进制协议,Web 端基于 Websocket 协议实现。接入层作为距离客户端的最后一公里,其接入速度、质量以及数据安全都是至关重要的:

接入速度和质量

目前我们搭建了覆盖全国各省份以及全世界各大洲的边缘节点,缩短最后一公里,减少不确定性,提升服务的稳定性。

数据安全

基于对称+非对称加密,客户端与服务器之前实现 0-RTT,完成秘钥交换和登录,同时也支持 RSA/AES/SM2/SM4 等各种加密算法。

接入层除了接受来自客户端的请求,还负责进行消息的单播和广播,因此接入层需要管理本节点的所有长连接,包括每个聊天室房间的连接以及每个连接的标签属性。此外接入层会上报自己的负载信息给后端服务,方便调度层进行合理的调度。

当流量洪峰来临时,因为需要进行消息的广播,接入层往往是压力最大的,为了保证服务的稳定性,我们做了很多优化策略:

自适应的流控策略

  • 单机流控:接入层服务会监控本机整体的网络带宽使用情况,并设置 2 个阈值 T1 和 T2,当带宽使用率超过 T1 时,触发流控,如果进一步超过了 T2,则不仅触发流控还会不断的调整流控的强度。最终的目标是使带宽使用率稳定在 T1 和 T2 之间。

  • 单连接流控:除此之外,接入层服务还会记录每个长连接的消息分发速度,并进行细粒度的调整,避免单机粗粒度流控导致单个连接分发过少或者过多,做到消息分发的平滑,即减少了带宽流量的波动尖刺,也改善了端侧的体验。

性能优化

ChatLink 高负载运行时,除了网络带宽,调用链路上的各个环节都可能成为性能的瓶颈。我们通过减少编解码的次数(包括序列化、压缩等)、多线程并发、减少内存拷贝、消息合并等多种方式,显著地提升了服务性能。

网络传输层 

网易云信聊天室系统最初的架构是将接入层和后端服务层部署在同一个机房的,大部分用户都是直连 BGP 机房的 ChatLink,对于偏远地区或者海外,则通过专线的方式部署代理节点完成加速。该方案存在明显的缺点就是服务能力上限受制于单机房的容量,此外,专线也是一笔不小的开销。

在我们接入 WE-CAN 大网后,接入层 ChatLink 可以做到客户端就近接入,提高服务质量的同时降低了成本。此外,多机房的架构也使得我们的服务能力上升了一个台阶。

为了适配 WE-CAN 大网,我们设计了 WE-CAN Bridge 层,作为大网接入协议和聊天室协议的桥接层,负责协议转换、会话管理、转发接收。通过这种分层架构,接入层和后端业务层可以少修改或者不修改,减少对已有系统的改造成本,也降低了架构升级带来的风险。

调度层 

调度层是客户端接入聊天室系统的前提。客户端登录聊天室之前需要先获取接入地址,分配服务我们称之为 Dispatcher。

Dispatcher 是中心化的,会接受来自 WE-CAN 和 ChatLink 的心跳信息,根据心跳情况来选择最佳接入点,调度系统设计主要考虑的几个关键点是:

调度精度

调度系统会根据请求方的 IP 判断地域和运营商信息,对比各个边缘节点的所属区域、运营商以及节点本身的负载(如 CPU、网络带宽等),此外还考虑边缘节点到中心机房的链路情况(来自 WE-CAN),计算综合打分,并把最优的若干节点作为调度结果。

调度性能

面对高并发场景,比如一个大型聊天室,活动初期往往伴随着大量人员的同时进入,此时就需要调度系统做出快速的反应。为此,我们会将上述的调度规则以及原始数据进行本地缓存优化,此外,为了避免心跳信息滞后导致分配不合理引起节点过载,分配服务时还会动态调整负载因子,在保证调度性能的前提下,尽量做到分配结果的平滑。

服务层 

服务层实现了各种业务功能,包括:在线状态、房间管理、云端历史、第三回调、聊天室队列、聊天室标签等。其中最基础的是在线状态管理和房间管理:

  • 在线状态管理:管理某个账号的登录状态,包括登录了哪些聊天室、登录在了哪些接入点等

  • 房间管理:管理某个聊天室房间的状态,包括房间分布在哪些接入点,房间里有哪些成员等

在线状态管理和房间管理的难点在于如何有效管理海量用户和房间。网易云信 PaaS 平台的特性,使得我们可以根据不同的租户来进行 Region 划分,从而做到水平扩展。此外,由于状态数据有快速变化的特点(短 TTL),当某些核心用户或者某个客户报备了大型活动时,云信可以在短时间内进行相关资源的快速拆分和隔离。

服务层除了要支持海量客户接入、水平扩展外,还有一个很重要能力,就是需要提供各种各样的扩展性功能来适配客户各种应用场景。为此云信提供了各种各样丰富的功能,比如:

  • 第三方回调:方便客户干预 C 端用户的登录、发消息等核心环节,自定义实现各种业务逻辑。因为涉及到服务调用,而这个调用是跨机房甚至是跨地区的,为了避免第三方服务故障导致云信服务异常,我们设计了隔离、熔断等机制来减少对关键流程的影响;

  • 聊天室队列:可以方便用户实现一些诸如麦序、抢麦等业务场景需求;

  • 聊天室标签:作为云信业内首创的特色功能,支持消息的个性化分发。其实现原理是通过客户端登录时设置标签组以及发消息时设置标签表达式,来定义消息分发和接收的规则。标签信息会同时保存在服务层以及接入层,通过将部分标签计算下推到接入层,节省了中心服务的带宽和计算资源。

CDN 分发层 

当我们评价一个聊天室系统时,常用的一个词是无上限。架构支持无上限不代表真的无上限。一个聊天室系统,在逻辑上,各个组成单元都是可以水平扩展的,但是每个服务所依赖的物理机、交换机、机房带宽等都是有容量上限的。因此,能够合理地调配多个地域的多个机房,甚至是外部的其他资源,才能真正体现出一个聊天室系统所能支撑的容量上限。

在网易云信的聊天室系统中,用户所有的接入点遍布各地机房,天然的将各地的资源进行了整合,所能支撑的容量上限自然高于单机房或者单地区多机房的部署模式。

进一步的,当面临一个更大规模的聊天室,此时如果能利用一些外部的通用能力不失为一种合适的选择。融合 CDN 弹幕方案就是这样一种技术实现方案,它可以利用各大 CDN 厂商部署在各地的边缘节点,利用静态加速这样的通用能力来支持超大规模的聊天室消息分发。

基于融合 CDN 弹幕分发方案,其核心点就是弹幕的分发和管理,这是一个可选的模块,云信内部对此进行了封装,可以根据不同的业务特点来选择是否开启而不需要修改任何业务代码。

在开启融合 CDN 弹幕分发方案的情况下,所有的弹幕广播会划分成 两条链路:

  • 重要的且需要实时送达的消息会走长连接到达客户端

  • 其他的海量消息则会进入 CDN Pusher,通过各种策略进行聚合后送达 CDN Source

客户端 SDK 会采取一定的策略定时从 CDN 边缘节点获取弹幕消息。SDK 会聚合不同来源的消息,排序后回调给用户,App 层无需关系消息来自哪里,只需根据自己的业务需求进行处理即可。

如上图,展示了 CDN 弹幕分发链路的消息流转过程:CDN Manager 负责管理不同 CDN 厂商的分配策略(登录时会通过长连接下发,且能动态调整)。此外,还负责管理平台上各个聊天室融合 CDN 模式的开启和关闭,以及对应的 CDN Pusher 资源的调配和回收;CDN Pusher 实际负责接收来自客户端消息,并根据消息的类型、消息的优先级等,组装成以一个一个的静态资源,推给 CDN Source,等待 CDN 回源拉取。

落地实践案例

下面,我们介绍应用了网易云信聊天室系统的典型应用场景。

大规模场景应用案例 

在2020年8月,网易云音乐 TFBoys 的 7 周年线上演唱会就是一个聊天室大规模场景应用的典型案例。在这场活动创造了 78w+ 的在线付费演唱会的世界纪录,其弹幕互动的实现方式采用了网易云信基于融合 CDN 弹幕分发方案。事实上,在筹备环节,我们的聊天室系统达成了 20 分钟完成从 0 到 1000w 在线,上行消息 tps 达到 100w 的性能指标。

如上图,是支持本次活动弹幕分发的架构图,普通弹幕和礼物消息分别通过客户端 SDK 以及服务器 API 到达云信服务器,并最终进入弹幕广播服务,随后分流到长连接和 CDN 上,再通过 pull / push 混合的方式送达客户端。

特色功能 - 聊天室标签应用案例 

近年来,随着互联网的发展,在线教育越来越火爆,最近又兴起了“超级小班课”模式。所谓超级小班课,指的是大型多人课堂与小班互动模式结合。

在线直播场景下,文字互动作为其中重要的一环,是聊天室的典型应用场景。但在超级小班课的模式下,常规的聊天室系统却存在各种各样的问题,不管是建立多个聊天室,还是单个聊天室进行消息过滤,都存在一些严重的问题。

网易云信首创的聊天室标签功能,完美支持了上述业务场景,基于聊天室标签,我们可以灵活地支持聊天室消息定向收发、聊天室权限定向管理、聊天室成员定向查询等个性化功能,真正实现大型直播下多场景的分组互动,比如对学生进行分组标签后,方便进行因材施教;分小组讨论,小组间内部讨论和组间 PK 等等。

如上图,展示了超级小班课的一个场景:1 个主讲教师+ N 个互动小班+ N 个助教,所有学生被划分成了一个一个的小班,由对应的助教完成预习提醒、课后答疑、作业监督、学员学习情况反馈等工作,同时又接收来自主讲老师的直播画面,做到了大课的规模,小课的效果。

总结

以上,就是本文的全部分享,主要介绍了网易云信构建一个大型聊天室系统的主要技术以及架构原理。任何系统的搭建都不是一蹴而就的,云信也会继续打磨底层技术,就像引入 WE-CAN 来提升网络传输效果,也会继续丰富完善我们的功能图谱,如业内首创的聊天室标签功能等。网易云信将持续在 IM 领域深耕,为各种场景和行业的用户提供最优质的服务。

作者介绍 

曹佳俊,网易云信资深服务端开发工程师,中科院研究生毕业后加入网易,一直在网易云信负责 IM 服务器相关的开发工作。对 IM 系统构建以及相关中间件的开发有丰富的实战经验。

延伸阅读 

  • 业界首发!“IM+RTC+白板”一站式“超级小班课”解决方案来了!

  • 网易实践|千万级在线直播弹幕方案

  • 架构解析|网易自研新一代大规模分布式传输网

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

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

相关文章

2022倒带-NutUI

前言 时光飞逝,流年似水,让我们倒带 2022,回首这跌宕起伏一年走过的 “升级之路”。 NutUI 表现如何? 成绩单等着您打分! 2022 是 NutUI 在技术长廊中探索和成长的第四个年头,悄然度过了自己的“孩提“时…

chatgpt赋能python:Python量化开发:实现金融市场的策略化投资

Python量化开发:实现金融市场的策略化投资 随着金融市场竞争的日益激烈,传统的以人工分析及定量研究为主的投资方法已经无法满足投资者的需求。因此,数字化投资逐渐成为趋势,采用量化投资来实现金融市场的策略化投资已经成为了投…

英语基础:四级431、六级没过,考研英语78分经验分享 (23考研)

前言 博主备考时的英语基础:英语四级431分, 六级没过 研究生英语二分数:78分 ps:也许这个分数段不是一些大佬的目标分数 (80),本篇文章的目的只是帮助一些英语基础差的同学,提供一些备考经验。 一、基础阶段 时间&…

考研复试_英语面试_必备的30个问题

前言: 本人英语口语处于那种的“哑巴式”,没有准备就根本不知道扯啥。于是整理了一些出现频率最高的英语问题(回答对我而言两三句简单句就撑死了,因没有参考价值大家就还是自己准备回答),以防到时候陷入迷之…

国外问卷调查有哪几种类型?

大家好,我是小飞匠,今天来聊聊国外问卷调查分为哪几种?新手适合做哪种?国外问卷调查项目最近一直很火,咨询的人也比较多。因为国外问卷调查其实分为很多种类。通过不同的展现方式、付款方式,我们称为不同的…

什么是海外调查问卷?都有哪些形式

国内外有很多正规的公司都是做这个行业的。为什么会有这么多公司在做这个行业?主要是由于市场上问卷调查需求较多决定的,很多商家在进行新产品研发前的需求以及产品销售后的一些满意度征集时,往往会通过这种问卷调查公司收集特定人群的意见与…

国外问卷调查好做吗?为大家分享干货!

随着5G的出现,2021可谓是真正的进入到了互联网时代。互联网时代的出现更大的为人们提供了更多的机会,让人们的工作以及生活都得到了更大的便利。也使人们的创业的机会变得更多了起来。 在互联网的背景下,足不出户的进行互联网的创业的人们多了…

开源的问卷调查系统

一、项目简介 今天推荐一款基于 JAVA WEB 的开源问卷表单系统。 二、实现功能 支持创建问卷 支持设计问卷 支持基础题型 支持收集卷子 支持默认统计 支持原始答卷 三、技术选型 后台开发:Java、SpringBoot【企业版】,Struts2【开源版】 前端开…

海外调查问卷中的站点查

国内外很多正规公司都在从事这个行业。为什么有这么多公司在做这个行业?主要是由于市场上对问卷调查的需求量很大。很多商家在收集新产品研发前的需求和产品销售后的一些满意度时,往往会通过这种问卷调查公司来收集特定人群的意见和想法。这些问卷调查公…

微信端问卷调查

上周,股份公司突然需要问卷调查功能,要的很着急。和一同事用了大约两天时间,将该功能完成。 项目情况是:要求在PC、微信端可以填写内容;微信端根据二维码打开问卷页面。 UI框架: bootstrap 效果如下&…

微信小程序-调查问卷

调查问卷 搭建本地服务器新建小程序注意 搭建本地服务器 使用node.js(要安装node.js)搭建本地HTTP服务器,在小程序所在目录创建web目录 ,并在web目录下打开CMD,初始化项目 npm init -y然后安装express框架 npm inst…

在当前就业形势下,如何提高应届生在职场中的竞争力,让ChatGPT帮你解答

在当前就业形势下,应届生要提高自身的竞争力,可以从以下几个方面入手: 学习技能:不断学习提升自身专业和技能水平,获取行业认证证书,参加培训课程。 实习和项目实践:通过实践课程,公…

泰裤辣!ChatGPT帮你制定个人发展计划,助力你实现职场腾飞……

作为一名职场人,你是否曾经感到自己的职业生涯缺乏方向和规划? 是否曾经为了应对工作中的挑战而感到力不从心? 如果你的答案是肯定的,那么认真制定自己的个人发展计划,为自己的职业生涯打下坚实的基础就是你必须要做…

ChatGPT-看一看你还有多久失业

需求:将下列表格中的数据导入mysql数据库并且可以将mysql数据库上的数据导出到excel,如果让你做需要多久时间 第1次询问ChatGPT:一个excel内部有多个sheet,每个sheet的表头都是章节号、测试项、测试子项、用例名称、用例表示、测试…

【CCNA | 网络模拟器CPT系列】Cisco Packet Tracer 8.2.0 的安装 Ⅰ

目录 1. 下载 Cisco Packet Tracer2. 安装 Cisco Packet Tracer(1)许可协议界面(2)选择安装目录(3)选择开始菜单文件夹(4)选择附加任务(5)确认设置选择&#…

无线POE交换机突然离线导致AP下用户无法上网

环境: 华为S1730S-S 锐捷 NBS3100-24GT4SF 问题描述: 无线POE交换机突然离线导致AP下用户无法上网 交换机各个指示灯都正常,现在有无线信号 连接上获取不到ip 本地远程管理地址也访问不了 解决方案: 1.电脑直连这个交换机…

Cisco Packet Tracer应用登入后还是不能运行的问题

问题出现的可能性 版本低,达不到要求;建议下载最新版本试一 试,以下是8.2.1版(在官网登入后资料中下载->如图1)登入时注意选择China->如图2,登入后就可以使用->如图3 图1 图2 图3

Python 自动化办公应用大全(ChatGPT 版)

以下内容来自公众号逆锋起笔,关注每日干货及时送达 你被降维打击过吗? 在刘慈欣的科幻小说《三体》中,高级文明掌握了一种维度武器,可以将攻击目标所处的空间维度降低,使其无法生存。 二向箔飞出,整个太阳系…

人工智能学术顶会——NeurIPS 2022 议题(网络安全方向)清单、摘要与总结

按语:随着大模型的崛起,将AI再次推向一个高峰,受到的关注也越来越大。在网络安全领域,除4大安全顶会外,一些涉及AI的安全话题,包括对AI的攻防研究,以及应用AI做安全的研究方向,也会发…

教育最大的失败,是普通家庭富养孩子

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 著名教育家马卡连柯曾说:“一切都给孩子,牺牲一切,甚至牺牲自己的幸福,这是父母给孩子最可怕的礼物。”前些天刷到一个挺扎心的视频,不知道算…