国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

互聯網短鏈接服務系統設計要點

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-08-25 10:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

什么是短鏈接服務

短鏈接服務將原本較長的網址轉化成較短的網址,從而便于用戶的記憶與社交軟件上的傳播。

假設,我們要做一次簡單的營銷活動,活動流程大體如下:

首先,將營銷落地頁,一個較長的 URL通過短鏈接服務轉化為一個比較短的 URL;

然后,通過營銷渠道將短鏈接發送給目標用戶(比如短信);

在用戶獲得短鏈接后,通過鏈接訪問短鏈接服務。系統接受請求并將請求重定向到原始的長鏈地址;

最后,用戶使用長鏈地址直接訪問目標網站,從而獲得最終響應結果。

整體流程如下:

cdd20772-4290-11ee-a2ef-92fbcf53809c.jpg

短鏈接服務的核心流程主要包括 創建短鏈接 和 訪問短鏈接 。

系統設計要點

短鏈接服務的核心流程主要圍繞 Key 和 Map 進行構建的,如:

創建短鏈接。首先,生成一個 Key,將長鏈地址作為 value 保存到 Map 中,然后將短鏈域名和 key 拼接成短鏈接,返回給調用方;

訪問短鏈接。服務從 URL 中提取 key,然后在 Map 中查找目標鏈接,對目標地址做重定向處理。

Map 結構我們可以基于 MySQL 和 Cache 進行構建,那就剩下如下問題了:

Key 怎么來,又是怎么維護的?

如何通過 Http 協議進行請求重定向?

2.1 Key 生成

通常情況下,Key 的生成方式由很多。但對于短鏈接服務來說,生成 Key 的長度是一個非常重要的指標。

首先,生成的 Key 不能重復;其次,Key 要盡可能短。這樣才能使最終短鏈長度盡可能的小。

基于此,我們無法使用分布式 Key 生成算法,如 UUID。最佳的生成策略應該是基于 Number 自增的方案。

結論:我們需要一個基于 Number 自增的 Key 生成器。

2.2 Key 編解碼

如果我們使用 Number 作為 Key,那么還有沒有方案進一步壓縮 Number 長度呢?

對于數字來說:

8 進制比 2 進制短;

10 進制比 8 進制短;

16 進制比 10 進制短;

......

因此,我們可以使用高進制對數字 Key 進行編解碼,從而進一步壓縮 Key 的長度。

2.3 請求重定向

請求重定向是 HTTP 協議的一部分,JEE 的 HttpServletResponse 就提供重定向接口,同時 Spring MVC 對其也提供了支持。

基于 HttpServletResponse 的重定向:

public void redirect(@PathVariable String code, HttpServletResponse response) throws IOException {
    String url = getTargetUrl(code);
    // 調用 sendRedirect 方法,進行請求重定向
    response.sendRedirect(url);
}

基于 Spring MVC 的重定向:

public ModelAndView redirect(@PathVariable String code){
    String url = getTargetUrl(code);
    // 使用 RedirectView,進行請求重定向
    RedirectView redirectView = new RedirectView();
    redirectView.setUrl(url);
    return new ModelAndView(redirectView);
}

要點分析完成后,讓我們先把 maven 項目搭建起來。

項目搭建

該項目使用 Spring Boot 作為主要開發框架。

項目依賴組件:

組件 含義
spring-boot-starter-web Web
flyway 數據庫管理
Junit 測試
lombok 自動生成getter、setter

隨著功能的增加,將為項目添加更多依賴。

3.1. 項目生成

瀏覽器中輸入 https://start.spring.io/ ,打開 spring-boot 項目生成器,按照下列配置生成項目:

名稱
項目類型 maven
語言 java
Boot版本 2.1.1
group com.geekhalo
artifact tinyurl
dependency web、flyway、lombok

點擊“Generate Project”,生成并下載項目。將下載的項目解壓,得到一個完整的 maven 項目,打開熟悉的 IDE,將項目導入到 IDE 中。

我們生成了一個空的 Spring Boot 項目,稍后的所有操作都會基于這個項目完成。

項目成功生成后,讓我們對系統進行進一步分析。首先,需要對系統中的核心組件進行梳理。

核心組件

基于設計分析,我們可以整理出系統所需的核心組件。

4.1 NumberGenerator

通過自增方式生成 Number 類型的 Key。

其接口簽名如下:

public interface NumberGenerator {
    /**
     * 生成自增 Key
     * @return
     */
    Long nextNumber(NumberType type);
}

4.2 NumberEncoder

對 Number 進行編解碼操作,以進一步減少 Key 的長度。

其接口簽名如下:

public interface NumberEncoder {
    /**
     * 對 Number 進行編碼
     * @param id
     * @return
     */
    String encode(Long id);


    /**
     * 對 Number 進行解密
     * @param str
     * @return
     */
    Long decode(String str);
}

4.3 TargetUrlRepository

用于處理目標 URL 的持久化。

其接口定義如下:

public interface TargetUrlRepository {
    /**
     * 添加鏈接
     * @param targetUrl
     */
    void save(TargetUrl targetUrl);


    /**
     * 獲取連接
     * @param id
     * @return
     */
    TargetUrl getById(Long id);
}

至此,系統核心組件就分析完了。接下來,讓我們看下核心流程。

核心流程

核心流程主要包括創建短鏈接和訪問短鏈接。

5.1 創建短鏈接

創建短鏈接,主要服務于內部系統,將較長的 URL 地址提交到短鏈接服務,并獲取與之對應的較短的 URL 地址。

