URL短網址系統的演算法設計及實踐

京東科技開發者發表於2020-02-19

URL短網址系統的演算法設計及實踐

在通常情況下,URL是由系統生成的,通常包括URI路徑,多個查詢引數,可以對引數進行加密和解密。當人們要分享某個URL,比如簡訊,郵件,社交媒體,這就需要短URL。
而短網址,顧名思義就是在長度上比較短的網址。簡單來說就是幫您把冗長的URL地址縮短成8個字元以內的短網址。
你有沒有遇到過簡訊字元過長本來一條資訊搞定的事情需要發兩條?你有沒有遇到過填報系統裡填寫網址卻因為字元限制無法完整提交?你有沒有遇到過排版好的內容由於連結過長而完全打亂了美感?
這時候,你就需要用到短網址生成工具了。
如開發者社群的某個連結:https://developer.jdcloud.com/article/894?mid=14 變成短網址後:w.3.cn/1000000xZ
我們可以看到,原URL從50多個字元,縮短為了10多個字元,跳轉地址不會改變的同時,還能進行後臺連結地址的資料追蹤。非常便於訊息通知、廣告推廣等場景中使用。

短網址是如何形成的?

通常情況下短網址的生成流程,分以下2條路徑:
URL短網址系統的演算法設計及實踐
  • 從快取中查詢長網址是否已經生成過短網址,如果已經生成過,則直接返回快取中的短網址,因為同一個長網址始終對應同一個短網址。
  • 從快取中查詢長網址是否已經生成過短網址,如果沒有生成過,則使用演算法生成一個短網址,然後儲存短網址與長網址的關係,並判斷是否碰撞,本案因採用了無碰撞遞增演算法,可直接返回短網址。
注意 此處市面上大多產品採用隨機演算法,存在很大的碰撞機率,如果快取中已經存在了該短網址,就會重新生成,當併發極高的情況,碰撞率(新生成的短碼在快取中已存在,需要再次重新生的機率)也大大升高,就會形成一個死迴圈, 如上圖藍色部分,極大的降低了效能。

分散式無碰撞短碼生成演算法

短如果你經常使用短網址就會發現,市面介面生成效能普遍較差,同時生成大量短鏈時,可能會超時或失敗。這是因為市面大多的演算法是隨機演算法,碰撞率比較高,還有部分資料庫自增演算法,雖然無碰撞,但是過度依賴資料庫導致效能比較差。
而另外一種常遇到的情況是,生成的短鏈時不時的會出現出現短連線失效或連結內容無法追蹤的情況。這是因為短鏈過期了,而我們的短網址只要在過期時間內有訪問就會不斷延期,達到有訪問的連線永久有效,無訪問的連線自動過期回收的效果。
那麼怎樣才能避免上述情況的出現呢?
我們透過採用快取加記憶體的發號方式去對連結進行處理,實現了短鏈無碰撞且高效能的 分散式無碰撞短碼生成服務。
分散式無碰撞短碼生成演算法 主要透過記憶體發號、快取取號、保障機制三個主要環節來進行實現。
URL短網址系統的演算法設計及實踐
  • 綠色通道 :記憶體發號,速度極快,每次從快取取出10000個無重複號碼,然後在記憶體中便可連續生成10000個短碼,因此速度比傳統基於資料庫及快取自增發號方式快萬倍。
  • 藍色通道 :快取取號,依賴快取保證分散式發號無碰撞,批次發號,每一萬次記憶體綠色通道才走一次藍色快取通道,因此效能極高
  • 紅色通道 :保障機制,保障生成的號碼都在短網址對應長度的號碼總容量範圍內,僅在初始化及總容量用盡時執行,效能損耗可忽略不計。
透過該演算法生成的短鏈主要有以下特點:
1、有訪問自動延期,無訪問自動過期回收,可根據業務需要自行選擇有效期,減少死碼長期佔用資源消耗費用,避免短碼越積越多導致的碰撞率升高及效能下降
2、自研專利演算法、無碰撞率、只依賴快取不依賴資料庫,效率超高超穩定
3、使用者自定義域名、體現自有品牌價值、成本低廉、接入簡單

實用操作指南

短網址服務目前在京東主要應用於:訂單訊息通知、物流通知、促銷簡訊、二維碼分享 等任何有字數限制的使用場景。
微博、Twitter、訊息推送、簡訊等都有單條傳送字數的限制,以簡訊為例,單條傳送限制70個字元。如果包含一個長網址(假設50個字元),則要傳遞的有效資訊就只有20個字元,很容易表達不清,或超出70個字元產生2條簡訊費用。
以我們一開始生成的連結為例:
短網址中分為域名host和短碼部分,w.3.cn/1000000xZ中,w.3.cn為域名,1000000xZ為短碼,短碼長度可根據需求進行調整,對應不同的最大有效期。
URL短網址系統的演算法設計及實踐
最大有效期為當前長度下有效期可配置的最長時間,失效後將無法再使用,服務支援有訪問時自動續期,需要傳入有效期引數0,將自動配置為最大有效期同時有訪問自動更新當前有效期為最大時間。
使用短網址服務可以把一個長網址縮短成短網址(假設20個字元),則要傳遞的有效資訊就可以增長到50個字元,即能傳遞更多的有效資訊,又能節省大量簡訊費用。因此,如何將長網址縮到最短,並且在高併發場景下保持高效率,至關重要。
你問我短碼生成難不難?
來!
首先,開啟瀏覽器輸入網址short.jdcloud.com或直接點選 體驗 ,輸入長網址,然後點選生成即可。
URL短網址系統的演算法設計及實踐
歡迎點選“ 京東雲 ”瞭解更多精彩內容。
URL短網址系統的演算法設計及實踐
URL短網址系統的演算法設計及實踐


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69912185/viewspace-2676298/,如需轉載,請註明出處,否則將追究法律責任。

相關文章