🚀🚀🚀嗨,一起来开发 开源IM系统呀!

🚀 开源分布式IM系统:致力于打造一款现代化、分布式、高并发、高可用的即时通讯解决方案!

前言

大家好,我是蝎子莱莱爱打怪 ,今天和大家分享一个我个人历时多年设计和开发的开源项目------xzll-im分布式即时通讯系统

(本文是我对项目中 README 的摘抄,发表此文目的为了让更多人看到并参与到此项目中)

与IM结缘是在2022年,因为此类系统有足够大的挑战性,所以我对此如痴如醉。之前做过架构以及细节方面的设计,但是一直没有落地。不落地的设计不是好设计,所以有了这个项目。

📱 项目仓库

端侧 技术栈 GitHub地址 描述
🖥️ 服务端 Java + Spring Cloud + Dubbo + Netty xzll-im-server 分布式IM后端服务
📱 客户端 Flutter + Dart xzll-im-flutter-client 跨平台移动客户端

🎯 项目目标

想要设计一个好的IM系统,是很有难度的,本项目将尽可能达到以下几点:

  • 高并发: 支持万级并发用户
  • 高可用: 99.9% 系统可用性
  • 高性能: 毫秒级消息延迟
  • 稳定可靠: 完善的容错和恢复机制
  • 灵活好扩展: 微服务架构,水平扩展支持
  • 可观测: 完整的监控和链路追踪体系

🏗️ 系统架构设计

架构总览

整个系统采用微服务架构,主要包含以下核心服务:

  • im-gateway: 统一API网关,负责路由分发、限流熔断
  • im-auth: 认证服务,处理用户登录、JWT令牌管理
  • im-connect: 长连接服务,基于Netty的WebSocket通信
  • im-business: 核心业务服务,消息处理和业务逻辑
  • im-console: 管理后台服务,提供运营管理接口
  • im-data-sync: 数据同步服务,负责HBase到ES的数据同步

物理部署拓扑

节点配置表

节点IP 节点角色 部署组件 端口 用途
192.168.1.101 负载均衡+代理 Nginx, FRP Client, IM服务(规划) 80/443 流量入口、内网穿透
192.168.1.102 监控节点 Prometheus, Grafana, Skywalking, IM服务(规划) 9090/3000/8080 系统监控、链路追踪
192.168.1.150 应用服务 IM微服务群、Nacos、Jenkins、Docker 8081-8085/10001/8848 核心业务逻辑
192.168.1.130 集群主节点 ZK Master, RMQ Master, HBase Master, HDFS NameNode, MySQL Master 2181/9876/3306 集群协调、数据管理、主数据库
192.168.1.131 集群从节点1 ZK Follower, RMQ Follower, HBase RegionServer, Redis, MySQL Slave 2181/9876/6379/3306 数据存储、缓存、从数据库
192.168.1.132 集群从节点2 ZK Follower, RMQ Follower, HBase RegionServer, ES 2181/9876/9200 数据存储、搜索

🔄 核心业务流程

用户登录流程

sequenceDiagram participant C as 客户端 participant G as Gateway participant A as Auth服务 participant M as MySQL participant R as Redis participant CON as Connect服务 C->>G: 登录请求(username/password/device_type) G->>A: 转发认证请求 A->>M: 查询用户信息验证凭据 M->>A: 返回用户数据 A->>A: 生成JWT Token A->>R: 存储Token和用户ID映射 A->>G: 返回JWT Token G->>C: 登录成功响应 Note over C: 客户端使用Token建立WebSocket连接 C->>CON: WebSocket连接(携带Token) CON->>R: 验证Token有效性 R->>CON: Token验证通过 CON->>C: WebSocket连接建立成功

单聊消息发送流程