創建短鏈接流程大體如下:

cde8633c-4290-11ee-a2ef-92fbcf53809c.jpg

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 互聯網
    +關注

    關注

    55

    文章

    11336

    瀏覽量

    109889
  • 系統設計
    +關注

    關注

    0

    文章

    173

    瀏覽量

    22816
  • MySQL
    +關注

    關注

    1

    文章

    905

    瀏覽量

    29517
  • key
    key
    +關注

    關注

    0

    文章

    53

    瀏覽量

    13334

原文標題:高性能系統設計:互聯網短鏈接服務

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    聯想將進軍互聯網

    投資力度將達到數千萬元人民幣。  基于該協議,聯想的互聯網電視終端將獲得包括SMG來自全球的高清、高質的視聽內容,以及多種非視聽增值服務。SMG視聽資源除了應用于聯想的互聯網電視終端外,還將應用于聯想
    發表于 03-18 10:48

    【MiCOKit申請】基于互聯網WiFi的智能家居系統

    申請理由:本產品是基于互聯網WiFi控制系統,USB串口調試比較方便,正好能夠滿足我現在開發的智能家居的要求,之前也開發過類似的WiFi無線模塊的項目,智能農田灌溉系統,基于無線通信,太陽能綠色能源
    發表于 08-09 17:43

    互聯網知識分享交流

    互聯網交流,你了解互一起討論一下吧聯網+嗎,查看世界工廠網網頁,你會了解更hulianwang多的hulian互聯網知識哦
    發表于 12-29 15:25

    工業互聯網

    工業互聯網是全球工業系統與高級計算、分析、感應技術以及互聯網連接融合的結果。它通過智能機器 間的連接并最終將人機連接,結合軟件和大數據分析,重構全球工業、激發生產力,讓世界更美好、更快速、更安全、更
    發表于 01-25 09:29

    工業互聯網

    工業互聯網是全球工業系統與高級計算、分析、感應技術以及互聯網連接融合的結果。它通過智能機器 間的連接并最終將人機連接,結合軟件和大數據分析,重構全球工業、激發生產力,讓世界更美好、更快速、更安全、更
    發表于 04-17 15:56

    技術與互聯網+

    急急急!!!!!!!!!!!請問,如果用單片機做出了一個作品,互聯網+可以怎么用的上我的作品?除了用互聯網賣出去,還可以怎么辦呢
    發表于 07-03 22:53

    智能熱潮來襲,凈水行業的”互聯網+“時代

    智能熱潮來襲,凈水行業的”互聯網+“時代互聯網時代的到來,很多銷售理念被顛覆!有人說免費才能擴大市場,有人認為產品質量可靠才能站穩陣腳,還有觀點認為必須提供完善的售后服務,可對于傳統企業——凈水行業
    發表于 09-21 21:58

    智能熱潮來襲,凈水行業的”互聯網+“時代

    智能熱潮來襲,凈水行業的”互聯網+“時代互聯網時代的到來,很多銷售理念被顛覆!有人說免費才能擴大市場,有人認為產品質量可靠才能站穩陣腳,還有觀點認為必須提供完善的售后服務,可對于傳統企業——凈水行業
    發表于 09-22 15:04

    互聯網與工業物聯網之間的區別與聯系

    了,就先說說互聯網吧。現階段的互聯網早已不滿足于收發郵件、文件傳輸、Web服務等功能,而由互聯網衍生出來的視頻直播、網頁游戲、音樂、社交、電子商務等
    發表于 06-14 10:18

    基于“互聯網+”與北斗的精準定位智慧停車系統

    停車系統進行集中管理,相信應該會好很多。精準定位智慧停車系統目前,太原市已經開始著手建設“互聯網+”與北斗精準定位智慧停車系統,結合車位傳感及智能收費管理終端,創新無人值守道路停車管理
    發表于 08-08 17:07

    聯網互聯網有何關聯

    聯網其實是互聯網的一個延伸,物聯網的本質還是互聯網互聯網的終端是計算機(PC、服務器),而物
    發表于 09-12 15:56

    空間互聯網天線設計

    如鳥兒展翅,如飛機翱翔,未來的數據共享方式是如此的快捷、自由。環繞地球運行的衛星有可能徹底地改變人類收集與共享信息的方式。相比于有線或無線數據網絡,以衛星系統為基礎的空間互聯網(Internet of Space,簡稱 IoS)技術能夠向全球各地,甚至是最偏遠的地區提供網
    發表于 07-16 07:31

    什么是產業互聯網

    2018年10月,騰訊宣傳進軍產業互聯網;2019年9月,騰訊完成了史上最大的組織架構調整,新成立云與智慧產業事業群,正式發力產業互聯網;2020年1月,騰訊發布《2020產業安全報告:產業互聯網
    發表于 01-18 11:40

    在ARM9上用輕型WEB服務器可以不接入互聯網

    arm9linux系統平臺:最近查ARM9上可以用的輕型WEB服務器 ,有BOA, HTTPD , THTTPD 等等,支持資源比較好的 是BOA ,但這種實現方式需要接入互聯網,而且還可能集成
    發表于 07-22 14:10

    ARM上實現不用接入互聯網的WEB服務器可以嗎

    arm9linux系統平臺:最近查ARM9上可以用的輕型WEB服務器 ,有BOA, HTTPD , THTTPD 等等,支持資源比較好的 是BOA ,但這種實現方式需要接入互聯網,而且還可能集成
    發表于 10-28 10:53