🚀🚀🚀嗨,一起來開發 開源IM系統呀!

Image

🚀 開源分布式IM系統:致力於打造一款現代化、分布式、高並發、高可用的即時通訊解決方案!

前言

大家好,我是蝎子莱莱爱打怪,今天和大家分享一個我個人歷時多年設計和開發的開源項目——xzll-im分布式即時通訊系統

(本文是我對項目中 README 的摘抄,發表此文目的為了讓更多人看到並參與到此項目中)

與IM結緣是在2022年,因為此類系統有足夠大的挑戰性,所以我對此如痴如醉。之前做過架構以及細節方面的設計,但一直沒有落地。不落地的設計不是好設計,所以有了這個項目。

GitHub Stars
GitHub Forks
License

📱 專案倉庫

端側 技術棧 GitHub地址 描述
🖥️ 伺服器端 Java + Spring Cloud + Dubbo + Netty xzll-im-server 分布式IM後端服務
📱 客戶端 Flutter + Dart xzll-im-flutter-client 跨平台移動客戶端

🎯 專案目標

想要設計一個好的IM系統,是很有難度的,本專案將盡可能達到以下幾點:

  • 高並發: 支援百萬級並發用戶
  • 高可用: 99.9% 系統可用性
  • 高性能: 毫秒級訊息延遲
  • 穩定可靠: 完善的容錯和恢復機制
  • 靈活好擴展: 微服務架構,水平擴展支援
  • 可觀測: 完整的監控和鏈路追蹤體系

硬體&伺服器情況

我自己從0-1搭建了個人伺服器,所有程式均在跑在這個ESXI伺服器上。

磁碟情況:
Image

虛擬機 (已開機6台) 情況:
Image

🏗️ 系統架構設計

Image

架構總覽

整個系統採用微服務架構,主要包含以下核心服務:

  • im-gateway: 統一API網關,負責路由分發、限流熔斷
  • im-auth: 認證服務,處理用戶登入、JWT令牌管理
  • im-connect: 長連接服務,基於Netty的WebSocket通訊
  • im-business: 核心業務服務,訊息處理和業務邏輯
  • im-console: 管理後台服務,提供運營管理介面
  • im-data-sync: 數據同步服務,負責HBase到ES的數據同步

物理部署拓撲

Image

節點配置表

節點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 數據存儲、搜尋

🔄 核心業務流程

用戶登入流程

單聊訊息發送流程

流程圖版本(邏輯流向)

💻 技術棧總覽

技術架構圖譜

技術層次 技術選型 狀態 用途說明
📱 客戶端層 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
訊息失敗重試 後端✅,前端⬜ 🔥 高優先級

💬 交流與合作

👨‍💻 專案維護者

蝎子莱莱爱打怪

微信:15230853779

💬 交流群

加我微信 我拉入群。

加入步驟:

  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支持一下!


原文出處:https://juejin.cn/post/7549107076905173028


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝11   💬6   ❤️6
473
🥈
我愛JS
📝1   💬5   ❤️4
92
🥉
AppleLily
📝1   💬4   ❤️1
53
#4
💬1  
5
#5
xxuan
💬1  
3
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次