流程图版本(逻辑流向)
flowchart LR A[客户端发送消息] --> B[Connect服务接收] B --> C[策略分发C2CMsgSendStrategyImpl] %% 并行处理分支 C --> D{并行处理} D --> E[发送到RocketMQ
异步业务处理] D --> F[查询接收方在线状态
实时消息路由] %% 异步业务处理分支 E --> G[Business服务消费MQ] G --> H[C2CSendMsgHandler处理] H --> I{并行数据存储} I --> J[MySQL存储会话信息] I --> K[HBase存储消息记录] K --> L[触发ES数据同步] L --> M[DataSync批量写入ES] J --> N[增加未读计数Redis] K --> N N --> O[Dubbo RPC发送Server ACK] O --> P[推送ACK给发送方] %% 实时消息路由分支 F --> Q{接收方状态判断} Q -->|在线且在本机| R[直接推送WebSocket消息] Q -->|在线但在其他机器| S[Dubbo RPC转发到目标机器] Q -->|离线| T[发送离线消息事件] S --> U[目标机器推送消息] T --> V[Business处理离线消息] V --> W[更新HBase状态为离线] W --> X[存储离线消息到Redis] X --> Y[伪造未读ACK给发送方] %% 消息确认流程 R --> Z[接收方发送ACK] U --> Z Z --> AA[Connect转发ACK到MQ] AA --> BB[Business处理ACK] BB --> CC[更新HBase消息状态] CC --> DD[触发状态更新ES同步] CC --> EE[清零未读计数if已读] EE --> FF[Dubbo发送ACK给发送方] FF --> GG[推送ACK确认] %% 样式定义 classDef connectService fill:#e1f5fe classDef businessService fill:#f3e5f5 classDef mq fill:#fff3e0 classDef storage fill:#e8f5e8 classDef client fill:#ffebee class B,C,F,Q,Z,AA connectService class G,H,V,BB businessService class E,L,T,AA mq class J,K,M,W,CC storage class A,R,U,Y,GG client

💻 技术栈总览

技术架构图谱

技术层次 技术选型 状态 用途说明
📱 客户端层 Flutter + Dart 跨平台移动客户端开发
🌐 接入层 Nginx 负载均衡、反向代理、HTTPS终结
🚪 网关层 Spring Cloud Gateway 统一API网关、路由分发、限流熔断
🔧 业务层 Spring Boot + Spring Cloud 微服务应用框架、服务治理
🔗 通信层 Netty + WebSocket + Dubbo 长连接通信、RPC服务调用
🔐 安全层 OAuth2 + Spring Security + JWT 身份认证、权限控制、令牌管理
⚙️ 中间件层 Nacos + ZooKeeper + RocketMQ 服务注册发现、消息队列、配置管理
💾 存储层 MySQL + HBase + Redis + ES 关系数据、大数据、缓存、搜索
📊 监控层 Prometheus + Grafana + Skywalking ✅/⏳ 性能监控、链路追踪、可视化
🚀 部署层 Jenkins + Docker Compose CI/CD流水线、容器编排部署

详细技术栈

分类 技术 版本 状态 说明
📱 前端 Flutter 3.24+ 跨平台UI框架,支持Android/iOS
📱 前端 Dart 3.4.4+ 现代化编程语言,强类型安全
🖥️ 后端 Java 11 核心编程语言
🖥️ 后端 Spring Boot 2.7.0 应用开发框架
🖥️ 后端 Spring Cloud 2021.0.3 微服务治理框架
🖥️ 后端 Spring Cloud Alibaba 2021.0.1.0 阿里云微服务套件
🖥️ 后端 Netty 4.1.75 高性能网络通信框架
🖥️ 后端 Dubbo 3.0.7 高性能RPC框架
⚙️ 中间件 Nacos 2.0.3 微服务注册中心、配置中心、服务发现
⚙️ 中间件 RocketMQ 5.3.0 分布式消息队列、削峰填谷
💾 存储 MySQL 8.0.23 关系型数据库、主从复制
💾 存储 HBase 2.6.1 分布式NoSQL、海量消息存储
💾 存储 Redis 6.2.6 内存数据库、缓存、分布式锁
💾 存储 Elasticsearch 7.17.5 搜索引擎、消息全文检索

✨ 核心功能概览

✅ 已实现功能

  • 🔐 用户认证: 注册、登录(OAuth2 + JWT)
  • 💬 单聊消息: 文字消息发送、撤回、ACK确认
  • 📊 消息存储: HBase分布式存储 + Elasticsearch搜索
  • 🔄 离线消息: Push推送机制(Pull拉取开发中)
  • 实时通信: WebSocket长连接 + Netty高性能
  • 🆔 消息ID: 分布式唯一ID生成算法
  • 💓 心跳检测: 服务端自动剔除超时连接

🚧 开发中功能

  • 📱 Flutter客户端: 聊天界面和交互逻辑
  • 📋 会话管理: 最近会话列表

📋 规划功能

  • 🗨️ 群聊系统: 群组消息、群管理(写扩散模型)
  • 👥 好友系统: 好友关系管理
  • 📁 多媒体消息: 图片、语音、视频消息
  • 🔍 消息搜索: 基于Elasticsearch的全文检索
  • 📱 客户端增强: 断线重连、消息排序、防重处理
  • 🎯 会话功能: 置顶、删除、免打扰
  • 📹 音视频通话: WebRTC实时通信
  • 📺 直播功能: 实时直播推流

