这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
开始 - 第一个短链接
这个周末项目是从一次分享开始的:一条八十多字符的长 URL 占掉了社交动态的半行,于是你决定把它变成 short.url/a1b2c3。这一章不急着谈架构,而是先让这个服务真实地存在一次——先跑通创建与跳转的最小闭环,再让它碰上第一个用户和第一次告警。
你会先做出一个下午就能写完的版本:SQLite 存长短链接映射,短码用 MD5 哈希截取再转 Base62,跳转用 302。但 SQLite 默认大小写敏感,Safari 和微信里的短链接会 404,根因要用 COLLATE NOCASE 在数据库层堵住,而不是在每个接口上补 .lower()。第一个用户小王带来了点击统计、自定义短码、有效期和 API 文档四条需求,随后是连环告警:连接池耗尽逼你把 SQLite 换成 PostgreSQL,响应时间从 45ms 飙到 345ms 是全表扫描,磁盘 87% 要靠日志轮转,MD5 短码撞车让用户的短链跳到了别人的页面,OOM Killer 最后直接杀掉了进程。
读完你应该能说清一个短链接服务的最小闭环包含哪几个环节,解释早期为什么选 SQLite、MD5 加 Base62 和 302,也明白一次真实用户反馈和一次流量洪峰各自会逼出哪一类问题。接下来的章节会把这轮救火时临时做出的决定逐个重新算一遍账。
发现内容有问题?
告诉我们哪里需要改进。
