系统设计:短链系统设计

短链系统设计

短链的意义:较短的URL链接,内容更加精简,不占用其他内容的空间;

核心需求

功能性需求:

  1. 短链管理:生成唯一短链(短链和原始链接映射并存储)、删除、设置过期时间、过期自动清除等服务;
  2. 短链访问:访问短链后重定向到原始链接;
  3. 访问统计:记录点击量统计、访问来源等;对外可提供数据统计服务;
  4. 主动失效:提供主动失效短链的能力。非核心需求;

非功能性需求:

  1. 性能:高并发访问性能;需要支持每秒万级请求;

High Level

1. 短链生成方案和性能

短链是一个URL,那么域名是必不可少的,域名越短越好;短链要断,除了域名则最好只有一段路径:

https://t.cn/abcdef

这段路径可以称为

压缩码
,压缩码需要域名下唯一,那么生成时就需要满足:

  1. 唯一性:或者说超低碰撞率,就需要一个生成算法;
    1. hash算法;
    2. 全局唯一十进制id转62进制;
  2. 短和容量取舍:越短容量越小;假设n为压缩码长度:
    1. n = 3,压缩码数量:14_776_336(147.7w)
    2. n = 4,压缩码数量:916_132_832(9.16亿)
    3. n = 5,压缩码数量:56_800_235_584(568亿)
  3. 性能:可以通过短链池子,提前储备压缩码,用户生成时直接获取;

2. 短链的高性能访问

短链服务相对比较独立,没有太多复杂的业务,也不会太多依赖其他业务;

短链需要对外提供高QPS、低延迟的访问性能;

  • 高性能缓存;
  • 访问链路尽可能简单,无外部依赖,提升稳定性;
  • 除了返回映射以外,都为非核心链路,尽可能异步化;

3. 服务拆分与交互

上图为大致的服务架构,每个服务内部还有很多细节,比如短链访问服务内部可能设计多种黑白名单拦截、IP拦截、URL拦截等

  • 短链访问服务:
    • 提供短链映射为原始URL,进行302重定向;
    • 黑白名单拦截;
    • URL拦截;
    • IP拦截;
    • 访问事件;
  • 短链管理服务;
    • 短链生成;
    • 短链删除;
    • 短链更新;
    • 短链过期时间;
  • 短链分析服务;
    • 监听短链的访问事件,进行统计记录;
    • 提供统计分析服务:实时、T+1、多维度分析等;

4. 库表设计

短链映射表:

short_urllong_urlstatuscreated_atexpired_at
u8DeA7    https://xxxx.com/dddd/aaaa?ware=dwdawdxx0      2022-11-112023-11-11