
1) 【一句话结论】
设计百万级高并发认证系统,核心是构建分布式认证中心,通过JWT令牌(签名用RS256提升安全性)、Redis集群缓存(RDB/AOF持久化保障一致性)、Kafka消息队列(ACK=all确保消息不丢失)、分布式锁(SETNX+10秒超时避免死锁)和数据库分库分表(用户ID哈希分片+缓存预热解决热点),保障性能、安全与高可用。
2) 【原理/概念讲解】
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Redis集群 | 分布式Key-Value存储,支持RDB/AOF持久化 | 高速读写(毫秒级),数据一致性保障 | 认证令牌缓存、会话管理、热点数据缓存 | 内存分配需合理,持久化可能影响性能 |
| Kafka | 分布式消息队列,支持高吞吐、持久化 | 异步任务处理,可靠性保障(ACK=all) | 登录日志、用户状态变更、异步通知 | 需配置ACK=all,避免数据丢失 |
| 分布式锁(Redis SETNX) | 通过SETNX原子操作实现互斥 | 线程安全,避免缓存击穿 | 热点数据查询(如空令牌查询) | 锁超时设置(如10秒),防止死锁 |
| 数据库分库分表 | 按用户ID哈希分库,按月分表 | 扩展性提升,读写分离 | 用户数据存储 | 用户ID哈希分片可能导致热点,需调整分片键或缓存预热 |
4) 【示例】
令牌刷新流程(伪代码):
POST /auth/refresh
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... # 原令牌
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}
5) 【面试口播版答案】
设计百万级高并发认证系统,核心是构建分布式认证中心。首先,认证服务负责用户身份验证,密码用bcrypt加密存储,验证通过生成JWT令牌(签名采用RS256提升安全性)。然后,令牌通过Redis集群缓存,集群通过RDB/AOF持久化保证数据一致性,避免高并发下缓存不一致。负载均衡器分发请求到多实例,提升吞吐量。消息队列处理异步任务(如登录日志),通过Kafka的ACK=all机制确保不丢失。对于令牌过期,采用短效(15分钟)和长效(1小时)令牌,客户端在短效令牌过期前刷新,生成新令牌。缓存击穿时,使用Redis SETNX分布式锁,只允许一个线程查询数据库,其他线程等待,然后设置缓存。数据库分库分表,按用户ID哈希分库可能导致热点,解决方案是调整分片键(如用户ID+时间)或增加缓存预热(如冷启动时预加载热点数据),确保高可用。
6) 【追问清单】
7) 【常见坑/雷区】