System Design of Tiny Url

Why do we need URL shortening

For example, if we shorten this page through TinyURL:

https://www.educative.io/collection/page/5668639101419520/5649050225344512/5668600916475904/

We would get:

http://tinyurl.com/jlg8zpc

 

How to generate Tiny URL

Suppose a tinyURL is 7 characters long and each character can be taken from following 62 alphabets

  • a-z = 26
  • A-Z = 26
  • 0-9 = 10

We can generate 62^7 ( ~= 3.5 trillion) tinyURLs from 62 alphabets having 7 characters length.(除以每天预计生成的条数 可以预估url多久枯竭 并且根据url长度预估需要的存储空间)

 

System Design

 

 

Detail

根据自增ID 来生成对应的base 62编码url ,这样不会发生collision。如果多机并发顺序生成id 保持同步 需要使用分布式锁 效率极低。 所以考虑使用range counter 对id进行范围切割。

例如:

1 -- 100k ~ 200k

2 -- 200k ~ 300k

n -- ...

 

使用zookeeper来实现range counter, 因为zookeeper 作为nosql 具有最终一致性 高可用性 以及 高可扩展性。

当webserver要生成url时 先访问缓存 如果没有命中 ,且本地没有range或者range枯竭 向zk申请range 将转换结果同步到persistence and cache。如果服务器宕机 则擦除zk中对应的range。

 

 

reference:https://www.youtube.com/watch?v=JQDHz72OA3c&list=LLzFCWqxDhIffTUi1VOx2iqw&index=6&t=0s

 

转载于:https://www.cnblogs.com/lnas01/p/11240031.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值