51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个社交应用的动态消息推送系统,要求保证消息的实时性和低延迟(比如用户发布动态后,好友能立即收到通知)。请描述系统的架构设计,包括消息产生、存储、路由、推送,以及如何保证消息不丢失或延迟过高。请说明如何处理消息的幂等性(如避免重复推送)和消息的优先级(如系统通知优先于用户动态)。

Tencent软件开发-移动客户端开发方向难度:中等

答案

1) 【一句话结论】采用“实时消息队列(如Kafka)+分布式消息中间件+客户端长连接+推送服务(APNs/FCM)”的架构,通过消息分片、优先级队列和幂等处理,确保动态消息的低延迟(毫秒级)和高可靠性(不丢失)。

2) 【原理/概念讲解】
老师:咱们先拆解“实时性+低延迟”的核心需求,对应到系统架构的每个环节。首先看消息产生:用户发布动态时,服务端生成包含用户ID、内容、时间戳、优先级等字段的消息对象,写入消息队列(比如Kafka)。
类比:消息队列像“快递中转站”,负责有序暂存消息,保证顺序和可靠性。
然后是存储:消息队列负责暂存消息(保证实时性),同时持久化到数据库(如MySQL)作为备份(防止消息丢失)。
接着是路由:消息处理服务从队列读取消息,根据优先级(系统通知>用户动态)放入不同队列,再根据好友关系(从关系表查询)生成推送任务。
最后是推送:客户端通过WebSocket保持长连接,服务端通过APNs(iOS)或FCM(Android)发送消息,实现毫秒级通知。

3) 【对比与适用场景】

对比项消息队列(Kafka)数据库(Redis)
定义分布式消息中间件,高吞吐、低延迟内存数据库,适合缓存
特性高吞吐、持久化、可分区低延迟、内存存储、适合小规模
使用场景实时消息推送、高并发场景小规模、低并发、快速查询
注意点需要维护分区和消费者内存限制,不适合大流量

4) 【示例】
用户A发布动态,服务端生成消息(msg_id=1, user_id=A, content="今天天气真好",priority=普通),写入Kafka主题“dynamic”。
消息处理服务读取该消息,查询好友关系表(A的好友B、C),将消息转换为推送任务(task_id=1, target_user=B, C, msg_id=1),放入优先级队列(系统通知优先级1,普通动态优先级2)。
优先级队列按优先级取出任务,调用APNs发送给B、C的客户端。客户端通过长连接接收推送,展示动态。

5) 【面试口播版答案】
面试官您好,针对社交应用动态消息推送系统,我设计的核心架构是采用“实时消息队列+分布式消息中间件+客户端长连接+推送服务”的组合,目标是保证毫秒级延迟和消息不丢失。首先,用户发布动态时,服务端生成消息对象写入Kafka等消息队列,确保顺序和可靠性;存储层面,消息队列暂存+数据库备份防止丢失。路由环节,根据消息优先级(系统通知>用户动态)放入不同队列,再根据好友关系生成推送任务;推送部分,客户端通过WebSocket保持长连接,服务端通过APNs/FCM发送消息。为防止重复推送,采用消息ID+目标用户ID作为唯一标识(幂等性);优先级通过队列优先级和消息字段区分(系统通知优先处理)。这样整个流程能保证好友收到动态后立即通知,且消息不会丢失或延迟过高。

6) 【追问清单】

  • 问题:消息丢失如何处理?
    回答要点:通过消息队列持久化+重试机制,消息未成功推送则重试(最多N次),失败则记录到数据库。
  • 问题:如何处理高并发下的消息延迟?
    回答要点:消息队列分片(Kafka分区),每个分区由不同消费者处理,提高吞吐;优化数据库查询(缓存好友关系)。
  • 问题:客户端长连接的连接数限制如何解决?
    回答要点:使用WebSocket协议,通过服务端负载均衡分配连接,避免单点过载。
  • 问题:优先级队列的实现细节?
    回答要点:使用优先队列数据结构(如堆),系统通知优先级1,普通动态优先级2,按优先级顺序取出任务。
  • 问题:如何保证消息的实时性?
    回答要点:消息队列低延迟(毫秒级),推送服务(APNs/FCM)响应时间短(通常<1秒),客户端长连接实时接收。

7) 【常见坑/雷区】

  • 坑1:只考虑数据库存储,忽略消息队列的延迟问题,导致消息延迟过高。
  • 坑2:忽略幂等性,导致重复推送(如同一消息被多次处理)。
  • 坑3:优先级处理不当,系统通知和用户动态的优先级没区分,导致系统通知延迟。
  • 坑4:消息丢失的容错机制没提(如无重试机制)。
  • 坑5:客户端长连接的维护问题(如连接断开后的重连机制没考虑)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1