短链系统设计
短链的意义:较短的URL链接,内容更加精简,不占用其他内容的空间;
核心需求
功能性需求:
- 短链管理:生成唯一短链(短链和原始链接映射并存储)、删除、设置过期时间、过期自动清除等服务;
- 短链访问:访问短链后重定向到原始链接;
- 访问统计:记录点击量统计、访问来源等;对外可提供数据统计服务;
- 主动失效:提供主动失效短链的能力。非核心需求;
非功能性需求:
- 性能:高并发访问性能;需要支持每秒万级请求;
High Level
1. 短链生成方案和性能
短链是一个URL,那么域名是必不可少的,域名越短越好;短链要断,除了域名则最好只有一段路径:
https://t.cn/abcdef
这段路径可以称为
压缩码
,压缩码需要域名下唯一,那么生成时就需要满足:
- 唯一性:或者说超低碰撞率,就需要一个生成算法;
- hash算法;
- 全局唯一十进制id转62进制;
- 短和容量取舍:越短容量越小;假设n为压缩码长度:
- n = 3,压缩码数量:14_776_336(147.7w)
- n = 4,压缩码数量:916_132_832(9.16亿)
- n = 5,压缩码数量:56_800_235_584(568亿)
- 性能:可以通过短链池子,提前储备压缩码,用户生成时直接获取;
2. 短链的高性能访问
短链服务相对比较独立,没有太多复杂的业务,也不会太多依赖其他业务;
短链需要对外提供高QPS、低延迟的访问性能;
- 高性能缓存;
- 访问链路尽可能简单,无外部依赖,提升稳定性;
- 除了返回映射以外,都为非核心链路,尽可能异步化;
3. 服务拆分与交互
上图为大致的服务架构,每个服务内部还有很多细节,比如短链访问服务内部可能设计多种黑白名单拦截、IP拦截、URL拦截等
- 短链访问服务:
- 提供短链映射为原始URL,进行302重定向;
- 黑白名单拦截;
- URL拦截;
- IP拦截;
- 访问事件;
- 短链管理服务;
- 短链生成;
- 短链删除;
- 短链更新;
- 短链过期时间;
- 短链分析服务;
- 监听短链的访问事件,进行统计记录;
- 提供统计分析服务:实时、T+1、多维度分析等;
4. 库表设计
短链映射表:
short_url | long_url | status | created_at | expired_at |
---|---|---|---|---|
u8DeA7 | https://xxxx.com/dddd/aaaa?ware=dwdawdxx | 0 | 2022-11-11 | 2023-11-11 |