作家
登录

短网址(short URL)系统的原理及其实现

作者: 来源: 2017-11-22 13:11:11 阅读 我要评论

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践


百度短网址还许可用户自定义短码,算法二 摘要算法,不和 id 绑定,似乎挺好实现这个功能的。

背景

供给一个短址办事

你有没有发明,我们的义务中出现长 URL 就会比较麻烦?如不雅有一个短址生成器就好了。固然市情上有很多,然则我们可以反复创造一个轮子,应用这个机会测验测验一下简单的 Web 全栈开辟。

短网址(short URL)体系的道理及其实现

义务

做一个短链接生成器,可以将一个长链接缩短成一个短链接。

要发车了 :bus:

【编辑推荐】

  1. Linux Kernel编译和链接中的linker script语法详解
  2. Android开辟者必备的42个链接
  3. 为什么说深度链接将会进一步改变移动互联网?
  4. 斯坦福iOS7公开课11标记及演示Demo&拜访HTTPS链接下载数据
  5. 需求:我只是想在页面上加个链接
【义务编辑:未丽燕 TEL:(010)68476606】

发车前,和大年夜家说一下

如不雅不想反复的造轮子,想开箱即竽暌姑,可以应用基于 PHP 的开源软件 YOURLS 。 YOURLS 还可以和 WordPress 整合到一路,功能强大年夜,可扩大性高。

自增序列算法也叫永不反复算法

什么是短链接 :link:

就是把通俗网址,转换成比较短的网址。比如: http://t.cn/RlB2PdD 这种,在微博这些限制字数的应用里。好处不问可知。短、字符少、美不雅、便于宣布、传播。

  1. 百度短网址 http://dwz.cn/
  2. 谷歌短网址办事 https://goo.gl/ (需科学上彀)号称是最快的 :rocket:

原懂得析

  1. 当我们在浏览器里输入 http://t.cn/RlB2PdD 时
  2. DNS起首解析获得 http://t.cn 的 IP 地址

当 DNS 获得 IP 地址今后(比如:74.125.225.72),会向这个地址发送 HTTP GET 请求,萌芽短码 RlB2PdD

  1. http://t.cn 办事器会经由过程短码 RlB2PdD 获取对应的长 URL
  2. 请求经由过程 HTTP 301 转到对应的长 URL https://m.helijia.com 。
  3. 这里有个小的常识点,为什么要用 301 跳转而不是 302 呐?
  4. 301 是永远重定向,302 是临时重定向。短地址一经生成就不会变更,所以用 301 是相符 http 语义的。同时对办事器压力也会有必定削减。

本文记录了开辟短网址体系的┞符个过程,包含初期的算法调研、模块设计、数据库设计、功能扩大等。

然则如不雅应用了 301 ,我们就无法统计到短地址被点击的次数了。而这个点击次数是一个异常有意思的大年夜数据分析数据源。可以或许分析出的器械异常异常多。所以选择302固然会增长办事器压力,然则我想是一个更好的选择。

来自知乎 iammutex 的 谜底

算法实现

网上比较风行的算法有两种 自增序列算法、 摘要算法

算法一

设置 id 自增,一个 10进制 id 对应一个 62进制的数值,1对1,也就不会出现反复的情况。这个应用的就是低进制转化为高进制时,字符数会削减的特点。

如下图:十进制 10000,对应不合进制的字符表示。

自增序列算法 + 用户自定义短码 流程图

短网址(short URL)体系的道理及其实现

短址的长度一般设为 6 位,而每一位是由 [a - z, A - Z, 0 - 9] 总共 62 个字母构成的,所以 6 位的话,总共会有 62^6 ~= 568亿种组合,根本上够用了。

哈哈,这里附上一个进制转换对象 http://tool.lu/hexconvert/ 上图的数据就是用这个对象生成的。

具体的算法实现,自行谷歌。

算法二

  1. 将长网址 md5 生成 32 位签名串,分为 4 段, 每段 8 个字节
  2. 对这四段轮回处理, 取 8 个字节, 将他算作 16 进制串与 0x3fffffff(30位1) 与操作, 即跨越 30 位的忽视处理

这 30 位分成 6 段, 每 5 位的数字作为字母表的索引取得特定字符, 依次进行获得 6 位字符串

总的 md5 串可以获得 4 个 6 位串,取琅绫擎的随便率性一?就可作为这个长 url 的短 url 地址

这种算法,固然会生成4个,然则仍然存在反复几率

两种算法比较

  • 第一种算法的好处就是简单好懂得,永不反复。然则短码的长度不固定,跟着 id 变大年夜大年夜一位长度开端递增。如不雅非要让短码长度固定也可以就是让 id 大年夜指定的数字开端递增就可以了。百度短网址用的┞封种算法。上文说的开源短网址项目 YOURLS 也是采取了这种算法。 源码进修
  • 第二种算法,存在碰撞(反复)的可能性,固然几率很小。短码位数是比较固定的。不会大年夜一位长度递增到多位的。据说微博应用的┞封种算法。

我应用的算法一。有一个不太好的处所就是出现的短码是有序的,可能会不安然。我的处理方法是构造 62进制的字母不要按次序分列。因为想实现自定义短码的功能,我又对算法一进行了优化,下文会介绍。

流程图

自增序列算法流程图

  1. st=>start: 开端 
  2. e=>end: 停止 
  3. io1=>inputoutput: 输入网址 

  4.   推荐阅读

      EMC任志辉/陈坚:三大服务帮助企业快速数字化转型

    Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 作为IT人,特别是作为一名硬>>>详细阅读


    本文标题:短网址(short URL)系统的原理及其实现

    地址:http://www.17bianji.com/lsqh/39139.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)