IM即时通讯综合消息系统的架构

如何设计一款高性能、高并发、高可用的im综合消息平台是很多公司发展过程中会碰到且必须要解决的问题。比如一家公司内部的通讯系统、各个互联网平台的客服咨询系统,都是离不开一款好用且维护的方便im综合消息系统。

那么,我们应该怎么样来设计一款三高特性的im系统,并能同时支持各个业务线的接入(比如:内部OA通讯、客服咨询、消息推送等等功能)有呢?

im第一版设计的初衷是公司需要一款im消息中间件用于支撑客服咨询业务。

但是,考虑到为了方便日后其他业务线也能接入消息沟通平台,所以一开始就将整个消息中心的能力需求给到中间件团队进行开发,以便除客服外的各业务线接入综合消息中心,从而实现多元的消息实时触达能力。

我们逐个解释一下各模块的作用。

1)存储端:

在初版的架构下,存储端我们使用tidb、redis作为主要存储:

    1)redis用于存储消息已读未读,缓存连接信息等功能;
    2)tidb作为开源的分布式数据库,选择它是为了方便消息的存储。


2)mq消息总线:

我们使用rocketmq来实现消息总线(PS:即分布式情况下,不同im实例间通过MQ进行消息交互)。

消息总线是整个im的核心,使用rocketmq能支持十万级别的tps。基本所有服务都要从消息总线中消费消息进行业务处理。

3)zookeeper注册中心:各个服务会注册到zk中,方便服务之间内部进行调用,同样也可以暴露服务给外部进行调用。

4)link服务:

link服务主要用于接收客户端的ws(WebSocket协议)、tcp、udp等协议的连接。

同时调用用户服务进行认证,并投递连接成功的消息给位置服务进行消费,存储连接信息。

ws(WebSocket协议)过来的消息先到link再投递到消息总线。

5)消息分发服务:

消息分发服务主要用于接收消息总线推过来的消息进行处理,按照im内部消息协议构造好消息体后,又推送到消息总线中(比如会推给会话服务、消息盒子、link服务)。

6)位置服务:

存储link的(WebSocket协议)连接、tcp连接等信息,并使用redis进行缓存(key为userId),方便根据UserId查询到该用户所登录的客户端连接在哪个link上。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

一个用户在相同设备只能登录一个,但可以支持多端登录。

7)用户服务:用于存储所有用户,提供认证查询接口。

8)消息盒子:存储所有消息,提供消息查询、消息已读未读、消息未读数、消息检索等功能。

9)会话服务:管理会话、群聊会话、单聊会话等功能。

初版IM架构存在的问题及思考

在上节的架构设计介绍中,我们详细分享了初版IM系统架构的设计思路以及具体流程。

那么在初版IM架构设计中还存在什么样的问题,又该如何优化呢?我们一条条来看看。

使用MQ消息总线的问题

正如上节所分享的那样,我们初版IM架构中,link服务到消息分发服务的消息使用的MQ消息总线。

初版架构设计中,link服务将消息下推给消息分发服务进行处理时,使用的是mq消息总线(通俗了说,IM集群内不同IM实例间的通信是依赖于MQ进行的消息传递),而mq消息总线必然做对有一定的时延(而且时延受制于MQ本身的系统实现和技术策略)。

举个例子:
当两个处于不同IM实例的客户端A和B聊天时,A用户发送消息到link --> 消息总线 --> 消息分发服务 --> 消息总线 --> link --> B用户。

正如上面这个例子,im消息投递流程太长了,并且这样也会大大降低系统的吞吐量。

那么为啥微信使用写扩散不是缺陷,而对于我们的IM架构来说确是缺陷呢?

微信的技术特性:

    1)微信号称没有存储用户的聊天记录,全是实时推送;
    2)微信聊天记录全部会在我们手机端存储一份,两台手机终端上的聊天记录并不互通,并且互不可见。


我们的IM综合消息中心技术特性:

    1)综合消息中心是会有拉取历史聊天记录(服务端拉取)的功能,存储了全量消息;
    2)综合消息中心的客户端,需要支持网页版本。


综上所述:

    1)写扩散对微信这样有移动端的富客户端版本的即时通讯产品十分友好,每个消息在消息分发的时候给处于这个会话(单聊,群聊)下的所有用户所在客户端先推送消息,没找到连接就针对这个用户写一个离线缓存消息,那么下次该用户登录进来,可以从缓存中拉取到该消息,并且清掉缓存;
    2)写扩散对于我们这类通用综合消息平台并不友好,由于接入方大部分是网页版的客户端,所以没有缓存消息的能力,浏览器刷新就没有了任何消息,所以需要实时去服务端拉取历史消息。假设我是写扩散,在一个群聊中有五百个用户,针对这五百个用户在这个会话,我需要去写五百条消息,大大的增加了写io,并且还不能写缓存(得写数据库)。