🚀 快速启动

🖥️ 服务端启动

项目提供了线上测试环境,相关依赖的中间件都已经部署在服务器上,公网可流畅连接。

IDEA中运行

直接下载此项目main分支,一键启动即可:

bash 复制代码
# 1. 克隆项目
git clone https://github.com/598572/xzll-im-server.git
cd xzll-im-server

# 2. 导入IDEA项目
# 打开IntelliJ IDEA,选择"Open",选择项目根目录
# 等待Maven依赖下载完成(首次可能需要5-10分钟)
微服务启动顺序

重要: 必须按以下顺序启动,确保服务依赖关系正确:

  1. im-auth (认证服务) - 端口:8082

    • 位置: im-auth/src/main/java/com/xzll/auth/IMAuthServiceApplication.java
    • 作用: 用户认证、JWT令牌生成
  2. im-connect (长连接服务) - 端口:10001

    • 位置: im-connect/im-connect-service/src/main/java/com/xzll/connect/IMConnectServiceApplication.java
    • 作用: WebSocket连接管理、实时消息推送
  3. im-business (业务服务) - 端口:8083

    • 位置: im-business/im-business-service/src/main/java/com/xzll/business/IMBusinessServiceApplication.java
    • 作用: 核心业务逻辑、消息处理
  4. im-console (控制台服务) - 端口:8084

    • 位置: im-console/im-console-service/src/main/java/com/xzll/console/IMConsoleServiceImplApplication.java
    • 作用: 管理后台接口
  5. im-data-sync (数据同步服务) - 端口:8085

    • 位置: im-data-sync/src/main/java/com/xzll/datasync/IMDataSyncApplication.java
    • 作用: HBase到Elasticsearch数据同步

📱 Flutter客户端启动

bash 复制代码
# 1. 克隆Flutter客户端
git clone https://github.com/598572/xzll-im-flutter-client.git
cd xzll-im-flutter-client

# 2. 安装依赖
flutter pub get

# 3. 检查Flutter环境
flutter doctor

# 4. 启动应用(确保设备已连接)
flutter run

🤝 如何参与开发

🔥 高优先级任务

  • 📱 客户端开发: Flutter前端界面和交互
  • 🗨️ 群聊功能: 群组消息、群管理
  • 👥 好友系统: 好友关系管理
  • 🔍 消息搜索: 基于Elasticsearch的全文检索
  • 📁 多媒体消息: 图片、语音、视频消息

🌟 中优先级任务

  • 📋 会话管理: 置顶、删除、免打扰
  • 🔄 断线重连: 客户端重连机制
  • 📊 性能优化: 系统性能调优
  • 📖 文档完善: 技术文档和API文档

👶 新手友好任务

  • 📝 文档完善: 补充代码注释、API文档
  • 🧪 测试编写: 添加单元测试用例
  • 🎨 UI优化: Flutter界面美化
  • 🐛 简单Bug修复: 修复已知小问题

🌿 分支管理

bash 复制代码
# 创建功能分支
git checkout -b feature/your-feature-name

# 示例分支命名
feature/group-chat          # 群聊功能
feature/friend-system       # 好友系统  
feature/message-search      # 消息搜索
bugfix/connection-issue     # 连接问题修复
docs/api-documentation      # API文档编写

📝 提交信息规范

bash 复制代码
# 格式: type(scope): description

# 功能开发
feat(auth): 添加OAuth2认证功能
feat(chat): 实现群聊消息发送

# 问题修复  
fix(connect): 修复WebSocket连接断开问题
fix(ui): 修复聊天界面滚动卡顿

# 文档更新
docs(api): 更新REST API文档
docs(readme): 完善部署说明

📋 功能开发进度表

图例说明:

  • ⬜ :未实现
  • ⏳ :正在进行中
  • ✅ :已实现
  • ❌ :已取消

🔐 登录&注册

功能 当前进度 实现者 备注
注册 后端✅,前端✅ 蝎子莱莱爱打怪 用户注册功能完整实现
登录 后端✅,前端✅ 蝎子莱莱爱打怪 登录成功后按算法选取可用长连接服务

💬 单聊相关

