
1) 【一句话结论】采用微服务分层架构,核心是分布式消息中间件(以RocketMQ为例)+ Redis + WebSocket,通过异步处理与缓存实现百万级并发与毫秒级延迟的消息系统。
2) 【原理/概念讲解】老师会解释核心概念:
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| RocketMQ | 金融级分布式消息中间件 | 高吞吐(单节点10万+TPS)、毫秒级延迟(<1ms)、事务消息、高可用集群 | 业务消息、订单处理、消息异步处理(如微信消息推送) | 需配置高可用集群,适合高可靠性实时场景 |
| Kafka | 分布式日志队列 | 高吞吐(单节点百万TPS)、持久化、容错、离线处理 | 日志采集、实时计算、离线分析 | 启动慢,延迟较高(ms级),适合离线场景 |
| Redis | 内存+持久化数据库 | 毫秒级读写(<1ms)、支持Pub/Sub、RDB/AOF持久化 | 实时消息存储、会话管理、缓存 | 内存有限,需定期持久化,不适合海量持久化存储 |
| MySQL | 关系型数据库 | 持久化、事务支持、复杂查询 | 消息持久化存储、历史消息查询 | 写入延迟高(ms级以上),不适合实时消息 |
4) 【示例】
伪代码(发送消息流程):
def send_message(user_id, target_id, content):
# 接入层:验证用户权限
if not validate_user(user_id):
return {"code": 401, "msg": "Unauthorized"}
# 路由层:发送到RocketMQ
send_to_rocketmq(user_id, target_id, content)
# 存储层:存入Redis(实时消息列表)
store_in_redis(user_id, target_id, content)
# 推送层:通过WebSocket推送给目标客户端
push_via_websocket(target_id, content)
return {"code": 200, "msg": "Message sent"}
消息队列消息结构(JSON):
{
"type": "message",
"sender": "user123",
"receiver": "user456",
"content": "Hello!",
"timestamp": 1672531200
}
5) 【面试口播版答案】
面试官您好,针对百万级并发、毫秒级延迟的即时通讯消息系统,我的核心设计是分层架构+关键技术选型。整体分为接入层、消息路由层、存储层、推送层和监控层。接入层负责请求验证和消息封装;消息路由层用RocketMQ解耦发送与接收,保证高吞吐和可靠性;存储层用Redis(内存+持久化)存储实时消息状态,支持毫秒级读取;推送层通过WebSocket长连接推送给客户端。关键技术选型上,RocketMQ用于异步处理和路由,Redis用于实时存储,WebSocket用于低延迟。流程是:用户发消息后,接入层将消息发到RocketMQ,路由层分发并同步到Redis,推送层通过WebSocket推送给目标客户端。这样能支撑百万级并发和接近毫秒级的延迟,同时保证可靠性和可扩展性。
6) 【追问清单】
7) 【常见坑/雷区】