短链系统设计方案
微博的短链接 t.cn/xxxx 怎么做的?从哈希算法到分布式 ID,一个完整的短链系统设计。
一、短链系统的核心流程
- 1.1 长链 → 短链(生成)
- 1.2 短链 → 长链(查询)→ 302 跳转
- 1.3 核心指标——短链长度、碰撞率、跳转延迟
二、短链生成——哈希算法
- 2.1 MD5 生成 128 位哈希 → 取前 N 位 → Base62 编码
- 2.2 哈希碰撞问题——不同 URL 可能生成相同短链
- 2.3 解决碰撞——追加随机串后重新哈希(再哈希法)
- 2.4 MurmurHash——比 MD5 更快
三、短链生成——自增 ID
- 3.1 自增 ID → Base62 编码
- 3.2 优点——无碰撞、递增
- 3.3 缺点——可遍历(安全风险)、依赖发号器
- 3.4 分布式发号器——雪花算法
四、Base62 编码
- 4.1 字符集——[0-9a-zA-Z],62 个字符
- 4.2 编码实现——10 进制 → 62 进制
- 4.3 7 位 Base62 可表示 62^7 ≈ 3.5 万亿
五、存储方案
- 5.1 短链 → 长链的 KV 存储——Redis
- 5.2 持久化——MySQL
- 5.3 缓存策略——LRU 淘汰
- 5.4 布隆过滤器——缓存穿透保护
六、302 vs 301
- 6.1 302 临时重定向——每次来都走服务端,方便统计
- 6.2 301 永久重定向——浏览器缓存,减少请求但无法统计
七、高并发设计
- 7.1 CDN 缓存短链
- 7.2 Redis Cluster 存储映射关系
- 7.3 本地缓存 Caffeine——热点短链
八、总结
- 短链系统 = 发号器 + Base62 + KV 存储 + 302
- 设计权衡——唯一性 vs 性能 vs 可读性
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 谜思录!