跳转至

Q-IM 设计与实现文档

Q-IM 是 Rust 实现的即时通讯服务端与多端客户端。本站由仓库 docs/、README.md、CLAUDE.md(项目记忆)自动生成,外加本站专门绘制的业务流程图与数据流图。

契约权威

docs/PLAN.md 的 §5.1 实体命名表、§6 标识序列与游标、§7 核心数据模型、附录 A 协议帧、附录 B 默认参数是契约核心,任何专题文档与本站图示都不得重新定义它们;冲突时以 PLAN 为准。

从哪里读起

想了解 入口
一张图看懂系统 数据流图 · 系统总览
一条消息怎么走 业务流程图 · 消息处理流程
术语与关键词 关键词速查 · 名词解释 · 术语×模块 · 行话
契约与决策 PLAN · ADR 索引
当前状态、实测数据、教训 项目记忆

一句话架构

客户端经 TLS 长连接接入 ConnectionNode(qim-gateway);ConversationWriter(qim-writer) 在 Redis 原子分配序号并写入提交事实,追加 Redpanda Outbox 后才回 SEND_ACK;FanoutCoordinator(qim-fanout) 按冻结成员版本把 Outbox 展开为每个 MailboxShard 一条 dispatch;MailboxNode(qim-mailbox) 消费 dispatch 日志物化个人邮箱并推进连续水位,再尽力推送;SessionProjection(qim-session) 独立消费 dispatch 维护会话集合并在读路径按定义式算未读;HistoryArchiver(qim-archiver) 异步把历史归档进 ScyllaDB。

当前状态(2026-09-28)

  • 主链路、完整客户端、Redis/Scylla 双后端已落地;功能 smoke、Scylla RF3 契约、writer SIGKILL 恢复门禁已通过。
  • 本开发机 10k msg/s × 180 s 门禁稳定通过;这不是目标硬件容量结论。
  • 仍未完成:目标硬件 180 s + T-HEAVY、混沌门禁、租户保留策略、lane 独立推进、PresenceDirectory / NotificationService / WebSocket / E2EE。

ADR 索引

ADR 主题
0001 MailboxStore 选型与三级演进
0002 客户端传输
0003 大群分发策略
0004 mailbox_seq 复合编码
0005 小会话正文内联
0006 服务端语言与日志系统
0007 一期部署形态
0008 登录对账与幂等窗口
0010 客户端 SDK 形态与绑定
0011 邮箱热路径表示
0012 Fanout 不用 Kafka 事务
0013 Redis 水平分片
0014 邮箱 Redis 实例数是容量参数
0015 packed watermark v2
0016 Outbox 分区与冻结快照缓存
0017 dispatch 生产者关闭幂等
0018 历史热窗口与异步归档
0019 一期历史保留期
0020 fencing_epoch 推迟到租约模型
0021 群成员可见区间与会话集合
0022 Scylla 邮箱前沿水位与时间戳单调写
0023 离线邮箱 7 天与新设备同步