暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

短链系统应该怎么设计?

架构经纬 2024-09-29
109

【每天5分钟,了解一个知识点】

短链,全称为短链接(Short URL),是一种对原始长链接进行转换后得到的简短的网址。

它的主要功能是通过重定向的方式,将用户访问短链的请求引导到对应的原始长链接。例如,原始长链接是 “https://www.example.com/a/very/long/path/to/a/page?parameters=values”,这可能是一个电商产品页面链接、一篇资讯文章链接等,它的路径长且复杂。

通过短链系统转换后,可能会变成 “https://t.cn/xxxx” 这样的短链接。当用户在浏览器中访问 “https://t.cn/xxxx” 这个短链时,浏览器会被自动引导(重定向)到原始的长链接 “https://www.example.com/a/very/long/path/to/a/page?parameters=values”,最终呈现给用户的是长链接对应的页面内容。

一、短链系统为何而生

短链主要解决长链带来的问题:

1、费用:当通过短信发送链接时,短信是按照长度计费的。长链往往会增加短信的长度,不仅提高了成本,甚至可能需要拆分成多条短信发送,给用户带来不便

2、简单:长链生成的二维码非常密集,难以识别,这在实际应用中会大大降低用户的使用体验

3、安全:发布长链,很可能会被平台认为是广告或垃圾信息,而导致链接被封

二、短链的工作原理

(一)跳转流程

当用户在浏览器中输入短链地址并访问时,浏览器连接到短链服务器。短链服务器接收到浏览器传输的数据后,开始解析接收到的数据,通过短链接地址找到原始长链接,并返回 http 状态码为 30X,客户端收到短链服务器的应答后,再重定向跳转至长网址,完成整个跳转过程。

(二)重定向选择

在短链的重定向中,选择使用301还是302重定向,主要取决于具体的需求和场景。

301重定向
  • 定义:301代表永久重定向。它表示浏览器在第一次通过短链获取到长链后,后续如果再次请求该短链,将直接从浏览器的缓存中获取长链地址,而不再向短链服务器发起请求。

    如果短链对应的长链地址是永久不变的,且希望优化SEO效果,可以选择301重定向。同时可以降低短链服务器的压力。

302重定向
  • 定义:302代表临时重定向。它表示每次通过短链访问时,都会向短链服务器发起请求,并获取最新的长链地址。

    如果需要统计短链的点击次数或分析活动效果,或者长链地址可能会变更,应选择302重定向。

在实际应用中,短链服务通常会根据具体需求灵活选择使用301还是302重定向。同时,为了提升用户体验和确保系统的稳定性,还需要考虑其他因素,如缓存策略、数据库优化等。

三、短链生成方法

(一)单项散列函数生成短URL将长URL利用MD5或者SHA256等单项散列算法,进行Hash计算,得到128bit或者256bit的Hash值。然后对该Hash值进行Base64编码,得到22个或者43个Base64字符,再截取前面的6个字符,就得到短URL了

但是这样得到的短URL,可能会发生Hash冲突,。所以在生成的时候,需要先校验该短URL是否已经映射为其他的长URL,如果是,那么需要重新计算。因为每次生成都要判重下,有重复的短链还有再次重新生成,比较影响性能。非高并发的系统可以采用该方案

(二) 自增长短URL维持一个自增长的二进制自然数,然后将该自然数进行Base64编码即可得到一系列的短URL。这样生成的的短URL必然唯一,而且还可以生成小于6个字符的短URL,比如自然数0的Base64编码是字符“A”,就可以用http://1.cn/A作为短URL但是这种算法将导致短URL是可猜测的,短链一般不允许可预测,因此不建议该方案

(三) 预生成短URL通过应用预先生成一批没有冲突的短URL字符串,当外部请求输入长URL需要生成短URL的时候,直接从预先生成好的短URL字符串池中获取一个即可。(像不像生成分布式唯一ID的思路),实时上可以提前预先生成足够的短链放入到短链池中(例如每次百亿个短链),当每次需要长链转为短链的时候,直接从短链池中找一个未使用的短链即可。因为预生成短URL是离线的,所以这时不会有性能方面的问题,推荐方案

三、其他

 如果针对百亿、千亿级别的短链,还要考虑以下问题  1、存储:   每月新生成短URL5亿条,短URL有效期2年,那么总URL数量120亿。每条短URL数据库记录大约1KB,那么需要总存储空间12TB(不含数据冗余备份)

  2、QPS:   每月新生成短URL5亿条每条短URL平均读取次数100次,那么平均访问吞吐量(每秒访问次数)2 万(5亿*100/30/24/3600)

  3、 网络带宽:   短URL的重定向响应包含长URL地址内容,长URL地址大约500B,HTTP响应头其他内容大约500B,所以每个响应1KB,高峰期需要的响应网络带宽320Mb。

  4、性能:99%请求响应时间小于20ms,平均响应时间小于10ms

【关联阅读】

文章转载自架构经纬,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论