一句话总结
高并发设计考察实战能力,核心考点:限流算法(固定窗口/滑动窗口/令牌桶/漏桶)、秒杀系统(前端→网关→Redis预减→MQ异步→DB乐观锁)、短链系统(Base62编码+302重定向)、信息流(推拉结合模式)。核心思路:尽量将请求拦截在上游。
限流与降级
限流算法:
1. 固定窗口:时间窗口内计数,简单但有临界突刺问题。
2. 滑动窗口:细化时间粒度,平滑限流。
3. 令牌桶:恒定速率生成令牌,允许突发流量。Google Guava RateLimiter实现。
4. 漏桶:恒定速率处理请求,平滑输出。
降级策略:返回默认值、返回缓存数据、关闭非核心功能、页面降级。
秒杀系统设计
核心挑战:瞬时高并发、超卖问题、防作弊。
架构方案:
1. 前端:按钮防抖、验证码、倒计时、CDN静态化
2. 网关层:限流、黑名单、请求过滤
3. 服务层:Redis预减库存(Lua脚本保证原子性)、消息队列异步下单
4. 数据库:乐观锁防超卖 UPDATE stock SET count=count-1 WHERE id=? AND count>0
关键点:尽量将请求拦截在上游,不让流量打到数据库。
短链系统设计
核心流程:长链→生成短链→存储映射→访问短链→302跳转
短链生成方案:
1. 哈希+碰撞检测:MurmurHash生成短码,碰撞时重新哈希。
2. 发号器:自增ID转62进制(0-9a-zA-Z),6位可表示568亿组合。
存储方案:Redis缓存热点映射 + MySQL持久化。
302 vs 301:302临时重定向可统计点击量,301永久重定向浏览器缓存不经过服务器。
信息流系统设计
推模式(写扩散):发帖时写入所有粉丝的收件箱。适合粉丝少的场景。
拉模式(读扩散):读帖时从关注列表拉取。适合粉丝多的场景。
推拉结合:大V用拉模式,普通用户用推模式。活跃粉丝推,非活跃粉丝拉。
存储方案:Redis Sorted Set按时间排序,支持分页加载。