tldr:储存百亿级短链接,采用预生成短链接的形式,
Scenario
基本需求
- 给定长URL,生成短链
- 访问短链,重定向到长链
- 短链接可以使自动生成的,也可以使自定义
- 短链接有效期2y
性能指标
存储空间
预计每月生成短链5亿条。总数5e8x12x2 = 120亿条。一条占用1KB,总共储存占用12TB
吞吐量
平均每个短链接访问100次,QPS: 5e8x100/30/24/3600 ~ 20000 假设高峰期访问量是平均时2倍。系统需要支持的吞吐能力4万
带宽
每个响应1KB, 4e4x1KB ~ 40MB
短URL长度
64 ^ 7 ~ 4e12 64 ^ 6 ~ 64e9 需求空间12e9,使用6位。
NFR
- 高可用
- 高性能:80% <5ms, 99% <20ms, avg < 10ms
- 生成的URL不可猜测
核心功能设计
-
短链和长链如何映射?
- hash。
- 如何解决冲突?
- 换hash算法
- 换base64截取长度
- 在多次哈希冲突的情况下无法满足性能要求
- 如何解决冲突?
- 自增
- 可猜测
- 预生成
- 离线生成短链库(使用随机算法生成。使用布隆过滤器判断是否已生成)
- hash。
-
整体部署模型
-