乐于分享
好东西不私藏

飞享IM完整架构设计文档——架构师视角的系统设计全解析

飞享IM完整架构设计文档——架构师视角的系统设计全解析

架构设计不只是画几张图——它是对整个系统的系统性思考:从业务需求到质量约束,从模块拆分到接口契约,从数据分表到故障容灾,再到 AI 融合与技术演进路线。本文以飞享IM(FshareIM)为参考,完整呈现一位架构师在一个生产级 IM 系统上应当完成的全部设计工作,涵盖六大职责分解、五阶段设计步骤,以及覆盖接入层、业务层、数据层、AI 架构、安全架构和部署架构的完整设计文档,附带技术决策记录(ADR)和架构评审检查单。
一、架构师的工作是什么?
在回答”如何设计这个系统”之前,先明确架构师的职责边界。

二、需求分析与约束条件

(一)功能性需求

(二)非功能性需求(质量属性目标)

(三)技术约束

三、系统整体架构设计

(一)逻辑架构(4 层分层)

(二)核心消息流转时序

四、模块设计与接口规范

(一)push-connector 职责边界

(二)push-group 服务层次

(三)Dubbo 接口契约(push-stub)

(四)REST API 规范

  • 通用响应结构:

  • 错误码体系:

  • 核心 API 列表:

五、通信协议设计

(一)TCP 二进制协议头(10 字节)

(二)SubSignal 枚举表

六、数据架构设计

(一)消息分表策略

运维注意事项:

  • 时钟回拨可能导致路由到错误分表,需处理(见 ADR-002)
  • 跨月查询最多跨 3 张表
  • 3 年后同月复用:须在运维计划中安排历史数据归档,否则数据混淆

(二)Hazelcast 内存数据结构

七、AI 融合架构设计

对应岗位要求第 7 条「(特别重要)懂 AI,具备新型 AI 架构工程师能力

(一)当前 AI 接入方案(SAI 协议)

(二)SAI 数据包格式(当前 JSON)

(三)AI 架构特别关注点

(四)AI 架构演进路线

八、高可用与容灾设计

(一)各层可用性分析

(二)幽灵 Session 解决方案

问题: connector 进程 kill -9 时,断线回调不触发,online=true 的 Session 残留,其他节点向死连接投递消息后静默丢失。

解决方案:Hazelcast Entry TTL + 心跳续期

九、安全架构设计

(一)认证流程

(二)传输安全状态

(三)分布式限流(改进方案)

当前问题:限流计数存在 JVM 内存中,多节点时实际限额 = 配置值 × 节点数。

改进:Redis Lua 滑动窗口分布式限流:

十、性能容量规划

(一)单节点容量(16GB 机器)

(二)集群扩容规划

(三)OS 调优清单(运维)

十一、技术决策记录(ADR)

(一)ADR-001:选择 t-io 作为 NIO 框架

背景: 需要支持 TCP + WebSocket 双协议,同时支撑 100 万级长连接。

决策理由: t-io 内置 IM 场景封装(心跳、群组、广播),开发效率高;110 万连接/节点满足业务需求。后续评估: 若需超过 200 万连接/节点,迁移至 Netty。

(二)ADR-002:消息 ID 使用类 Snowflake 算法

决策: 43bit 时间戳 + 6bit nodeId + 15bit 序号

已知风险:
  • 时钟回拨未处理(改进:回拨 > 5ms 拒绝服务,等时钟追上)
  • nodeId 手动配置(改进:Redis 自动分配)
  • nodeId 上限 63(最多 64 节点)

(三)ADR-003:Hazelcast 作为 Session 存储(部分场景建议改 Redis)

背景: 需要分布式 Session 存储,支持多节点查询。

决策 Hazelcast IMap 存 Session + MySQL 冷备份

后续改进方向:

  • userMessages.lock(user)
的 Hazelcast 分布式锁 → 迁移至 Redis INCR 原子操作
  • Session TTL 管理 → 推荐 Redis(原生 TTL 支持更稳定)

(四)ADR-004:AI 流式输出使用新增 SAI SubSignal

  • 背景: AI Agent 流式 token 需实时推送,MN → Pull 模式延迟过高(多一个 RTT)。

  • 决策:新增SubSignal.SAI,旁路推送不入离线库;流结束后完整答案通过 saveAndPublish 正常落库。

  • 权衡: 流中途断线 → token 丢失,仅通过 MN 拉取完整答案恢复(可接受,AI 回复不是核心消息路径)。

十二、技术演进路线图

十三、架构评审检查单

架构师在每次重大版本发布前须对照评审:

(一)功能完整性

  • 所有 P0 功能用例已覆盖(私聊/群聊/登录)

  • 离线消息在断线重连后可完整恢复

  • 多端消息同步(Android + Web)一致

  • AI 流式输出与普通消息互不干扰

    (二)非功能性验证

  • AUTH token 验证已开启(不可绕过)

  • Dubbo 服务间鉴权 token 已配置(非空)

  • 生产环境 WebSocket 使用 wss://(TLS)

  • SQL 注入防护(MyBatis 参数绑定,无拼接 SQL)

  • 敏感信息不出现在日志中

(三)可运维性

  • 每个服务有健康检查端点(Actuator /health)

  • 关键日志有 traceId(消息 ID 可追踪全链路)

  • JVM 参数已设置 HeapDump(OOM 时自动 dump)

  • 数据库迁移脚本在 Flyway 中管理(有版本号)

    (四)AI 架构专项

  • AI 请求超时已配置(防 Agent 服务慢响应阻塞线程)

  • AI 线程池有界(防 OOM)

  • Agent 服务不可用时有降级(友好提示而非异常)

AI 上下文记忆按 userId 隔离(不同用户不串话)

总结

一个合格的架构师交付物不只是代码,更是:可演进的分层架构
  •  接入层无状态可水平扩展,业务层可从单实例演进到集群清晰的接口契约
  •  Dubbo 接口、REST 规范、protobuf IDL,让各团队并行开发量化的质量目标
  •  110 万连接/节点、5,000 TPS,不是模糊描述透明的技术决策
  •  每个关键选型都有 ADR 记录背景、候选方案、决策理由可操作的改进路径
  •  从当前版本到近期、中期的演进步骤清晰AI 原生思维
  •  SAI 协议旁路推送、多 Agent 路由、本地 LLM 集成路线
完整源码参见chat-server-pro,完整架构设计文档见项目docs/ARCHITECTURE_DESIGN.md。
欢迎关注「飞享即时通讯IM」官方公众号,点赞分享,第一时间获取飞享IM最新技术干货!