
1) 【一句话结论】
核心是通过请求层(HTTP/2多路复用、合并请求)、分层缓存(浏览器+Redis+CDN)、资源智能加载(预加载+懒加载+移动端优化)、服务端实时通信(WebSocket+Kafka消息队列)及高可用架构(集群+负载均衡+故障转移),实现百万级并发下的低延迟与高可用。
2) 【原理/概念讲解】
老师:百万级用户同时在线的核心挑战是网络延迟、服务器负载和数据同步。我们从四个维度设计方案:
3) 【对比与适用场景】
| 策略/方式 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| HTTP/2多路复用 | HTTP/2协议下的请求/响应复用机制 | 同时传输多个请求/响应,减少TCP连接开销,提升并发性能 | 需要低延迟的场景(如社交应用实时交互) | 需前端与服务端均支持HTTP/2 |
| HTTP/1.1 | 传统HTTP协议 | 每个请求/响应需独立TCP连接,连接数限制(如浏览器6-8个) | 非实时数据传输(如静态页面) | 连接数多时性能下降 |
| Kafka消息队列 | 分布式消息系统 | 高吞吐、持久化、分区复制 | 实时消息分发(百万级消息) | 需配置分区数、副本因子,避免单点故障 |
| Redis缓存 | 分布式内存数据库 | 高速读写,支持数据过期 | 热门数据(聊天记录、用户状态) | 需设置TTL,避免缓存雪崩(随机过期时间) |
| CDN缓存 | 边缘节点缓存 | 减少用户到服务器的距离 | 静态资源(大文件、热门页面) | 需配置缓存规则,避免动态内容被缓存 |
| 预加载 | 提前请求资源 | 提升关键资源加载速度 | 关键资源(聊天界面、消息列表) | 需控制预加载资源数量,避免带宽占用 |
4) 【示例】
function calculatePriority(resource) {
const weight = resource.type === 'chat' ? 10 : 1; // 聊天资源权重高
const loadTime = resource.size / 1000; // 假设单位KB,计算加载时间(ms)
return weight / loadTime; // 权重/加载时间,值越大优先级越高
}
动态调整:根据用户行为日志(如用户最近30分钟打开的聊天对象列表),更新资源权重,比如用户频繁打开与“张三”的聊天,则“张三”的聊天资源权重提升至15。5) 【面试口播版答案】
面试官您好,针对百万级用户同时在线的社交应用,我的核心方案是围绕“低延迟”和“高可用”从四个维度优化:首先是请求优化,通过合并小请求、启用HTTP/2多路复用减少网络往返,降低轮询频率;然后是数据缓存,采用浏览器缓存静态资源、Redis缓存热门数据(TTL 5分钟)、CDN缓存边缘资源,同时用Kafka作为消息队列处理百万级消息的可靠传输和分发;接着是资源加载,对聊天界面等关键资源预加载(根据权重计算优先级,动态调整权重),非关键资源懒加载,并加入移动端优化(如图片压缩、适配不同屏幕);最后是服务端交互,用WebSocket实现实时消息推送(心跳检测+指数退连),结合REST/GraphQL获取非实时数据,服务端通过集群+负载均衡(如Nginx)和故障转移保障高可用。这样能确保百万并发下低延迟和高可用。
6) 【追问清单】
7) 【常见坑/雷区】