0%


一、设计短链系统

核心问题

https://www.example.com/article/123456789 变成 https://t.cn/Ab3dEf

答题框架

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
① 需求澄清
   - 日活多少?假设 1000万 DAU
   - 短链有效期?假设永久有效
   - 读写比例?读远大于写(100:1)

② 容量估算
   - 每天生成短链:100万条
   - 1年:3.65亿条 → 需要 62位(2^62 > 10^18)
   - 存储:每条短链 500字节 → 3.65亿 × 500B ≈ 180GB/年

③ 核心设计:短链怎么生成?
   
   方案A:哈希(MD5/SHA256)→ 冲突问题
   方案B:自增ID转62进制 → 规律暴露,不安全
   方案C:发号器(雪花算法)→ ✅ 推荐

   雪花算法:1位符号 + 41位时间戳 + 10位机器ID + 12位序列号
   → 你简历里做过分布式系统,这个能讲

④ 存储设计
   - 短链 → 长链 映射:Redis(热数据)+ MySQL(持久化)
   - 表结构:(short_code PK, long_url, create_time, expire_time)
   - 索引:short_code 唯一索引

⑤ 跳转优化
   - 301 永久重定向(浏览器缓存,减轻服务器压力)
   - 布隆过滤器:防止无效短链查库(缓存穿透)

⑥ 高可用
   - 发号器多机部署,机器ID区分
   - Redis 主从 + 哨兵

一句话总结

“短链系统核心是解决发号映射两个问题。发号用雪花算法保证唯一,映射用 Redis + MySQL 分层,跳转用 301 缓存优化。”

除了设置**分片覆盖率(Overlap)**来保证上下文的连贯性之外,文档分片(Chunking)还有很多高级策略。不同的分片策略直接决定了 RAG 系统召回的准确率。