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

文章 4小时前 juejinhot
1 0

🚀 开源分布式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% 系统可用性
  • 高性能: 毫秒级消息延迟
  • 稳定可靠: 完善的容错和恢复机制
  • 灵活好扩展: 微服务架构,水平扩展支持
  • 可观测: 完整的监控和链路追踪体系

硬件&服务器情况

我自己从0-1搭建了个人服务器,所有程序均在跑在这个ESXI服务器上。

磁盘情况:

虚拟机 (已开机6台) 情况:

🏗️ 系统架构设计

架构总览

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

  • 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<br/>异步业务处理]
    D --> F[查询接收方在线状态<br/>实时消息路由]
    
    %% 异步业务处理分支
    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分支,一键启动即可:

# 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客户端启动

# 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修复: 修复已知小问题

🌿 分支管理

# 创建功能分支
git checkout -b feature/your-feature-name

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

📝 提交信息规范

# 格式: type(scope): description

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

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

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

📋 功能开发进度表

图例说明:

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

🔐 登录&注册

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

💬 单聊相关

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

🗨️ 群聊相关

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

📋 会话相关

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

🔧 其他功能

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

💬 交流与合作

👨‍💻 项目维护者

蝎子莱莱爱打怪

  • 📧 邮箱: h163361631@163.com
  • 📝 博客: 稀土掘金
  • 🐙 GitHub: @598572

微信:15230853779

💬 交流群

加我微信 我拉入群。

加入步骤:

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

📧 联系方式

  • 项目讨论: GitHub Discussions
  • 问题反馈: GitHub Issues
  • 代码贡献: Pull Requests

🎯 项目亮点

🏗️ 架构设计亮点

  • 微服务架构: 采用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系统! 🚀

🔗 相关链接

  • 服务端仓库: github.com/598572/xzll…
  • 客户端仓库: github.com/598572/xzll…
  • 技术博客: juejin.cn/user/123990…
  • 在线演示: 正在准备中...

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

版权声明:juejinhot 发表于 2025-09-19 17:45:49。
转载请注明:🚀🚀🚀嗨,一起来开发 开源IM系统呀! | 程序员导航网

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...