999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

短URL系統是怎么設計的?

2015-04-16 13:23:09田鵬晨
計算機與網絡 2015年10期

■田鵬晨

短URL系統是怎么設計的?

■田鵬晨

實現一個算法,將長地址轉成短地址。實現長和短一一對應。然后再實現它的逆運算,將短地址還能換算回長地址。

這個回答看起來挺完美的,然后候選人也會說現在時間比較短,如果給我時間我去找這個算法就解決問題了。但是稍微有點計算機或者信息論常識的人就能發現,這個算法就跟永動機一樣,是永遠不可能找到的。即使我們定義短地址是100位。那么它的變化是62的100次方。62=10數字+26大寫字母+26小寫字母。無論這個數多么大,他也不可能大過世界上可能存在的長地址。所以實現一一對應,本身就是不可能的。

正確的原理是通過發號策略,給每一個過來的長地址,發一個號即可,小型系統直接用mysql的自增索引就搞定了。如果是大型應用,可以考慮各種分布式key-value系統做發號器。不停的自增就行了。第一個使用這個服務的人得到的短地址是http://xx.xx/0第二個是http://xx.xx/1第11個是http: //xx.xx/a第依次往后,相當于實現了一個62進制的自增字段即可。

幾個子問題

1.62進制如何用數據庫或者KV存儲來做

其實我們并不需要在存儲中用62進制,用10進制就好了。比如第10000個長地址,我們給它的短地址對應的編號是9999,我們通過存儲自增拿到9999后,再做一個10進制到62進制的轉換,轉成62進制數即可。這個10~62進制轉換,你完全都可以自己實現。

2.如何保證同一個長地址,每次轉出來都是一樣的短地址

上面的發號原理中,是不判斷長地址是否已經轉過的。也就是說用拿著百度首頁地址來轉,我給一個http://xx.xx/abc過一段時間你再來轉,我還會給你一個http://xx.xx/xyz。這看起來挺不好的,但是不好在哪里呢?不好在不是一一對應,而一長對多短。這與我們完美主義的基因不符合,那么除此以外還有什么不對的地方?

有人說它浪費空間,這是對的。同一個長地址,產生多條短地址記錄,這明顯是浪費空間的。那么我們如何避免空間浪費,有人非常迅速的回答我,建立一個長對短的KV存儲即可。嗯,聽起來有理,但是......這個KV存儲本身就是浪費大量空間。所以我們是在用空間換空間,而且貌似是在用大空間換小空間。真的劃算嗎?這個問題要考慮一下。當然,也不是沒有辦法解決,我們做不到真正的一一對應,那么打個折扣是不是可以搞定?

這個問題的答案太多種,各有各招。這個方案最簡單的是建立一個長對短的hashtable,這樣相當于用空間來換空間,同時換取一個設計上的優雅(真正的一對一)。實際情況是有很多性價比高的打折方案可以用,這個方案設計因人而異了。那就說一下我的方案吧。

我的方案是:用key-value存儲,保存“最近”生成的長對短的一個對應關系。注意是“最近”,也就是說,我并不保存全量的長對短的關系,而只保存最近的。比如采用一小時過期的機制來實現LRU淘汰。

這樣的話,長轉短的流程變成這樣:

在這個“最近”表中查看一下,看長地址有沒有對應的短地址,有就直接返回,并且將這個key-value對的過期時間再延長成一小時。如果沒有,就通過發號器生成一個短地址,并且將這個“最近”表中,過期時間為1小時。

所以當一個地址被頻繁使用,那么它會一直在這個key-value表中,總能返回當初生成那個短地址,不會出現重復的問題。如果它使用并不頻繁,那么長對短的key會過期,LRU機制自動就會淘汰掉它。

當然,這不能保證100%的同一個長地址一定能轉出同一個短地址,比如你拿一個生僻的url,每間隔1小時來轉一次,你會得到不同的短地址。但是這真的有關系嗎?

3.如何保證發號器的大并發高可用

上面設計看起來有一個單點,那就是發號器。如果做成分布式的,那么多節點要保持同步加1,多點同時寫入,這個嘛,以CAP理論看,是不可能真正做到的。其實這個問題的解決非常簡單,我們可以退一步考慮,我們是否可以實現兩個發號器,一個發單號,一個發雙號,這樣就變單點為多點了?依次類推,我們可以實現1000個邏輯發號器,分別發尾號為0到999的號。每發一個號,每個發號器加1000,而不是加1。這些發號器獨立工作,互不干擾即可。而且在實現上,也可以先是邏輯的,真的壓力變大了,再拆分成獨立的物理機器單元。1000個節點,估計對人類來說應該夠用了。如果你真的還想更多,理論上也是可以的。

主站蜘蛛池模板: 亚洲视频在线观看免费视频| 免费看黄片一区二区三区| 人妻丝袜无码视频| 91香蕉国产亚洲一二三区| 91偷拍一区| 福利片91| 欧美日韩亚洲综合在线观看| 扒开粉嫩的小缝隙喷白浆视频| 91人人妻人人做人人爽男同| 久久无码高潮喷水| 女人av社区男人的天堂| 97久久精品人人| 亚洲色图欧美| 亚洲成A人V欧美综合| 国产精品99在线观看| 久久无码av三级| 亚洲免费播放| 国产乱视频网站| 99re这里只有国产中文精品国产精品| 亚洲国产系列| 国产综合亚洲欧洲区精品无码| 国产精品欧美日本韩免费一区二区三区不卡| 欧美第九页| 亚洲无线观看| 波多野结衣一区二区三区AV| 天天躁夜夜躁狠狠躁躁88| 国产无人区一区二区三区| 国产福利免费视频| 国产在线91在线电影| 久久精品女人天堂aaa| 丝袜国产一区| 麻豆国产在线观看一区二区| 色综合网址| 国产免费黄| 成人免费午夜视频| 国产成在线观看免费视频| 成年片色大黄全免费网站久久| 国产精品网址在线观看你懂的| 精品第一国产综合精品Aⅴ| 久久国产拍爱| 亚洲国产成人精品青青草原| 91亚洲精品第一| 1769国产精品视频免费观看| www精品久久| 免费国产高清视频| 亚洲国产综合精品一区| 日本免费精品| 日韩小视频在线播放| 欧美午夜在线播放| 久久久久人妻精品一区三寸蜜桃| 婷婷成人综合| 国产在线麻豆波多野结衣| 曰AV在线无码| 亚洲美女操| 亚洲中文字幕无码爆乳| 高清乱码精品福利在线视频| 四虎成人免费毛片| 在线视频亚洲色图| 高清不卡毛片| 中国丰满人妻无码束缚啪啪| 五月婷婷综合在线视频| 无码综合天天久久综合网| 国产精品视频猛进猛出| 国产亚洲欧美在线中文bt天堂 | 2019年国产精品自拍不卡| 欧美成人精品高清在线下载| 亚洲成人在线网| 国产精品护士| 亚洲精品不卡午夜精品| 永久免费无码日韩视频| 高清视频一区| 久久亚洲精少妇毛片午夜无码| 欧美另类第一页| 中文字幕在线永久在线视频2020| 欧美啪啪精品| 国产美女无遮挡免费视频网站 | 国产丝袜无码一区二区视频| 69av免费视频| 2020国产精品视频| 亚洲国产系列| 国产日本欧美在线观看| 亚洲精品成人福利在线电影|