短信中的链接为什么那么短?

本文作者:IMWeb coverguo 原文出处:IMWeb社区 未经同意,禁止转载

前言

前段时间读了一些关于短网址的文章,加上刚好收到一个含有短网址的短信。一时兴起或者说是顺其自然就写了这篇文章哈。

什么是短 URL?

短网址(Short URL),顾名思义就是比较短的 URL 网络地址, 在如今 Web 2.0 的时代,短网址十分得流行,在业界已经有许多短网址生成的服务,使我们可以用各位简短的网址来替代原来十分冗长的网址。让分享的网页链接不会因为太长而引起用户反感,影响体验,使使用者更容易分享哈。

事实上,短网址,也就是短链接在我们生活中随处可见,如微博分享、外卖订单信息、或者如上面的快递短信,短信中就含有一条短网址 http://tb.cn/vvDezXw 。)

当我们打开短网址时,网页会直接跳转到你要缩短的网址,就如打开上面的短网址,其会通过重定向的方式如 302 跳转到天猫的一个页面网址(相对短网址来说,所对应的网址长的多)

短网址的意义

使用短链接有什么好处呢?事实上,它有下面几个好处:

  • 内容需要(缩短URL满足字数限制)
  • 简介美观(用户友好)
  • 统计需要(网页流量统计、点击统计等)

无可否认的是,在微博和手机短信提醒等限制字数(一条短信最多就一两百个字)的地方来使用短网址,不得不说是一个不错的方案。一条短信是有限制字数,如果分享链接过长,就无法展示更多消息内容了。因此我们可以发现,在许多短信中,其网址都是短网址 URL

我们上面天猫的一个短网址 http://tb.cn/vvDezXw 其是通过 302 的方式,即临时重定向的方式进行跳转的。目的就是为来能够在跳转前做一些短网址打开的次数统计,这些统计数据能够成为大数据分析的数据源,从而分析用户的生活习惯兴趣爱好。

短网址的原理

那么,短网址是如何生成的呢?短网址服务是如何将那么多的长网址对应到相应的短网址呢?这里简单说明下:

短网址通常结构如下:域名/短网址id

短网址 id 其通常由 26 个大写字母 + 26 小写字母 +10 个数字 即 62 种字符组成,随机生成 6 到 7 个,然后组成对应一个 短网址 id,并存入相应的数据存储服务中。

当短网址被访问的时候,短网址的解析服务,会根据 id 查询到对应页面从而实现相应的跳转。

如何保证短网址 id 不重复

事实上,假如短网址 id 为 6 位,那就是共有 2^62 个短网址。超过这个数目的网页可能性并不大。但在生成即发放短网址的时候,需要保证能够发送不重复的短网址 id。

为了保证不冲突和重复,大多数短网址服务都会采用自增的方式来分发 id,如第一个使用这个服务的人得到的短地址是 http://xxx/0 ,第11个是 http://xxx/a 等依次生成。

对于大多数小型的短网址服务,直接使用 mysql 的自增索引就可以保证不冲突,但这种方式不太适合大型的应用。因为每次操作都需要涉及数据库的增删的资源损耗。因此对于一些大型应用,我们可以通过一些分布式 key-value 系统做短网址的分发。同时不停的自增就可以来。

如何分布式生成不重复的短网址?

如果生成短网址的服务是分布式的(用户量很大,只有一台生成一台不够用,如天猫、新浪微博),那么每个服务节点要保持同步自增,而不起冲突。是怎么做的呢?

事实上我们可以这样做。加入我们要实现有 5 台分布的短网址服务,此时我们让:

  • 服务 1,从 1 开始发放,然后每次自增 5 即 1、6、11、16...
  • 服务 2,从 2 开始发放,然后每次自增 5 即 2、7、12、17...
  • 服务 3,从 3 开始发放,然后每次自增 5 即 3、8、13、18...
  • 服务 4,从 4 开始发放,然后每次自增 5 即 4、9、14、19...
  • 服务 5,从 5 开始发放,然后每次自增 5 即 5、10、15、20...

这样每个分布的服务都能够独立工作,从而互不干扰。从而实现分布式发放。

公共短网址服务

正如前面所说,市面上有许多短网址的服务商。如下所示:

1、google 短网址服务 goo.gl

google 的 goo.gl 每次同样的网址生成的短网址都是不一样的

2、新浪 短网址服务 /sina.lt

而新浪的则是一定时间内,同样的网址生成的短网址都是一样的。且支持短网址后缀选择。

参考文章

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LEo的网络日志

coding感想(三)

3888
来自专栏后端技术探索

高并发高性能分布式框架从无到有微服务架构设计分享

微服务架构模式(Microservice Architect Pattern)。近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注。

1711
来自专栏程序你好

.Net桌面系统架构设计

1411
来自专栏IT技术精选文摘

分布式锁的技术选型及思考

5504
来自专栏ThoughtWorks

大型项目程序配置管理演化之路|TW洞见

今日洞见 文章作者、图片来自ThoughtWorks:窦衍森。封面图片来自网络。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司...

3436
来自专栏大史住在大前端

一统江湖的大前端(2)—— Mock.js + Node.js 如何与后端潇洒分手

大部分工程化的项目为方便维护,大多都会采用前后端分离的开发方式,而前端和后端的工作基本也是同时下发的,这时前端开发人员就会很尴尬,后端在干活的时候,领导几乎一定...

2097
来自专栏Java架构沉思录

缓存在高并发场景下的常见问题

当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。这就比较依赖缓存的过期和更新策...

1524
来自专栏北京马哥教育

我所理解的性能测试是什么?

扯淡 首先说明这篇博客是文不对题的。起这个名字想法来源自韩寒的《我所理解的生活》,之前看过一个关于这本书的视频,感觉巨牛X,于是就想写一篇《我所理解的性能测试...

3989
来自专栏杨建荣的学习笔记

最近的几个技术问题总结和答疑(七) (r9笔记第38天)

今天抽空整理,发现近期问我数据恢复,灾备的问题还比较多,我简单整理了一下。 问题1: 能请教一个问题么?我们用was链接的oracle数据库,是不是不建议在wa...

3403
来自专栏butterfly100

Chris Richardson微服务翻译:微服务之事件驱动的数据管理

Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 ...

2949

扫码关注云+社区

领取腾讯云代金券