长连接生成短连接

早期短链接广泛应用于图片上传网站,通过缩短网址URL链接字数,达到减少代码字符串的目的。常见于网店图片分类的使用,因有字符个数限制,采用短链接可以达到外链图片的目的。自微博盛行以来,在微博字数有限的特色下,短链接也盛行于微博网站,以节省字数给博主发布更多文字的空间。
问题描述:设计一个短链生成和查询系统,需要提供以下两个功能:
1、提供长链转换短链的接口
2、点击短链能跳转到对应的长链
题目要求:
1、同一个长链生成同一个短链接,不要有多个短链指向同一个长链。
2、同一个短链只能指向某一个长链,短链生成后要固定不变,不能再指向其它长链。
3、给出系统架构,需要考虑高并发解决方案。
4、考虑存储和缓存方案
数据量预估:
1、预计长链接总量500亿
2、长链换短链请求量:10W qps
3、短链跳转请求量:100W qps

解题思路:

长链转短链
使用发号器,为每一个长链请求分配一个短链。发号器号码从 0 自增,所发号码为十进制,再转为 62 进制后(62 进制对应 26 小写字母加上 26大写字母还有 10 数字)作为短链。
62^6约等于36亿,
62^7约等于2000亿,
所以,转化为7位62进制数字

将(发号器10进制数,长链,短链)作为原组,以发号器10进制数作主键,以长链为索引,一并存入MYSQL数据库中;
数据库建表
id,主键
long_url, 长url,唯一索引
number,号码数字
number62,号码的62进制数字串
short_url,短url,唯一索引

将短链作为Key,长链作为Value,存入redis中

短链转长链
使用短链作为Key, 在redis中对长链进行查询,跳转到对应长链接

性能优化:
当发生长链转短链请求时,首先查询MYSQL数据库中是否存在对应原组,若存在直接取出短链返回,若不存在再使用发号器生成对应短链
高并发方案:创建多个发号器,减小发号请求高并发时的压力,比如创建 10000个发号器,为每个发号器分配发号范围,发号器1的编号从 1∼10000,发号器2的编号从10001~20000,以此类推。发号时采用负载均衡轮询机制,减少发号器负担。

存储优化:将mysql数据库存储改变成nosql数据库存储
增加物理设备数

重定向:
301永久重定向,302临时重定向。短url的重定向好像是永久的,所以的用301
————————————————
版权声明:本文为CSDN博主「mingwulipo」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mingwulipo/article/details/90670460

猜你喜欢

转载自blog.csdn.net/muyimo/article/details/102761649