tidb存在不稳定性和事务并发的问题

tidb是目前主流的开源分布式数据库,查询效率高、无需分库分表。

但同样的,tidb存在一些隐藏的问题:

    1)tidb在高并发情况下,并发事务会导致事务失败,具体原因不知;
    2)tidb排错成本高,公司很少有tidb专业运维,经常遇到不走索引的情况。

群聊、单聊冗余在同一个服务的问题

在我们初版的IM架构设计中,单聊和群聊是冗余在会话服务中的,并且冗余在同一张表的。

其实单聊、群聊从数据角度来说,还是会有些不同(比如业务属性)虽然都是会话,我们还是需要将这两个服务拆分开,细粒度的服务拆分能更好的把控整体的逻辑。

正如前面两节分享的那样,渐渐的我们发现初版im架构有很大的不足之处。

在生产上暴露出了以下问题:

    1)tps没达到预期,吞吐量不能满足公司业务的发展;
    2)使用的存储中间件难以维护(主要是tidb),试错成本高,经常在生产暴露问题,并且速度越来越慢;
    3)消息写扩散没有太大必要,并大大增加了系统io次数(原因见上一节);
    4)一些特性无法支持,比如消息图文检索,消息已读未读。

改版后的各模块情况如下:

    1)存储端:存储端我们改用了mysql,针对消息服务单独使用了主从mysql集群(主节点用于写消息、从节点用于消息检索)——;
    2)mq消息总线:与第一版相比没有改动;
    3)link服务:与第一版相比,改动了link服务到消息分发服务的消息推送方式(由MQ总线方式变更为tcp实时推送);
    4)消息分发服务:集成了消息处理能力、路由能力,每台消息分发服务拥有所有link服务的tcp连接;
    5)单聊服务:负责单聊会话的管理能力;
    6)群聊服务:负责群聊会话的管理能力;
    7)用户服务:提供用户认证,登录\注册能力。

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

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

相关文章

政企专属的IM即时通讯平台,促进团队安全沟通与协作

近年来,随着信息技术的快速发展,各个行业都在积极探索数字化转型的道路。对于政企组织而言,建立内部专属的统一办公平台已经成为了一种趋势,这种平台不仅可以提升团队的工作效率,还可以促进员工之间的安全沟通与协作&a…

图扑软件数字孪生 SMT 产线,智能工业可视化管理

