image.png

## 亿级IM消息有序性+可靠性实现
### 核心目标
- 可靠性:消息不丢、不重
- 有序性:会话内顺序不乱
- 可用性:弱网环境正常使用
### 有序性实现:分而治之+局部有序
- 痛点拆解
  - 分布式环境:多节点、多路径导致消息乱序
  - 全局有序瓶颈:并发低、单点风险高
- 解决方案
  - 业务分区:sessionId一致性哈希,同会话路由至同一节点
  - 局部序号:Redis INCR生成会话内唯一SEQ
- 落地实现
  - 服务端:分片路由+序号分配(伪代码)
  - 客户端:按SEQ排序后渲染(伪代码)
- 核心思想:放弃全局有序,保障会话内局部有序
### 可靠性实现:三层兜底+幂等设计
- 痛点拆解
  - 客户端:断网、App崩溃导致消息丢失
  - 服务端:宕机、未持久化导致数据丢失
  - 网络:超时、抖动导致重复发送
- 解决方案
  - 客户端兜底:本地SQLite存储+阶梯式重试(1s/3s/5s)
  - 服务端兜底:RocketMQ落盘+3副本同步,ACK后置
  - 幂等控制:sessionID+msgID作为唯一键,Redis setNx去重
- 落地实现:全链路闭环流程(伪代码+流程图)
### 核心设计思想
- 核心逻辑:层层兜底,先保数据不丢,再解决重复和顺序,平衡性能
- 关键原则:放弃全局完美,追求局部可靠+整体高可用
- 设计权衡:不追求全局有序,仅保障业务有意义的局部有序;不执着实时性,确保最终一致性
### 适用场景迁移
- 订单状态流转
- 操作日志同步
- 事件溯源(局部强序+全局高可用需求)