分布式聊天系统(IM)架构

本文分析了原有即时聊天系统在高并发、大消息量场景下的问题,并提出了优化方案:使用http服务器集群,Gate和Core服务器改为集群并引入高速交互区和消息队列,以及利用内存数据库和NOSQL提升响应速度。这种优化设计简化了架构,增强了系统的可扩展性和处理能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简谈即时聊天系统设计一文中我们架构了一个可用的聊天系统整体架构,这个架构可用,但是真正的实用角度来说,只能应付承载人数和发送消息较少的情况。本问我们来分析前面架构对于大用户量和大消息量所遇到的问题并给出新的高并发量和高消息量的架构。

根据此架构图,大量的用户会产生大量的连接和所有http的请求压力,而这些压力进而带来对数据库和存储的访问读写压力;大量的消息带来的就是引起gate服务器的消息收发处理和core服务器处理的压力。所以应该优化如下三个方面:

  1. 对于三个http服务器(http用户服务器,http离线消息服务器,http文件服务器)的访问速度和访问量的提升。
  2. Gate服务器管理更多的连接,更多更快的收发的消息,core服务器能处理更多的消息校验和转发。
  3. 服务器之间响应消息的速度提升。
  4. 提升对数据库的响应能力。

针对上面的问题,做出了如下的优化结构,如图:

【资源介绍】 Java基于Netty实现的高性能分布式IM即时通信系统源码+项目说明.tar 介绍 `RIM`是基于Netty实现的面相开发者的高性能分布式即时通信系统,保证消息的实时性、有序性、可靠性。 ## 技术栈 | 名称 | 作用 | | -------------- | ------------------------------------------------------------ | | SpringBoot | 利用IOC特性简化开发 | | Mybaits-plus | 简化与mysql的交互过程 | | Netty | 高性能消息收发、心跳检测、应用层ACK | | Redis | 保存用户会话信息、去重信息、群聊单聊的离线消息以及其他信息的缓存 | | Mysql | 持久化信息 | | RabbitMQ | 将存储操作异步,利用RabbitMQ的可靠性机制返回ACK | | Zookeeper | 注册中心、感知服务节点变化情况 | | Dubbo | 在路由层利用泛化调用实现定向功能调用,以及服务之间方法调用 | | Kryo | 序列化协议 | | Leaf-SnowFlake | 利用美团改进的雪花算法生成局部有序的消息id | ## 模块结构 | 模块 | 作用 | | ---------------- | ------------------------------------------------------------ | | rim-client | 客户端:负责接入IM系统、应用层ACK | | rim-router | 路由层:负责消息(群聊、单聊、离线)转发、用户回话信息管理、应用层ACK | | rim-server | 服务层:消息推送 | | rim-store | 存储层:消息(群聊、私聊)持久化、离线消息查询、应用层ACK | | rim-id-generator | ID生成层:生成群聊、单聊的消息id | ## 亮点 + 设计模式 + 使用策略模式实现Client的各种内置命令、Netty接收消息处理、Router转发逻辑等功能 + 使用读扩散实现群聊离线消息拉取 + 使用RabbitMQ的可靠性机制为客户端返回ACK、异步执行消息持久化 + 使用Dubbo的泛化调用机制实现服务的定向调用,解决了因分布式IM_Server的部署导致的用户信息分散在不同服务器上的问题 + Dubbo泛化调用的地址为一致性哈希负载均衡算法计算所得 + 解决了自定义协议在传输中导致的粘包、拆包问题 + 群聊批量ACK处理,避免因创建过多的超时计时器导致的压力过大 + 利用leaf-sno 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,也适用于小白学习入门进阶。当然也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或者热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载,沟通交流,互相学习,共同进步!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值