随着《中国制造2025》的提出,制造业迎来了全新的发展机遇。更多的企业将制造业信息化技术进行广泛的应用,如 MES 系统、数字孪生以及生产管理可视化等技术的研究应用,已经成为社会各界共同关注的热点。 表面贴片技术(Surface Mou…

字节、快手、天弘基金等 :量化/算法工程师岗位【社招|校招|实习生】

信润富联数字科技实习生 公司简介: 信润富联成立于2020年7月,是中信、华润、工业富联强强联手,协力打造的工业智能解决方案平台。 团队简介: 核心成员来自美国IMS实验室(工业人工智能黄埔军校)、香港城市、…

2021亚洲最佳职场中国大陆区企业公布:工业富联、特斯拉等上榜;黑人牙膏将更名为好来 | 美通社头条...

要闻摘要: 2021亚洲最佳职场中国大陆区企业公布:工业富联、特斯拉等上榜。受网络攻击最多行业已从金融保险转变为IT通信。黑人牙膏将更名为好来。"特斯拉劲敌"Rivian选定亚马逊云为首选云供应商。创维推出比手机还薄的电视Q31 Pro。CTI华测检测…

大型电厂IP互联无线对讲通信解决方案

项目背景: 某大型电厂目前只有主办公楼有无线覆盖,厂区内生产机房、下穿隧道以及公路信号覆盖仍存在盲区障碍。随着电厂巡检工作的运作和移动通信设备的增多,指挥中心想要实现整个厂区的呼叫,迫切需要构建一套智能化无线通信解决…

IM即时通讯构建企业协同生态链

在当今互联网信息飞速发展的时代,随着企业对协同办公要求的提高,协同办公的定义提升到了智能化办公的范畴。大多企业都非常重视构建连接用户、员工和合作伙伴的生态平台,利用即时通讯软件解决企业内部的工作沟通、信息传递和知识共享等问题。…

即时通讯软件(企业IM)对企业的作用

随着网络时代的来临,即时通讯软件也开始逐渐在企业中流行起来,甚至很多公司都已经将即时通讯软件作为内部沟通的主要工具,那么这种情况下,即时通讯软件对企业究竟有什么作用呢? 首先,即时通讯软件对于企业内…

容联云以IM+RTC,开启新一代实时互动新视界

随着数字化的发展,无论是即时通讯还是实时互动已经不再单指某种产品与技术形态,TA正在加速与行业的深度融合,激发出新场景与新应用。 如何更好的挖掘IMRTC场景,如何更好的服务理解客户,容联云音视频在助力企业快速转型…

IM即时通讯聊天软件1.0

一、项目简介 一直以来都有一个社交梦,想做一款IM应用,看了很多优秀的开源项目,但是没有合适的。于是利用休息时间自己写了这么一套系统。 项目第一个版本历时2个月,前端使用uniapp,后端使用SpringBoot。 页面设计后期…

#榜样的力量#工业富联富集云防疫 App丨数据猿新冠战“疫”公益策划

“该项目案例由工业富联提交申报,参与数据猿推出的《寻找新冠战“疫”,中国数据智能产业先锋力量》的公益主题策划活动。 大数据产业创新服务媒体 ——聚焦数据 改变商业 疫情就是命令,工业现场也是“战场”。 2020年,一场突如其…

执掌工业富联,归国学霸、东大博士正在代言富士康

文丨智能相对论(aixdlun) 作者丨陈选滨 河南大水,八方支援。 在捐款破亿的企业名单里,工业富联代表富士康集团,宣布捐款1亿元,用于河南当地的救灾工作和灾后重建。 与此同时,走入大众视野的…

倍福PLC——ADS上位机通讯

倍福PLC——ADS上位机通讯 前言一、ADS服务二、使用ads函数进行数据通讯1.通过句柄读写c#读取写入代码 前言 工程中涉及与倍福plc的交互用到ads通讯,在此稍作研究总结。 一、ADS服务 本机没有安装倍福全家桶的需要安装一下这个TwinCAT System。 安装完成后需要配置…

股价大跌、现金流承压,工业富联风光不再?

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 昔日的消费电子赛道独角兽工业富联正渐渐失去光环。8月,工业富联发布了2022年上半年财报,数据背后,工业富联处境如何? 净利润增幅放缓,现金流净额大幅下滑 2022…

工业富联灯塔工厂白皮书:智能制造里程碑.pdf(附下载链接)

大家好,我是文文(微信:sscbg2020),今天给大家分享富士康工业互联网、亿欧和腾讯云于2020年6月联合发布的白皮书《工业富联灯塔工厂白皮书:智能制造里程碑.pdf》,本白皮书共59页,包含如下四大部分…

工业富联智能嬗变

配图来自Canva可画 提到代工厂,很多人很容易就想到富士康、比亚迪、立讯精密。而作为脱胎于富士康集团的工业富联,也很容易被外界贴上“代工厂”的标签。 事实上,自成立之初工业富联就将它的发展方向,放在了工业互联网和智能制造…

飞桨PaddleTS携手信润富联:共建工业异常检测精准智能化系统

在信润富联的一间实验室中,CTO冯建设正在与研发部的同事探讨“精密制造在线异常监测系统” MachineProphet的测试效果。结果让冯建设的技术团队兴奋不已: 这款最新研发的智能冲压检测系统上线测试各项指标表现优异,可实现最高1000SPM&#xf…

百度飞桨助力信润富联实现工业异常检测智能化

在信润富联的一间实验室中, CTO冯建设正在与研发部的同事探讨“精密制造在线异常监测系统” MachineProphet 的测试效果。结果让冯建设的技术团队兴奋不已: 这款最新研发的智能冲压检测系统上线测试各项指标表现优异,可实现最高1000SPM(Stro…

工业富联左赣鸿 | 解密全场景互联互通的灯塔工厂

前段时间,在【2021中国“智造”数字化转型峰会】上,工业富联数字化转型首席专家左赣鸿先生为大家带来了《解密全场景互联互通的灯塔工厂》的主题分享,阐述工业富联灯塔工厂整体解决方案,将这些最优实践背后的方法路径进行总结&…

干货分享:小红书商业化+微信社区运营,引流自动裂变拓客方案

干货分享:小红书商业化微信社区运营,引流自动裂变拓客方案 背景:2023为止小红书基本已是当代年轻人都会下载和使用的软件了,小红书是生活方式平台和消费决策入口,通过智能机器人学习和对用户的精准智能匹配走红&#x…

【读书笔记】《经验会计与财务研究方法-原理、应用及SAS实现》 鲁桂华

热泪盈眶,这么一本贴合我需求的书竟然现在才找到。唉,这么说不太合适,鲁老师牛逼! 第一章 分析性研究与经验性研究(Theoretical research or empirical research) 个人感觉:Top Down Method Vs. Bottom Up…