精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

互聯(lián)網(wǎng)短鏈接服務(wù)系統(tǒng)設(shè)計(jì)要點(diǎn)

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 2023-08-25 10:57 ? 次閱讀

什么是短鏈接服務(wù)

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

假設(shè),我們要做一次簡單的營銷活動(dòng),活動(dòng)流程大體如下:

首先,將營銷落地頁,一個(gè)較長的 URL通過短鏈接服務(wù)轉(zhuǎn)化為一個(gè)比較短的 URL;

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

在用戶獲得短鏈接后,通過鏈接訪問短鏈接服務(wù)。系統(tǒng)接受請(qǐng)求并將請(qǐng)求重定向到原始的長鏈地址;

最后,用戶使用長鏈地址直接訪問目標(biāo)網(wǎng)站,從而獲得最終響應(yīng)結(jié)果。

整體流程如下:

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

短鏈接服務(wù)的核心流程主要包括 創(chuàng)建短鏈接 和 訪問短鏈接 。

系統(tǒng)設(shè)計(jì)要點(diǎn)

短鏈接服務(wù)的核心流程主要圍繞 Key 和 Map 進(jìn)行構(gòu)建的,如:

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

訪問短鏈接。服務(wù)從 URL 中提取 key,然后在 Map 中查找目標(biāo)鏈接,對(duì)目標(biāo)地址做重定向處理。

Map 結(jié)構(gòu)我們可以基于 MySQL 和 Cache 進(jìn)行構(gòu)建,那就剩下如下問題了:

Key 怎么來,又是怎么維護(hù)的?

如何通過 Http 協(xié)議進(jìn)行請(qǐng)求重定向?

2.1 Key 生成

通常情況下,Key 的生成方式由很多。但對(duì)于短鏈接服務(wù)來說,生成 Key 的長度是一個(gè)非常重要的指標(biāo)。

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

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

結(jié)論:我們需要一個(gè)基于 Number 自增的 Key 生成器。

2.2 Key 編解碼

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

對(duì)于數(shù)字來說:

8 進(jìn)制比 2 進(jìn)制短;

10 進(jìn)制比 8 進(jìn)制短;

16 進(jìn)制比 10 進(jìn)制短;

......

因此,我們可以使用高進(jìn)制對(duì)數(shù)字 Key 進(jìn)行編解碼,從而進(jìn)一步壓縮 Key 的長度。

2.3 請(qǐng)求重定向

請(qǐng)求重定向是 HTTP 協(xié)議的一部分,JEE 的 HttpServletResponse 就提供重定向接口,同時(shí) Spring MVC 對(duì)其也提供了支持。

基于 HttpServletResponse 的重定向:

public void redirect(@PathVariable String code, HttpServletResponse response) throws IOException {
    String url = getTargetUrl(code);
    // 調(diào)用 sendRedirect 方法,進(jìn)行請(qǐng)求重定向
    response.sendRedirect(url);
}

基于 Spring MVC 的重定向:

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

要點(diǎn)分析完成后,讓我們先把 maven 項(xiàng)目搭建起來。

項(xiàng)目搭建

該項(xiàng)目使用 Spring Boot 作為主要開發(fā)框架。

項(xiàng)目依賴組件:

組件 含義
spring-boot-starter-web Web
flyway 數(shù)據(jù)庫管理
Junit 測(cè)試
lombok 自動(dòng)生成getter、setter

隨著功能的增加,將為項(xiàng)目添加更多依賴。

3.1. 項(xiàng)目生成

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

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

點(diǎn)擊“Generate Project”,生成并下載項(xiàng)目。將下載的項(xiàng)目解壓,得到一個(gè)完整的 maven 項(xiàng)目,打開熟悉的 IDE,將項(xiàng)目導(dǎo)入到 IDE 中。

我們生成了一個(gè)空的 Spring Boot 項(xiàng)目,稍后的所有操作都會(huì)基于這個(gè)項(xiàng)目完成。

項(xiàng)目成功生成后,讓我們對(duì)系統(tǒng)進(jìn)行進(jìn)一步分析。首先,需要對(duì)系統(tǒng)中的核心組件進(jìn)行梳理。

核心組件

基于設(shè)計(jì)分析,我們可以整理出系統(tǒng)所需的核心組件。

4.1 NumberGenerator

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

其接口簽名如下:

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

4.2 NumberEncoder

對(duì) Number 進(jìn)行編解碼操作,以進(jìn)一步減少 Key 的長度。

其接口簽名如下:

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


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

4.3 TargetUrlRepository

