怎么样设计短链接系统?

这篇具有很好参考价值的文章主要介绍了怎么样设计短链接系统?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

短链接是什么?

短链接,顾名思义就是短的链接,能将很长的链接转化为短链接,并且能由短链接指向原来长链接所指向的地方。

为什么需要短链接?

  • 在很多地方,比如微博、推特限制了每一条博文内容长度,那么如果链接太长可能就无法发出去了。
  • 生成的二维码也更加容易识别些
  • 很多服务也是依靠长度计费的,少点链接的长度也能省下一些钱
  • 短链接也相当灵活。如果原来指向的地址发送改变,那么也容易指向新的地方

如何生成

Hash

最简单直接的方式其实是对长链接生成hash。然而这种方法却存在问题

  • 存在hash碰撞
  • 无法将短链接逆转为长链接

为了解决无法逆转的问题可以通过储存对应hash与链接的映射来实现,并且通过bloom filter来筛选出碰撞的hash,从而在后面添加字符来达到唯一性,从而解决hash碰撞

即使如此,这种方法仍然存在问题

  • 储存映射。不仅占用了储存空间,还给系统增加了额外复杂度
  • 碰撞添加字符到达唯一性。如何添加成为了问题,如果是通过一个id,递增添加,那么在高并发情况下,这可能会成为性能瓶颈(引入加锁全局id,锁会成为瓶颈;直接递增,那么一次次判断递增后的短链接是否存在也会成为瓶颈)

尽管如此,在长链接并不是特别多或者不在乎碰撞的情况下,hash方法是一个简单易行的方案

分配唯一编号

为每一个长链接唯一编号。本方法优势明显,不存在碰撞问题,也不存在为了解决碰撞,而一直递增以达到不重复的性能损失问题。但仍然存在一些问题

  • 分配编号是串行的。

    对于redis来讲,单机能支撑10w qps,性能相当高,只是要考虑到持久化;

    mysql自增机制相对来讲性能较差,但是比较简单,对于多数业务来讲完全够用

  • 仍然需要额外空间储存对应关系

  • 在分布式系统中需要更多处理来保证唯一

    这与分布式主键的处理方法一致,比如说不同子系统之间不同的初始值以及递增步伐、雪花算法、号段模式、uuid等

在选择分配唯一编号后的诸多问题

如何设计储存短链接和长链接映射的表呢?

首先要搞明白用什么类型来储存长短链接。

长链接显然不能用整数类型进行存储,只能用字符串

而对于短链接,用整数类型,储存空间更小,甚至能范围查询(虽然这样生成的唯一编号并没有太大的实际意义,用到范围查询的可能性并不高),但由于实际使用中用的一般是62进制(10个数字+2*26字母),所以还需要进行转换,如果采用字符串则少了转换过程。总的来说,采用整数类型优势更为明显。

在长短链接之后,最好还是考虑一下升级问题。比如最开始采用了mysql生成唯一编号,随着业务发展无法充分满足需求要切换到redis生成的方式,但是mysql生成又不能直接停下,因为还要生成唯一编号。这种情况下可以添加新字段source来区别生成id来源

如果要对短链接生成、访问进行追踪数据,那么储存生成时间、用户、ip等信息的字段也要添加

此外考虑到基本场景是根据短链接查询长链接,因此短链接最好建立索引。那么短链接是否可以干脆作为主键呢?一般而言,短链接是不会出现重复的,并且也不会超出最大整数范围,那么为了加快查询,添加为主键也不失为一个好的方法

如果碰到相同的长链接是否生成完全一致的短链接呢?

取决于是否要追踪数据。如果需要分析访问访问特征数据,比如访问该链接用户、ip等,那么可以将信息编码到短链接中

如果根本不需要追踪或者根本不需要通过这种方式追踪,那么就并不需要长短链接一对多生成了

短链接访问量大的时候如何优化呢?

经典老办法——加缓存。

递增编号存在可能会被遍历的问题,该如何解决呢?

  • 安全措施:限制频率,屏蔽用户、ip等
  • id稀疏:不严格按照1进行递增
  • 生成特别的id:比如采用递增id+hash(id+key)这样的方法
  • 内外分离:内部采用递增,外部生成难以找到规律的id(比如随机、hash、加密等),并储存内外映射
  • 不采用递增编号:比如uuid、雪花算法等
  • 业务分析是否是个问题:如果本来就是公开的内容,那么就算被遍历又怎么了;如果是非公开的内容,那么添加身份认证是否会更好呢?毕竟即使采用其他方法,攻击者无法通过遍历获取到内容,但也有可能从其他渠道知道链接

选择301还是302作为状态码?

301、302都是重定向状态码只是301代表永久重定向,这会直接从游览器拿缓存,这样既没有灵活性,也无法追踪。而302则代表临时重定向,也能利用缓存,显然是更优的选择文章来源地址https://www.toymoban.com/news/detail-508050.html

