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不可猜测

核心功能设计

  1. 短链和长链如何映射?

    • hash。
      • 如何解决冲突?
        1. 换hash算法
        2. 换base64截取长度
      • 在多次哈希冲突的情况下无法满足性能要求
    • 自增
      • 可猜测
    • 预生成
      • 离线生成短链库(使用随机算法生成。使用布隆过滤器判断是否已生成)
  2. 整体部署模型

     - 
    

Service

Storage

Scale