系统设计短链接系统设计

Posted Kant101

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统设计短链接系统设计相关的知识,希望对你有一定的参考价值。

1. 概述

短链接如下图所示,我们在很多场景下都见过,http://dx.10086.cn/sdtxcz 就是一个短链接。

但是当我们在浏览器中输入这个链接后它又变成了

http://app.m.zj.chinamobile.com/zjweb/sjyyt/hdshare/sjyytwakepage.html?id=stcz1110&WT.mc_id=20170301stscs10dx_A

 
也就是说,为了URL传送的方便,对原始的比较长的URL做了一次转换,转换为比较短的链接,否则将是一大串,不利于用户体验。

当我们在浏览器地址栏中输入短链接后,浏览器响应的状态码为302,即暂时重定向。

 
即短链接被重定向到了原始的链接,然后浏览器再去访问了原始的链接,HTTP状态码200,这次才获取到了数据。

 

2. 需求分析

在上面的概述中,我们已经分析出了,短链接是经过了一次重定向然后再去访问的真实链接。因此我们可以知道,是服务端在接收到短链接的访问后返回了真实链接并且返回了暂时重定向HTTP状态码302,浏览器再去访问服务端给的这个真实链接。

2.1 功能性需求

  • 给定原始的长URL,短链接服务能生成比它短且唯一的URL;
  • 用户点击短URL,能跳转到长原始的URL;
  • 短URL经过一定时间后,会过期;
  • 接口需要设计成 RESTful API;
     

2.2 非功能性需求

  • 高可用:服务不能存在单点故障;
  • 高性能:生成短URL的过程,以及从短URL跳转到原始URL要近实时;
  • 安全:短链接不可被预测,否则简单的遍历就能把所有短链接都遍历完,空耗系统资源。

 

3. 方案设计

设计短链接生成算法,本质上是为了寻找一种映射关系,能将原始的长URL和短链接对应起来,那么我们就会想到一些方案:

3.1 hash算法

将长原始URL经过hash算法如MD5、SHA1、SHA256等进行计算后得到对应的固定长度的短链接。

常见的Hash算法即其计算所得的长度

最简单的Hash算法得到的短链接也有8位,且Hash函数是存在Hash碰撞的,如果出现了Hash碰撞就会出现同一个短链接对应多个长原始链接的情况。

因此,一般是不采用Hash算法来将长连接映射为短链接的。

 

3.2 采用62进制算法

62进制即短链接的字符在 [0-9,a-z,A-Z] 之间,总共62个字符。

可以看到,6位或7位字符肯定是满足了几乎所有的需求。

 

3.3 采用62进制算法时的方案

  • 短连接与长链接的对应关系是存储在数据库表中的。

  • 当我们将长链接存入到数据库表中后,会有其对应全局唯一的 url_id,可以是bigint型的,这个 url_id 是十进制的,我们将其按照上面的62进制进行转换,就可以得到对应的62进制字符串;

  • 再将对链接服务器的域名和上面的62进制字符串拼接,即可得到长链接对应的短链接。

  • 浏览器访问短链接服务器的时候,将短链接后的62进制字符串转换成十进制数,即是 url_id,就可以快速地从数据库表中找到其对应的原始长链接了。

 

参考文献

[1] https://blog.csdn.net/qq_45562973/article/details/125013596
[2] https://blog.csdn.net/m0_64354350/article/details/121538359
[3] https://blog.csdn.net/m0_64354350/article/details/121538359

以上是关于系统设计短链接系统设计的主要内容,如果未能解决你的问题,请参考以下文章

「System Design」设计一个短链接系统

如果叫你设计一个短链接系统,你会从那些方面来提高性能呢?

面试官说:你来设计一个短链接生成系统吧

系统设计3:网络爬虫和短链接

这可能是东半球最接地气的短链接系统设计

如何生成高性能的短链接?