设计一个网址缩短器
· 阅读需 6 分钟
设计一个系统,将用户提供的网址转换为缩短的网址,并重定向回原始网址。描述系统的工作原理。你将如何分配缩短的网址?你将如何存储缩短网址与原始网址的映射?你将如何实现重定向服务器?你将如何存储点击统计数据?
假设:我通常不会在初始问题陈述中包含这些假设。优秀的候选人会在提出设计时询问规模。
- 注册重定向网址的独特域名总数大约在数万左右
- 新网址注册量约为 10,000,000/天(100/秒)
- 重定向请求量约为 10B/天(100,000/秒)
- 提醒候选人这些是平均数字 - 在高峰流量时(例如“人们下班回家时”或“超级碗期间”)可能会高得多。
- 最近的统计数据(在当前日期内)应聚合并在 5 分钟延迟后可用
- 长期回顾统计数据可以每天计算
假设
每天 1B 新网址,总共 100B 条目 越短越好 显示统计数据(实时和每日/月度/年度)
编码网址
http://blog.codinghorror.com/url-shortening-hashes-in-practice/
选择 1. md5(128 位,16 个十六进制数字,碰撞,生日悖论,2^(n/2) = 2^64)截断?(64 位,8 个十六进制数字,碰撞 2^32),Base64。
- 优点:哈希简单且水平可扩展。