系统设计面试攻略:设计一个短链接服务(TinyURL)

设计短链接服务是系统设计面试的经典题。用一个结构化框架来分析。

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 前缀分片
  • 限流:防止单用户滥用

系统设计面试没有标准答案。你展现的是分析问题的思路,而不是结果。

关于 Zihao Zhang

后端开发工程师。关注 Java/Spring Boot/Redis/MySQL 技术栈,分布式系统,OLAP 数据库,AI Agent 开发与应用。

评论

评论已关闭。