功能 当前进度 实现者 备注
单聊(发文字) 后端✅,前端⏳ 后端(蝎子莱莱爱打怪),前端(蝎子莱莱爱打怪) 🔥 高优先级
单聊(发图片) 后端⬜,前端⬜ - 🔥 高优先级
单聊(发语音) 后端⬜,前端⬜ - 🔥 高优先级
单聊(撤回) 后端✅,前端⬜ 后端(蝎子莱莱爱打怪) 🔥 高优先级
单聊(ACK确认) 后端✅,前端⬜ 后端(蝎子莱莱爱打怪) 🔥 高优先级

🗨️ 群聊相关

功能 当前进度 备注
群聊(方案/表设计) 🚀 高级任务 - 采用写扩散模型
群聊(发文字) 后端⬜,前端⬜ 🚀 高级任务
群聊(群管理) 后端⬜,前端⬜ 🚀 高级任务 - 创建/退出/解散/角色管理

📋 会话相关

功能 当前进度 备注
最近会话列表 后端⏳,前端⏳ 🔥 高优先级
置顶 后端⬜,前端⬜ 🌟 中优先级
删除会话 后端⬜,前端⬜ 🌟 中优先级

🔧 其他功能

功能 当前进度 备注
离线消息 后端✅,前端⬜ Push✅+Pull⬜
客户端断线重连 前端⬜ 🔥 高优先级 - 后端无需参与
聊天消息搜索 后端⬜,前端⬜ 🌟 中优先级 - 基于ES
消息失败重试 后端✅,前端⬜ 🔥 高优先级

💬 交流与合作

👨‍💻 项目维护者

蝎子莱莱爱打怪

微信:

💬 交流群

加我微信 我拉入群。

加入步骤:

  1. 扫码添加个人微信(15230853779)
  2. 说明来意(参与开源项目)
  3. 邀请进入技术交流群

📧 联系方式

🎯 项目亮点

🏗️ 架构设计亮点

  • 微服务架构: 采用Spring Cloud生态,服务拆分合理
  • 高性能通信: Netty + WebSocket实现高并发长连接
  • 消息可靠性: RocketMQ削峰填谷,保证消息不丢失
  • 数据存储: MySQL + HBase + Redis + ES多层存储架构
  • 服务治理: Nacos + Dubbo实现服务注册发现和RPC调用

💡 技术创新点

  • 分布式消息ID: 自研分布式唯一ID生成算法
  • 读扩散群聊: 群聊采用读扩散模型,性能更优
  • 离线消息: Push + Pull双重保障离线消息可达
  • 实时路由: 智能路由算法,支持跨机器消息推送
  • 数据同步: 异步数据同步机制,HBase到ES实时同步
  • 分布式水平扩容: im-connect、im-data-sync、im-business均可水平横向无限扩容

🔧 工程化实践

  • CI/CD: Jenkins自动化构建部署
  • 容器化: Docker Compose一键部署
  • 监控体系: Prometheus + Grafana + Skywalking全栈监控
  • 代码规范: 统一的编码规范和提交规范
  • 文档体系: 完善的技术文档和API文档

🌟 写在最后

这个项目承载着我对技术的热爱和对开源精神的信仰。每一行代码都经过深思熟虑,每一个架构决策都有其考量。我希望这个项目不仅仅是一个IM系统,更是一个学习和交流的平台。

如果你对分布式系统、即时通讯、微服务架构感兴趣,或者想要参与开源项目,欢迎加入我们!无论你是资深开发者还是初学者,都能在这里找到适合自己的任务。

让我们一起打造优秀的开源IM系统! 🚀


🔗 相关链接

如果这个项目对你有帮助,请给个⭐Star支持一下!

相关推荐
Enddme2 小时前
《前端笔试必备:JavaScript ACM输入输出模板》
前端·javascript·面试
前端鱼2 小时前
前端面试中值得关注的js题
前端·面试
豌豆花下猫2 小时前
Python 潮流周刊#119:Google 停止开发 Pytype!
后端·python·ai
易元2 小时前
模式组合应用-外观模式
后端·设计模式
龙卷风04052 小时前
SpringAI调用第三方模型增加自定义请求参数
java·后端
Aurora_NeAr2 小时前
对比Java学习Go——函数、集合和OOP
后端
UnnamedOrange2 小时前
有来前后端部署
前端·后端
Aurora_NeAr2 小时前
Golang并发编程及其高级特性
后端·go
德育处主任2 小时前
p5.js 绘制 3D 椭球体 ellipsoid
前端·javascript·数据可视化