面试题:设计一个 IM 即时通讯系统——百万长连接怎么撑住、消息怎么做到不丢不重不乱序、万人群的消息扩散怎么算账?
这是「每日一题」专栏的第二十三篇。每天一道面试题,后端 + AI 混合路线,从原理到代码一次讲清。上一篇是 MySQL 索引与深分页,文末预告的分布式 ID 生成器在 8 月 16 日已经出过一版 基础篇,再写一遍是重复劳动,所以今天换成同属系统设计方向、但更贴近日常后端的一道硬题:IM 即时通讯系统。
这题的杀伤力在于它「看起来谁都能画个框图」:客户端、网关、业务层、存储,几笔就画完了。但只要面试官往下一问——「单机百万连接,内存要多少 GB?端口够用吗?」「网关到底是不是无状态?」「你说消息不丢,丢在哪几个时刻?」「顺序用什么保证,时间戳行不行?」「一万人群发一条消息,写放大是多少倍?」——画框图的人立刻熄火。今天把这五个追问的账全部算一遍。