一个即时通信系统架构实现的讨论

超实用!如何用Fiora打造属于你的私密社交网络 今天给大家介绍一款免费开源的在线聊天工具——Fiora。它不仅是一款功能强大的即时通讯软件,更是开发者们展现创造力和技术实力的一个舞台。想象一下,在一个可以自由定制界面、扩展功能,并且完全开放源代码的平台上构建属于你自己的社交网络,这听起来是不是既刺激又充满挑战?Fiora不仅提供了丰富的功能和优秀的用户体验,还支持高度自定义。你可以根据个人喜好调整界面风格,添加各种插件来扩展功能。无论是文字、图片、文件传输,还是语音通话,Fiora都能满足你的需求。 阅读详情

一个即时通信系统架构实现的讨论转载

标签:

im系统架构

分类: 技术随想
 

前言:

看了些讨论类似QQ的系统的文章,自己以前参与的一个项目,就做这个,不过规模相对小点。写份文档,旨在清理清理思路,交流一下经验。这里的一些模块名称(ACS、NAS),采用了以前公司的命名方式,我觉得这么用不当,觉得没有必要令换个名字。文中的内容与那个系统也有很大的区别,时间太长了,很多东西记不清了是一个原因,再者一直觉得那东西问题多多,做了些更改,同时为简单起见,去掉了很多的细节内容。准确地说这里描述的系统应该是一个杜撰出来的,因此我想不涉及什么商业秘密。

 

一、摘要

这个系统就支持用户的能力,我觉得完全可以支持像QQ那样的用户规模,不过个人觉得要是那么大的用户规模的话要做不少的优化处理。我接手做这东西的时候,支持三十万左右的并发在线就会宕掉。经过我的一番修理基本可以稳定支持到40万用户。感觉这个系统设计的也还行吧。大致结构如下

二、整个系统的逻辑视图

 

一个即时通信系统架构实现的讨论

 

各模块的说明:

C-XX:用户端使用自己定义的协议与NAS、ACS进行通信,提供IM的基本功能。
NAS:为用户C-XX分配ACS服务器,在用户登录时进行。NAS简单的采用轮转的方式,依次分配系统中存在的ACS给登陆的用户。
ACS:为用户提供IM服务端功能,主要有用户信息的修改,用户状态的维护,用户消息的处理等。ACS之间的逻辑结构是网状的,任何两个ACS都可以平等的进行通信。
DB:保存用户的状态,不同的DB分成不同的区,维护不同段的用户。每个ACS到各个分区的数据库都有连接,ACS根据用户所在的区,访问相应的数据库,存取用户的数据。

C-XX、NAS、DB-X的具体内容在这里不做太多的讨论,主要描述一下ACS的具体结构,主要的模块如下

 

三、ACS的主要逻辑模块

一个即时通信系统架构实现的讨论

 

ACS中各个逻辑单元之间的描述:
UserAgentsManager:管理用户相应的Agent,登录到服务器的所有UserAgent由其进行维护。
UserAgent:用户的代理,提供用户功能的服务器侧实现。主要包括根据用户的操作,修改相应的数据库信息,维护用户状态,更新数据库中的用户状态和定位信息,包含用户的好友列表(Friends)维护用户的在线好友,根据用户的要求提供不同用户之间的通讯功能。
ServerManagerModule:收集服务器的性能信息,维护日志信息和配置信息等。
CommunicateWithOtherAcs:提供到其他ACS的通信服务功能。维护配置数据库中自身的状态,并从配置数据库中同步系统中其他ACS服务器的状态。
UserLocatorInfoCache:对于用户的定位信息,要在向指定的用户发送数据包的时候频繁使用到,为减少这种数据库的访问操作给服务器带来很大的压力,对这种信息进行缓存,减少对数据库的压力。
DatebaseAccessModule:提供数据库的访问接口。区分用户所在的段,到相应的数据库,存取用户的数据。

用户定位信息:包括用户ID,登录的ACS编号,用户登录使用的IP地址,用户登录使用的端口(Port),用户使用的网络类型。这些信息是实现用户间的通信必需的,这些信息的维护和获取是系统中一个核心任务,相关操作十分频繁。

 

四、物理部署视图

一个即时通信系统架构实现的讨论

 

说明:NAS为避免单点实效性,可以采用DNS或者NAT的方式,在多台服务器之间进行负载平衡。

 

五、主要流程

5.1 登录处理

一个即时通信系统架构实现的讨论

 

 

简单描述:用户的登录时,要将所有的在线好友的状态从数据库中取出,通知所有的好友用户登录事件,同时更新自己在数据库中的信息。以后用户数据包的转发,基本上是在好友之间的,保存好友的信息可以大量的减少对数据库的访问。

 

