设计短链接服务是系统设计面试的经典题。用一个结构化框架来分析。
1. 需求澄清
不要急着画图,先问清楚: - 只做短链接生成和跳转吗? - 需要统计点击量吗? - 每天生成多少短链接? - 短链接多长? - 需要自定义短链接吗?
2. 粗略估算
- 每天 1 亿条新短链接
- 读写比:100:1(读远多于写)
- 存储 5 年:约 1800 亿条
- 短链接长度:7 位字符(62 进制,7 位 = 3.5 万亿种组合)
3. 短链接生成算法
- Hash 函数(MD5/SHA256)取前 N 位:简单但有碰撞风险
- 自增 ID + Base62 编码:无碰撞但依赖计数器
- 预生成方案:提前批量生成短码存入池中
最常用的是自增 ID 方案。
4. 数据模型
- 短链接表:short_code(主键)、original_url、user_id、created_at、expires_at
- 访问日志表(可选):short_code、timestamp、ip、user_agent
5. 架构设计
用户 → CDN → API Gateway → 短链接服务 → 缓存(Redis) → 数据库(MySQL)
↓
302 Redirect
6. 扩展考虑
- 缓存:热门短链接缓存在 Redis 里
- 分库分表:按 short_code 前缀分片
- 限流:防止单用户滥用
系统设计面试没有标准答案。你展现的是分析问题的思路,而不是结果。
评论
评论已关闭。