短链接URL设计
目录
前言
长URL分享冗长用户体验很差,期望一个更短的URL,点击短URL映射跳转到实际地址。
产品命名:”Fuxi(伏羲)“
一、需求分析
基本流程
功能分析
性能分析
-
总存储量
预计每月生成5亿条,有效期2年,因此总URL数量120亿
短URL存储空间:按照每个URL1KB则一共12TB=1KB*120亿
-
吞吐量
-
QPS
每个短URL平均读100次
5亿 * 100 / (30 * 24 * 60 * 60) ≈ 2万
一般系统高峰期访问量是平均的2倍,因此需要支持4万
-
TPS
写相比读来说预计量级很小,按照10:1来算,TPS 2千
-
-
网络带宽
-
根据返回长URL的平均长度来估算
平均每个长度URL500B,HTTP响应头500B,所以每个响应1KB。
因此需要的带宽为320Mb=4万 * 1KB * 8bit = 40MB * 8bit
-
非功能需求
- 高可用。不能因为某台服务器、数据库宕机导致的服务不可用
- 高性能。TP80请求小于5ms,TP99小于20ms
- 短URL生成是随机的,用户不可猜测
二、概要设计
短URL如何生成
1. MD5后base64编码后,截取前6位。(前6位可能冲突,还得需要反查,性能不符合要求)
1. 自增URL。(不满足用户不可猜测的需求)
1. 预生成。(离线预生成,每次读取到内存1W,性能满足要求,且离线生成是随机的,满足用户不可猜测的需求)
整体架构图
调用时序图
未命中
三、详细设计
重定向响应码详细设计
301:重定向一次后浏览器缓存,下次浏览器直接访问原URL
302:每次都访问短链URL服务器
因为QPS服务器能承受住,且301则后续的访问服务器完全无感知、无记录,为了统计因此选择302
短URL预生成文件加载及读取详细设计
预加载服务器集群,每次读1W存与内存中,短链服务器访问则直接返回,当个数小于2000时,单机加锁再去取1W个
过期则将过期的随机编码追加进HDFS中以供后续使用
用户自定义短URL详细设计
不能用6位长度的,防止与后续要使用的冲突
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2020-06-17 KMP算法代码实现记录