5.2 ACS转发用户的中转消息的处理

一个即时通信系统架构实现的讨论

 

简单描述:在向指定的用户发送信息的时候,需要用户的定位信息,这些信息依次在好友列表,本地缓存和数据库之中进行查询。实际测试发现,使用本地缓存可以大大减少对数据库的访问。

 

5.3 通过ACS转发消息

一个即时通信系统架构实现的讨论

 

简单描述:对于一些比较特殊的网络类型,如果需要保证数据包抵达指定用户,最稳妥的方式就是通过目的用户登录的ACS进行中转。在上图中User-01登录到ACS-01,User-02登录到ACS-02。

 

后记

一、支持更大规模应用的考虑

我不维护这个系统的时候,系统可以支持40万左右。当时的感觉系统并没有达到支持的上限,感觉可以支持到100万左右。对于系统的近一步扩大,觉得系统还有宽展的潜力,支持更大规模的应用不是什么问题。可以在以下方式进行扩展:

1、根据用户的使用习惯,细分分区,减少单个数据库的压力。服务器对于分区的变化能够给与相应的支持。
2、对于用户登录的ACS的分配,使用复杂的策略,可以区分用户,使用不同的ACS。对于系统压力分布的可以方便的调整。
3、感觉通过提高系统的配置性,可以实现不停的通过简单堆叠扩展系统容量,使系统随用户数量增加不断扩大。


 

二、和以前看过的一些系统的对照

后来感觉这个系统和GSM系统有些相似的地方,像保存用户信息和用户状态的数据库有点类似HLR的功用,对于ACS则有点像SMC,用户可以在各个ACS登录,登录到ACS后用户数据库中的用户状态要进行更新,以示其他用户和这个用户进行通信。对于NAS和ACS集群,很像个基于DNS的负载均衡系统。也许真的是万法归综…

(三)打造华丽的即时通信系统主界面,让你的聊天体验更有质感 通过本文的介绍,读者可以了解到用Qt实现即时通信系统的基本过程和关键技术,包括界面设计、通信功能实现等。其中,客户端与服务端之间的通信是即时通信系统的核心功能之一,可以使用QTcpSocket和QTcpServer类来实现。作为一个开源、跨平台的应用程序开发框架,Qt在即时通信系统的实现中发挥着重要的作用,它提供了丰富的控件和类库,使得开发者可以更加便捷地实现各种功能。未来,即时通信系统将会更加普及和广泛应用。 阅读详情

相关推荐

网络即时通信的原理和实现

网络即时通信的原理和实现 1. 背景介绍 1.1 即时通信的发展历程 1.2 即时通信的应用场景 1.3 即时通信的技术挑战

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 175

一个支持40万并发用户的即时通讯架构介绍

