笔试题:长短链接互转(今日头条)

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

解题思路:

  1. 长链转短链
    使用发号器,为每一个长链请求分配一个短链。发号器号码从 0 自增,所发号码为十进制,再转为 62 进制后(62 进制对应 26 小写字母加上 26大写字母还有 10 数字)作为短链。
    将(发号器10进制数,长链,短链)作为原组,以发号器10进制数作主键,以长链为索引,一并存入MYSQL数据库中;将短链作为Key,长链作为Value,存入pika中
  2. 短链转长链
    使用短链作为Key, 在pika中对长链进行查询,跳转到对应长链接

性能优化:

  1. 当发生长链转短链请求时,首先查询MYSQL数据库中是否存在对应原组,若存在直接取出短链返回,若不存在再使用发号器生成对应短链
  2. 高并发方案:创建多个发号器,减小发号请求高并发时的压力,比如创建 10000个发号器,为每个发号器分配发号范围,发号器1的编号从 1∼10000,发号器2的编号从10001~20000,以此类推。发号时采用负载均衡轮询机制,减少发号器负担。
  3. 存储优化:将mysql数据库存储改变成nosql数据库存储
  4. 增加物理设备数
    参考文献:https://blog.csdn.net/f_zyj/article/details/79162401

猜你喜欢

转载自blog.csdn.net/weixin_43247186/article/details/86678589
今日推荐