分层架构:1)接入层——海量长连接网关(单机十万级连接,私有二进制协议或 WebSocket/QUIC),做连接管理、心跳、鉴权、限流,与业务逻辑解耦;2)逻辑层——消息路由、会话服务、关系链;3)存储层——消息库按用户分库分表(timeline 模型:每个会话/用户一条消息流 + 同步库/存储库分离,参考阿里 Tablestore 的 IM 架构文章);4)推送层——在线走长连接直达,离线走厂商通道(APNs/FCM/国内厂商 Push)。
核心设计决策:消息收发模型——写扩散(消息写入每个接收者的收件箱,单聊和中小群适用,读快)vs 读扩散(消息只写会话,万人群适用,避免写爆炸),与 Feed 系统同构;消息时序——服务端为每条消息分配会话内单调递增的 seq_id(发号器或 Redis 原子序列),客户端按 seq 增量同步,解决乱序与丢消息(客户端本地 max_seq 与服务端 diff 拉取);可靠性——客户端 ACK + 超时重传 + 消息去重(msg_id 幂等),服务端落库成功才算送达;离线消息——漫游拉取按 seq 增量同步,多端登录各自维护同步位点。追问方向:消息已读回执在群聊中的实现成本(读扩散下为每个成员记 read_seq)、端到端加密(Signal 协议)对服务端存储与检索的影响、连接层的容量估算(保活包流量、内核参数与内存模型)。
(约 490 字)