一个支持40万并发用户的企业即时通讯架构介绍2008年04月07日 星期一 13:17 前言: 看了些讨论类似QQ的系统的文章,自己以前参与的一个项目,就做这个,不过规模相对小点。写份文档,旨在清理清理思路,交流一下经验。这里的一些模块名称(ACS、N

神经网络爱好者 1804

Linux环境即时通信工具开发实战

即时通信工具是现代沟通中不可或缺的一部分,从个人消息交流到企业协作,其重要性不言而喻。在Linux环境下,由于其开源和强大的网络功能,成为开发这类工具的理想平台。本章节将概述Linux即时通信工具开发的关键点,为接下来的深入探讨打下基础。Socket编程是实现网络通信的一种方式,它允许两个进程之间进行数据交换。在Linux环境下,主要有以下两种类型的socket:流式socket(SOCK_STREAM):基于TCP协议,保证数据的可靠传输,适用于需要高可靠性的应用。

weixin_42524864的博客 621

40万用户同时在线 服务器,40万访问量的网站,需要服务器什么样的配置?

40w IP这访问量很小,按照互联网的行业规矩,每天按8小时计算(夜间等时间段排除),40W IP大约是 400000/8*3600=14,也就是TPS才十几而已,同时在线人数=TPS×3,也就是大约40人左右,远远不到4000人。当然有些业务存在高峰,满打满算,你TPS也不过100多,日IP 40万真的不算事。微博和阿里这种网站,是QPS就好几万,每天十几亿的访问量。做了这个对比后,你大概就知道...

weixin_36410141的博客 2056

利用QT开发即时通信系统的全流程

即时通信系统在现代软件开发中扮演着至关重要的角色。它不仅为用户提供实时交互的平台,而且在商业和社交领域中都占有一席之地。本章将对QT(Qt)框架在即时通信实现中所扮演的角色进行概述,提供一个全面了解的基础。首先,我们将简要介绍即时通信系统的功能和重要性,概述它如何满足用户对于即时消息传递的需求。随后,我们将目光转向QT框架,这个由Nokia发起的跨平台应用开发工具集,它在图形用户界面(GUI)和网络通信方面提供了强大的支持。

weixin_35636570的博客 1086

全面安全即时通信系统构建与设计指南

在即时通信系统中,数据加密技术是保证用户信息安全的基石。通过对信息进行加密,可以有效防止数据在传输过程中被窃取或篡改。数据加密主要分为对称加密和非对称加密两大类。消息摘要:消息摘要是一种单向加密函数,能够产生出原始数据的唯一指纹(或散列值)。即使数据的极小部分发生变化,散列值也会截然不同。这种特性使得消息摘要成为检测数据完整性的一种有效手段。数字签名:数字签名利用公钥加密技术,由发送者生成并附加到消息上。

weixin_31569663的博客 1042

群晖上搭建teamspeak3语音服务器

TeamSpeak 是一款团队语音通讯工具。

wbsu2004的博客 1万+

Web IM即时通信系统开发与实现

NutzBoot是一个轻量级且模块化的Java Web框架,它利用依赖注入、AOP等设计模式简化了企业级应用的开发流程。NutzBoot的设计理念是快速开发、快速部署。它不仅集成了Nutz框架的多种功能,还提供了一个高度可配置的应用启动器,使得开发人员可以迅速启动一个基于Spring Boot、MyBatis、Shiro等主流框架的Web应用。NutzBoot的核心特点之一是零配置启动,它默认提供了一套通用配置,允许开发者在没有额外配置文件的情况下快速启动项目。

weixin_30674431的博客 950

架构师之路-创业互联网公司如何搭建自己的技术架构

本文主要针对中小型互联网公司,特别适用于手机APP或者pc的后台架构,基本可以支撑5万日活本文会对可能用到的相关技术进行技术选型的说明,以及技术的架构介绍,技术架构的介绍课程后面有地址,可以点进去查看。 技术指标 说一下一些技术指标的计算过程可以作为其他同学的参考 QPS, 如果是5万日活,使用集中在每天的4小时,每个用户大概产生100的请求,那么平均下来,我们系统大概应该支撑的请求为:50

yiyou1111的专栏 582

基于Socket的网络即时通信系统设计与实现

即时通信系统的本质是“状态同步”与“事件通知”,无论是文本聊天、图片分享还是系统指令下发,所有交互都必须建立在一个清晰、一致且具备扩展能力的消息模型之上。因此,在设计底层通信协议之前,首先需要从逻辑层面明确每条消息所承载的信息维度及其组织方式。在第五章定义的消息框架基础上,可扩展专用的心跳类型。

weixin_32661831的博客 823

win10系统下使用Mask_Rcnn训练自己的数据

版权所有,翻版必究。https://mp.youkuaiyun.com/console/editor/html/106094147 运行环境:WIN10,pycharm,相应的CUDA,CUDNN,tensorflow1.15.0,tensorflow-gpu-1.14.0,Anaconda3 第一步:Mask RCNN开源项目:https://github.com/matterport/Mask_RCNN 第一步:数据准备 首先安装labelme进行数据的标注。安装方法pip install labe

fightingxyz的博客 1750

基于Linux及QT的即时通信系统的设计与实现

基于Linux及QT的即时通信系统写在前面环境功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 写在前面 刚刚做完毕设,论文也查完重,有了时间写下总结。说实话毕设选这个题其实是有点水的,原因呢,就是由于年前在公司实习,年后也准备去,

qq_39582126的博客 4813

Photoscan+Smart3D+CC组合建模实战:如何用三款工具打造高精度实景模型

本文详细介绍了如何整合Photoscan、Smart3D和ContextCapture三款软件,构建高效高精度的实景三维建模工作流。通过利用Photoscan稳健的空三解算、Smart3D精准的刺点优化,以及ContextCapture强大的最终建模能力,该方案能有效应对复杂地形与海量数据,显著提升模型质量与生产效率,适用于测绘、文化遗产数字化等专业领域。

weixin_29230649的博客 104

QT6 C++ 高仿QQ -- 1.企业级即时通信系统架构

本文主要是以QT6 C++开发企业级即时通信系统软件,包含整体架构,各部分软件主要功能介绍,重点介绍及时通信软件客户端软件irtc-client的功能,采用QT6 C++ QWidgetj技术开发客户端软件,详细列出了客户端软件重点功能和使用到的QT技术和部件

qq_30812427的博客 1500

U型槽微带贴片天线:从理论公式到带宽扩展实战

本文深入探讨了U型槽微带贴片天线的设计与带宽扩展实战。针对传统微带天线带宽窄的痛点,详细解析了通过引入U型槽形成双谐振点以拓宽带宽的原理,并提供了从MATLAB理论计算、ANSYS HFSS仿真建模到参数优化的一站式工程指南。文章还分享了多种带宽扩展组合技巧及仿真与实测避坑经验,助力射频工程师设计出高性能的宽带微带天线。

weixin_29168153的博客 447

自学PCB思路 | PCB设计零基础入门-小白适用(附详细入门经验分享)

本人大一在实践课上就听说PCB,被虎的一楞一楞的,不过现在回看,发现其实并没有相信的那么难!想着把自己这一路摸索的学习路线分享一下,当时我是一边摸索一边上手,一把鼻涕一把泪的过来的。如果你想搞硬件或者需要搞硬件,下面是我的入门学习过程,希望可以帮到你。目录前言选择一款设计软件好的入门课程掌握抄板元件采购焊板子烙铁头热风枪自己半设计明确设计需求全设计最后我并非什么大佬,也没法自己去教大家如何画板。

自动化小秋葵的博客 1万+

基于浏览器的即时通信系统架构设计

网页客户端即时通信系统架构设计 设计背景需求,某医院要求开发一套医疗辅助系统(2010年) 功能需求模块 医生在线答疑模块。(本人负责的) 医疗报告通知模块。(本人负责的) 生产环境 客户端:PC机,windows xp操作系统,IE6浏览器 服务端:三台(x86)服务器,内存24G, 硬盘空间2T,内部网络千兆口, 有固定外网IP. 开发环境 开发平台: Linux(ubuntu 14.1), ...

pzhu1015的专栏 89

告别OLE!Delphi操作Excel的3种轻量级方案横向评测(FlexCel/XLSReadWriteII/LibXL)

本文深入评测了Delphi操作Excel的三种轻量级方案:FlexCel、XLSReadWriteII和LibXL。通过技术架构、API设计、性能测试和实战案例的全面对比,帮助开发者选择最适合的工具,提升Excel文件处理效率,告别传统OLE方案的依赖和性能问题。

onion的博客 929

【亲测免费】 探索加密通信的未来:基于Java的即时通信系统

探索加密通信的未来:基于Java的即时通信系统 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今数字化时代,信息安全已成为企业和个人关注的焦点。为了应对日益增长的网络安全威胁,我们推出了一款基于加密安全的Java即时通信系统。该系统不仅提供即时通信功能,还通过端到端的加密技术确保用户信息在传输过程中的安全性。无论是学生、开发者还是企业用户,都能从中受益,深入了解和...

gitblog_09777的博客 778

Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 论文笔记

Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 论文笔记-----GCN在交通领域的应用(二) 一、论文翻译: 1、摘要: 及时准确地交通预测对于城市交通控制和指导具有至关重要的意义。由于交通流量的非线性和复杂性,传统的方法不能满足中长期预测任务的需求,并且往往会忽略时空数据的时间和空间依赖特性。在这篇论文中,为了处理在交通领域的时间序列预测问题...

cy_believ的博客 1916

命名管道和匿名管道

我们知道进程间是可以通信的。可以达到数据传输、资源共享、事件通知、进程控制等目的。进程间通信主要包括管道、系统IPC,套接字等。 管道分为三种: 普通管道:一是单工,只能单向传输 ,二是仅能在父子进程或者兄弟进程中使用。 流管道:去除了第一种限制,为半双工,可以双向传递, 命名管道:去除了第二种限制 ,可以在很多并不相关的进程 中进行通信。 1、普通管道 int pipe(int f...

ffsiwei的博客 1万+

基于Golang的即时通信系统

编写了服务端、客户端、用户端,实现了基于Golang的即时通信系统

代码小白 1028

华为OD机试真题 新系统2026-04-08 C语言 实现【直捣黄龙】

小王在玩一款叫做直捣黄龙的小游戏,在该游戏中他需要从入口位置进入敌营,绕过哨兵的层层封锁,达到敌军司令部实施斩首行动。 敌军阵营是一个n*n的矩阵,入口在坐标(0,n/2),敌军司令部在坐标(n-1,n/2),每个哨兵警戒以自己为中心的9宫格,一旦被哨兵发现则行动失败。

MISAYAONE的博客 183

微服务即时通信系统C++实现。

系统采用微服务架构,主要分为用户服务、消息服务、在线状态服务和推送服务。每个服务独立部署,通过gRPC进行通信。服务发现使用Consul,消息队列使用RabbitMQ。

YgM_kfjo的博客 201

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android--Android平台即时通信系统

Android平台即时通信系统

Navan 702

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: “由于应用程序配置不正确,应用程序未能启动”的问题
下一篇: VS2008 编译 boost 1.45 环境
captain_x
博客等级 码龄22年 37粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值