短链服务

1.背景

本文对于过期删除,统计数据等拓展功能也不具体介绍,也不对网络重定向等进行介绍

作用,意义

节省网址长度,便于社交化传播
方便后台跟踪点击量、地域分布等用户统计
域名屏蔽,减少域名的暴露
隐藏真实url地址,审核做付费推广
结合生成二维码

功能设计

func genShort(longUrl) : 根据长连接生成短链接
func getLong(shortUrl): 根据短链接还原成长连接

算法思考:

1.是否可以不利用存储(db,redis等),存在一一映射,保证短链,长链之间的正向逆向映射
不存在,这样的话都不用压缩算法了

2.短链一般有几位
比如base62算法的话,62^6=500亿了

3.同一长网址生成短码是否应该相同
视情况而定

2.长链到短链

Hash算法

以MD5算法为例,把长链直接MD5得到32位字符串,再通过移位等操作能拿到短链
算法不详细介绍,可参照refer代码
但是这里类似hash会有一个问题是,即不同的长链,有能拿到同样的短链,这个时候需要解决冲突

解决冲突

比如原长连接加上随机字符串再重试,反复重试直到短链没有用过,即没有产生冲突

业界有更合适的发号器算法,避免了冲突

发号器算法

发号器里面的号即为一个数字ID

这里其实换一种思路,不要用长链作为入参,可以把一个唯一ID作为入参

如何选择唯一ID:
  1.比如mysql自增主键
  2.前面自己写的文章ID分布式生成器

映射算法:
  1.可参考base62编码,即 [0-9a-zA-Z]字符集,能把唯一的ID换成62进制的编码,也会是唯一的

这样的映射关系保证了输入ID和输出62进制串的一一映射关系,就不会有hash算法中的解决冲突,重试的问题

3.短链还原长链

即根据db里面里面找到信息找,找到short_url -> long_url等

4.思考

发号器算法如何避免重复的

之前看过用hash的,毕竟解决冲突这种事情,要实现,重试成本,比如再加上当前时间戳重试MD5重试几次等等
这里发号器的思路主要是通过唯一ID进行1:1的映射算法(base62),保证短链也是唯一

同一网址生成短码是否应该相同

这里可以相同可以不同
相同,根据严格程度分为两种:


1.严格:需要额外的存储成本保证long_url到短链接的映射关系,如建立long_uri为db索引,保证相同长链生成的短链都相同
2.宽松:提供最近一小时LFU的长链到短链的映射,保证最近一段时间相同的长链生成同样的短链


不同:
看似不够完美,同样的长链每次生成短链不同,和我们通常期望的“幂等性”不一样,但是实现以及速度上都是最方便的

5.refer

https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md

https://pathbox.github.io/2018/02/22/short-url-build-system/

https://www.zhihu.com/question/29270034

https://www.jianshu.com/p/d1cb7a51e7e5

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容