一个基于 C++17 和 Boost.Asio 实现的高性能分布式 IM 后端。 采用 Reactor 模型与 gRPC 微服务架构,设计了全异步数据库连接池与应用层可靠传输协议。 实测性能:单机支持 20,000+ 并发长连接,峰值吞吐量 5,000+ QPS。
- 底层网络封装:基于 Linux Epoll + Boost.Asio 封装,采用 One Loop Per Thread 线程模型,最大化多核利用率。
- 分布式架构:
- 网关服务 (GateServer):处理 TCP 长连接接入与负载均衡。
- 业务服务 (ChatServer 集群):分布式部署,处理消息转发与存储逻辑。
- 状态服务 (StatusServer):通过 gRPC 维护全局用户在线状态与 Session 路由。
- 异构服务 (VerifyServer):引入 Node.js 生态处理邮件/验证码等 IO 密集型任务。
- 深度稳定性优化:
- 异步 DB 连接池:设计支持超时熔断与自动重连的 MySQL 连接池,消除同步阻塞。
- 协议设计:自定义 Header+Body 双阶段读取协议,彻底解决 TCP 粘包/半包问题。
- RAII 管理:利用
std::shared_ptr与weak_ptr锁定回调中的对象生命周期,防止 CoreDump。
本项目采用微服务拆分,主要包含以下模块:
.
├── ChatServer // [核心] 业务逻辑服务节点 1 (C++, Asio, MySQL)
├── ChatServer2 // [扩展] 业务逻辑服务节点 2 (用于模拟分布式集群部署)
├── GateServer // [网关] 负载均衡与连接分发 (C++, Asio)
├── StatusServer // [状态] 全局路由与状态管理 (C++, gRPC)
├── VerifyServer // [验证] 验证码/邮件服务 (Node.js 异构微服务)
├── ChatClient // [客户端] 基于 Qt 编写的桌面端聊天界面
├── docs // [文档] 技术难点复盘与 Bug 修复报告
├── tests // [测试] Python 自动化压测脚本
├── CMakeLists.txt // 全局构建脚本
└── README.md // 项目说明文档
- 环境: Ubuntu 22.04 LTS (VMware), 2 Cores, 10GB RAM
- 内核优化:
ulimit -n = 1,048,576
- 并发连接数: 20,000+ (连接成功率 100%)
- 峰值 QPS: 4,923 msg/s (单节点处理能力)
- 稳定性: 30分钟满载压测,无崩溃,无内存泄漏。
| ID | 阶段 | 并发数 | 持续时间 | 成功/失败 | 总消息数 | QPS (msg/s) | 备注 |
|---|---|---|---|---|---|---|---|
| T0 | 修复前 | 1000 | 120s | 1000 / 0 | 193k | 1,601 | 发生 DB 连接池阻塞 Crash |
| T1 | 修复后 | 1000 | 120s | 1000 / 0 | 593k | 4,923 | 峰值吞吐量测试 |
| T3 | 修复后 | 2000 | 120s | 2000 / 0 | 375k | 3,116 | 并发翻倍测试 |
| T6 | 修复后 | 2000 | 1800s | 2000 / 0 | 6.7M+ | 3,771 | 30分钟长稳测试 (Stable) |
针对高并发场景下遇到的 MySQL 连接池死锁 与 性能抖动 问题,进行了深度排查并输出修复报告。
👉 点击阅读:MySQL 连接池严重逻辑缺陷修复报告 (P0级故障复盘)
- 问题根因:同步锁竞争导致 Reactor 线程被数据库 IO 阻塞,且缺乏连接探活机制导致“毒丸效应”。
- 解决方案:重构为全异步任务队列模型,引入
wait_for超时机制与ConnectionGuard(RAII) 自动管理。
- CMake >= 3.10
- Boost >= 1.70
- MySQL Connector/C++
- Protobuf & gRPC
- Qt5 (仅客户端需要)
mkdir build && cd build
cmake ..
make -j4# 启动顺序建议:
./StatusServer
./GateServer
./ChatServer
./ChatServer2 # 启动第二个业务节点