Tiny URL
2019-08-26 17:03:24 0 举报
AI智能生成
System Design Interview - TinyURL的设计
作者其他创作
大纲/内容
场景
把一个长网址变成短网址,方便在社交网络上传播。
需求
尽可能的短
不能重复
可以短网址decode为原网址
需要存储
需要考虑过期
方法
长度设计
https://www.worldwidewebsize.com/ 查询有55亿网址
一个64位整数足够了
微博的短网址服务用的是长度为7的字符串,一个字符可以看做是62进制的数(大小写字母加数字),
那么最大能表示{62}^7远远大于45亿。所以长度为7可以
那么最大能表示{62}^7远远大于45亿。所以长度为7可以
现代的web服务器(例如Apache, Nginx)大部分都区分URL里的大小写了,所以用大小写字母来区分不同的URL是没问题的。
数据关系设计
一对多
优点
便于数据分析
方法
ID下可以挂各种信息
生成该网址的用户名
生成时间
HTTP头部的 User Agent
生成设计
使用分布式发号器发号
拿着这个ID进行base62从10进制转换62进制的运算
存储ID-长网址的关系
可以被用来从短网址->Id->长网址
存储短网址-长网址的关系
可以被用来直接短网址->长网址
https://segmentfault.com/a/1190000010516708
存储设计
MySQL
短网址为 primary key, 长网址为value
Redis
短网址为Key,长网址为Value
可以设置expire time
HTTP跳转设计
301是永久重定向
Google,百度等搜索引擎,搜索的时候会直接展示真实地址,那我们就无法统计到短地址被点击的次数了,也无法收集用户的Cookie, User Agent 等信息,这些信息可以用来做很多有意思的大数据分析
302是临时重定向
正确答案
具体区别
https://www.jianshu.com/p/887d16ba71b9
防DDOS设计
限制IP的单日请求总数,超过阈值则直接拒绝服务。
在Redis里面反过来存
长网址为Key,短网址为Value
短时间同一个长网址请求就挑一个value返回即可
收藏
0 条评论
下一页