Ref

  1. https://redis.io/docs/management/optimization/benchmarks/
  2. https://www.zhihu.com/question/29270034
  3. https://juejin.cn/post/6844904090602848270
  4. https://www.v2ex.com/t/235554

到了这里,关于怎么样设计短链接系统?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 派森语言python干什么的,派森编程课程怎么样

    大家好,小编来为大家解答以下问题,派森语言python干什么的,派森编程课程怎么样,今天让我们一起来看看吧!   简单的数学运算 整数相加,得到整数: 2 + 2 4 浮点数相加,得到浮点数: 2.0 + 2.5 4.5 整数和浮点数相加,得到浮点数: 2 + 2.5 4.5 变量赋值 Python使用变量名=表

    2024年02月14日
    浏览(40)
  • 水星随身wifi怎么样?水星随身wifi有什么功能和作用

    如今随身wifi产品随处可见,自从360随身wifi,小米wifi等上市之来,随身wifi市场也是竞争激烈。当然了,随身wifi由于出色的表现。一问世就得到极大程度的喜欢。下面yii666小编要为大家介绍的是水星随身wifi。对于水星随身wifi怎么样?好不好?有什么样的功能。下面小编来介绍

    2024年02月06日
    浏览(35)
  • 什么样的人适合学习网络安全?怎么学?

    有很多想要转行网络安全或者选择网络安全专业的人在进行决定之前一定会有的问题: 什么样的人适合学习网络安全?我适不适合学习网络安全? 会产生这样的疑惑并不奇怪,毕竟网络安全这个专业在2017年才调整为国家一级学科,而且大众对于网络安全的认知度不高,了解

    2023年04月22日
    浏览(37)
  • 小度wifi怎么样?小度wifi是什么?小度wifi设备预订流程

    今天小度wifi现已经接受全面预订【18.9元】,一看就是针对360 wifi的,不知道什么时候发售,小编也想买个试试,希望性能可以超越,不少人觉得360随身wifi实用性的功能很少,期待小度wifi更开发出更多实用功能。 小度wifi怎么样? 小度wifi是一款便携式USB路由器,它实现了用户

    2024年02月06日
    浏览(26)
  • 【网络安全】什么样的人适合学?该怎么学?

    什么样的人适合学习网络安全?我适不适合学习网络安全? 当然,产生这样的疑惑并不奇怪,毕竟网络安全这个专业在2017年才调整为国家一级学科,而且大众对于网络安全的认知度不高,了解最多的可能就是个人信息泄露或者社区经常宣传的国家反诈APP。正是因为知之甚少

    2024年02月19日
    浏览(39)
  • 瑞星随身wifi怎么样 瑞星随身wifi多少钱以及随身wifi有什么优势

    今天,瑞星公司正式发布国内第一款具备安全功能的随身WiFi,并联合知名电商京东商城独家首发。瑞星安全专家介绍,此次发布的随身WiFi与市场上其他同类产品相比具有明显的技术优势,不仅实现了手机、Pad等移动设备上网零流量,其最大的亮点是能为用户提供一个安全的

    2024年02月06日
    浏览(37)
  • 电脑重装系统会怎么样对系统有影响吗

    当电脑系统出现故障就需要进行重装。但是有的网友没有重装过系统,多少会有些担心,向小编咨询电脑重装系统会怎么样对系统有影响吗,下面小编就来分享下电脑重装系统会怎样有什么影响。 工具/原料: 系统版本:win10家庭版 品牌型号:戴尔 灵越15 方法/步骤: 一、电

    2024年02月15日
    浏览(26)
  • 鸿蒙是一个怎么样的操作系统,真的是安卓套壳吗?

    从鸿蒙项目正式推出以来,就一直有各自声音,有看好的,认为鸿蒙的出现将会成为一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展;也有的人在唱衰,觉得鸿蒙发展不起来,甚至认为鸿蒙只是安卓的换皮、套壳。 那事实是怎么样的?鸿蒙与安卓之间

    2024年02月11日
    浏览(30)
  • 阿里云独享型通用算力u1云服务器怎么样?通用算力型u1实例有什么优势?

    在阿里云2024年的活动中,独享型通用算力u1云服务器是用户比较关注的云服务器,因为它的性能要比活动内的经济型e实例好,但是价格又比计算型c7、通用型g7等其他企业级实例的价格要便宜。那么,独享型通用算力u1云服务器到底怎么样呢?它又有哪些优势呢?接下来,本文

    2024年01月25日
    浏览(36)
  • 编程应用实际场景:台球厅怎么样用电脑给客人计时,台球计时收费系统操作教程

    一、前言 准确控制顾客在店内游玩的时间,从而控制店内的各项成本,并提升店内的客流量。 在顾客享受计时项目的时候,可以同时添加其他食物消费,并将单据合并统一结账。 软件中的会员功能可以为客户办理会员 可以使用灯控器控灯,在开始计时的时候,开灯,结账后

    2024年02月04日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包