用于處理目標(biāo) URL 的持久化。

其接口定義如下:

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


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

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

核心流程

核心流程主要包括創(chuàng)建短鏈接和訪問短鏈接。

5.1 創(chuàng)建短鏈接

創(chuàng)建短鏈接,主要服務(wù)于內(nèi)部系統(tǒng),將較長的 URL 地址提交到短鏈接服務(wù),并獲取與之對(duì)應(yīng)的較短的 URL 地址。

創(chuàng)建短鏈接流程大體如下:

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

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 互聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    54

    文章

    11108

    瀏覽量

    103021
  • 系統(tǒng)設(shè)計(jì)

    關(guān)注

    0

    文章

    152

    瀏覽量

    21595
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    802

    瀏覽量

    26446
  • key
    key
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    12814

原文標(biāo)題:高性能系統(tǒng)設(shè)計(jì):互聯(lián)網(wǎng)短鏈接服務(wù)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    聯(lián)想將進(jìn)軍互聯(lián)網(wǎng)

    投資力度將達(dá)到數(shù)千萬元人民幣。  基于該協(xié)議,聯(lián)想的互聯(lián)網(wǎng)電視終端將獲得包括SMG來自全球的高清、高質(zhì)的視聽內(nèi)容,以及多種非視聽增值服務(wù)。SMG視聽資源除了應(yīng)用于聯(lián)想的互聯(lián)網(wǎng)電視終端外,還將應(yīng)用于聯(lián)想
    發(fā)表于 03-18 10:48

    【MiCOKit申請(qǐng)】基于互聯(lián)網(wǎng)WiFi的智能家居系統(tǒng)

    申請(qǐng)理由:本產(chǎn)品是基于互聯(lián)網(wǎng)WiFi控制系統(tǒng),USB串口調(diào)試比較方便,正好能夠滿足我現(xiàn)在開發(fā)的智能家居的要求,之前也開發(fā)過類似的WiFi無線模塊的項(xiàng)目,智能農(nóng)田灌溉系統(tǒng),基于無線通信,太陽能綠色能源
    發(fā)表于 08-09 17:43

    互聯(lián)網(wǎng)知識(shí)分享交流

    互聯(lián)網(wǎng)交流,你了解互一起討論一下吧聯(lián)網(wǎng)+嗎,查看世界工廠網(wǎng)網(wǎng)頁,你會(huì)了解更hulianwang多的hulian互聯(lián)網(wǎng)知識(shí)哦
    發(fā)表于 12-29 15:25

    工業(yè)互聯(lián)網(wǎng)

    工業(yè)互聯(lián)網(wǎng)是全球工業(yè)系統(tǒng)與高級(jí)計(jì)算、分析、感應(yīng)技術(shù)以及互聯(lián)網(wǎng)連接融合的結(jié)果。它通過智能機(jī)器 間的連接并最終將人機(jī)連接,結(jié)合軟件和大數(shù)據(jù)分析,重構(gòu)全球工業(yè)、激發(fā)生產(chǎn)力,讓世界更美好、更快速、更安全、更
    發(fā)表于 01-25 09:29

    工業(yè)互聯(lián)網(wǎng)

    工業(yè)互聯(lián)網(wǎng)是全球工業(yè)系統(tǒng)與高級(jí)計(jì)算、分析、感應(yīng)技術(shù)以及互聯(lián)網(wǎng)連接融合的結(jié)果。它通過智能機(jī)器 間的連接并最終將人機(jī)連接,結(jié)合軟件和大數(shù)據(jù)分析,重構(gòu)全球工業(yè)、激發(fā)生產(chǎn)力,讓世界更美好、更快速、更安全、更
    發(fā)表于 04-17 15:56

    技術(shù)與互聯(lián)網(wǎng)+

    急急急!!!!!!!!!!!請(qǐng)問,如果用單片機(jī)做出了一個(gè)作品,互聯(lián)網(wǎng)+可以怎么用的上我的作品?除了用互聯(lián)網(wǎng)賣出去,還可以怎么辦呢
    發(fā)表于 07-03 22:53

    智能熱潮來襲,凈水行業(yè)的”互聯(lián)網(wǎng)+“時(shí)代

    智能熱潮來襲,凈水行業(yè)的”互聯(lián)網(wǎng)+“時(shí)代互聯(lián)網(wǎng)時(shí)代的到來,很多銷售理念被顛覆!有人說免費(fèi)才能擴(kuò)大市場,有人認(rèn)為產(chǎn)品質(zhì)量可靠才能站穩(wěn)陣腳,還有觀點(diǎn)認(rèn)為必須提供完善的售后服務(wù),可對(duì)于傳統(tǒng)企業(yè)——凈水行業(yè)
    發(fā)表于 09-21 21:58

    智能熱潮來襲,凈水行業(yè)的”互聯(lián)網(wǎng)+“時(shí)代

    智能熱潮來襲,凈水行業(yè)的”互聯(lián)網(wǎng)+“時(shí)代互聯(lián)網(wǎng)時(shí)代的到來,很多銷售理念被顛覆!有人說免費(fèi)才能擴(kuò)大市場,有人認(rèn)為產(chǎn)品質(zhì)量可靠才能站穩(wěn)陣腳,還有觀點(diǎn)認(rèn)為必須提供完善的售后服務(wù),可對(duì)于傳統(tǒng)企業(yè)——凈水行業(yè)
    發(fā)表于 09-22 15:04

    互聯(lián)網(wǎng)與工業(yè)物聯(lián)網(wǎng)之間的區(qū)別與聯(lián)系

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

    基于“互聯(lián)網(wǎng)+”與北斗的精準(zhǔn)定位智慧停車系統(tǒng)

    停車系統(tǒng)進(jìn)行集中管理,相信應(yīng)該會(huì)好很多。精準(zhǔn)定位智慧停車系統(tǒng)目前,太原市已經(jīng)開始著手建設(shè)“互聯(lián)網(wǎng)+”與北斗精準(zhǔn)定位智慧停車系統(tǒng),結(jié)合車位傳感及智能收費(fèi)管理終端,創(chuàng)新無人值守道路停車管理
    發(fā)表于 08-08 17:07

    聯(lián)網(wǎng)互聯(lián)網(wǎng)有何關(guān)聯(lián)

    聯(lián)網(wǎng)其實(shí)是互聯(lián)網(wǎng)的一個(gè)延伸,物聯(lián)網(wǎng)的本質(zhì)還是互聯(lián)網(wǎng)互聯(lián)網(wǎng)的終端是計(jì)算機(jī)(PC、服務(wù)器),而物
    發(fā)表于 09-12 15:56

    空間互聯(lián)網(wǎng)天線設(shè)計(jì)

    如鳥兒展翅,如飛機(jī)翱翔,未來的數(shù)據(jù)共享方式是如此的快捷、自由。環(huán)繞地球運(yùn)行的衛(wèi)星有可能徹底地改變?nèi)祟愂占c共享信息的方式。相比于有線或無線數(shù)據(jù)網(wǎng)絡(luò),以衛(wèi)星系統(tǒng)為基礎(chǔ)的空間互聯(lián)網(wǎng)(Internet of Space,簡稱 IoS)技術(shù)能夠向全球各地,甚至是最偏遠(yuǎn)的地區(qū)提供網(wǎng)
    發(fā)表于 07-16 07:31

    什么是產(chǎn)業(yè)互聯(lián)網(wǎng)

    2018年10月,騰訊宣傳進(jìn)軍產(chǎn)業(yè)互聯(lián)網(wǎng);2019年9月,騰訊完成了史上最大的組織架構(gòu)調(diào)整,新成立云與智慧產(chǎn)業(yè)事業(yè)群,正式發(fā)力產(chǎn)業(yè)互聯(lián)網(wǎng);2020年1月,騰訊發(fā)布《2020產(chǎn)業(yè)安全報(bào)告:產(chǎn)業(yè)互聯(lián)網(wǎng)
    發(fā)表于 01-18 11:40

    在ARM9上用輕型WEB服務(wù)器可以不接入互聯(lián)網(wǎng)

    arm9linux系統(tǒng)平臺(tái):最近查ARM9上可以用的輕型WEB服務(wù)器 ,有BOA, HTTPD , THTTPD 等等,支持資源比較好的 是BOA ,但這種實(shí)現(xiàn)方式需要接入互聯(lián)網(wǎng),而且還可能集成
    發(fā)表于 07-22 14:10

    ARM上實(shí)現(xiàn)不用接入互聯(lián)網(wǎng)的WEB服務(wù)器可以嗎

    arm9linux系統(tǒng)平臺(tái):最近查ARM9上可以用的輕型WEB服務(wù)器 ,有BOA, HTTPD , THTTPD 等等,支持資源比較好的 是BOA ,但這種實(shí)現(xiàn)方式需要接入互聯(lián)網(wǎng),而且還可能集成
    發(fā)表于 10-28 10:53