主頁 >  其他 > 京東短網址高可用提升最佳實踐

京東短網址高可用提升最佳實踐

2023-05-12 10:49:37 其他

作者:京東零售 郝彥軍

什么是短網址?

短網址,是在長度上比較短的網址,簡單來說就是幫您把冗長的URL地址縮短成8個字符以內的短網址,

當我們在騰訊、新浪發微博時,有時發很長的網址連接,但由于微博只限制140個字,所以微博就自動把您發的長網址給轉換成短網址了,在微博和手機短信提醒等限制字數的地方來使用短網址,的確是一個不錯的方案,

短網址通常使用“短域名/短碼”的形式,打開短網址網頁會直接跳轉到長網址頁面,例:3.cn/CdEyF2、t.cn/RlB2PdD、dwz.cn/134128 等短網址,分別是由以下短網址服務縮短后的網址 京東短網址:http://s.3.cn/, 新浪短網址:https://sina.lt/ ,百度短網址:http://dwz.cn/,

短網址服務主要包含功能: 生成短網址(長網址縮短)、二維碼簡化、修改短網址、短網址跳轉(訪問短網址跳轉到長網址)、喚醒APP、短網址統計 等,

短網址能解決什么問題?

長網址存在的問題:

1、長網址的長度太長,下面的長網址,共記312個字符,在微博場景中,限制140字符,已無法發布出去,在短信場景中,限制70字符,會產生5條短信費用,被拆分后還無法訪問,嚴重影響用戶體驗,http://wjorder-http.jd.com/scan/np?encodePrcode=2hP_lwNr&encodeShcode=2-S83&businessSource=1&scanSkuType=2&ec=1&salerId=167916&discountsUrl=%2F%2Fcoupon.m.jd.com%2Fcoupons%2Fshow.action%3FlinkKey%3DAAROH_xIpeffAs_-naABEFoePLd7eC4GJgwsPUkFtDqklu805DO1cEqFyTHVT7fbD12AHD7DElAKgh0pfvQpX-E5PbgwLQ&unionId=1001465750

2、長網址生成的二維碼,極其復雜 ,導致手機掃描識別極其困難,低端手機甚至無法識別,嚴重影響用戶體驗,

短網址則完美解決了上述問題:

1、使用短網址服務縮短上面長網址后的短網址(3.cn/1jK-CDAE),僅有13個字符,在微博、短信等場景中發送十分容易,而且簡潔清晰,用戶體驗極好,

2、短網址生成的二維碼,極其簡潔 ,非常容易識別,用戶體驗良好,

京東短網址的業務場景:

京東短網址http://s.3.cn/,是京東唯一的短網址服務平臺,已應用到京東體系的各個業務場景中,日均產生1億條帶有3.cn的短訊息,點擊短網址還可直接喚起對應的APP和小程式,

如下圖1-2是來自七鮮、金龍魚、京東金融、蒙牛、京東等業務的營銷訊息,下圖3-4是喚起七鮮小程式、京東APP、金融APP并跳轉至落地頁的截圖,

圖1

圖2

圖3

圖4

京東短網址服務的架構優化:

改造前短網址生成流程圖說明:

1、系統首先查詢長網址(長鏈)是否已存在于redis(jimdb)或hbase中,

2、如果長鏈已存在,則表示該長網址已經生成過,可直接回傳查到的短網址,流程結束,

3、如果長鏈不存在,則使用長網址進行MD5隨機演算法生成一個長串,并分成3段,轉化成62進制短碼,拼裝成短網址,然后查詢短網址(短鏈)是否存在于redis或hbase中

4、如果短鏈不存在,則保存長網址到短網址的映射、以及短網址到長網址的映射,到redis或hbase中,回傳短網址,流程結束,

5、如果短鏈已存在,說明隨機演算法生成的短碼發生了沖突碰撞,需要回圈回到步驟3,加鹽重新生成一個短碼,直到生成的短碼檢測沒有沖突后,走到步驟4結束,

從原流程圖分析原系統優劣勢:

優勢:采用隨機演算法,同一長鏈在同一賬號下始終唯一,適用于長網址大量重復生成的情景,可以在步驟2快速回傳,且隨機演算法遍歷難度相對較高,

劣勢:外部操作太多,性能影響較大,每次生成短網址涉及的網路請求次數至少8次(2次查redis、2次寫redis、2次查hbase、2次寫hbase),

且從上面步驟5可以看出,系統存在一個碰撞回圈,隨著短碼資料量日益增加,碰撞率也會大大增加,每次碰撞都要額外增加1次redis與1次hbase查詢,導致性能越來越差,

分析原流程&歷史資料,尋找原流程優化點:

1、 從原流程可以看出,如果繼續采用隨機演算法,很難進行優化,因此,想到了可以采用自增演算法,因為自增不存在碰撞,就不需要進行雙向檢索存盤,能夠極大的降低外部請求數,

2、 分析歷史資料發現,很少存在長網址被大量重復生成的情況,也就是說,可以采用自增演算法的單向存盤(僅存盤短網址到長網址的映射),并不會增加存盤量,反而會比隨機演算法的雙向存盤(存盤短到長的映射,及長到短的映射,即雙倍存盤)節省存盤量,

3、 分析歷史資料發現,90%超過1個月的短網址都不再有訪問量了,同時調研業務也發現,43%用戶1個月有效期就夠了,46%用戶3個月,10%用戶1年,極少有用戶需要短網址永久有效,

4、 分析歷史資料發現,生成的資料量很大,日均1億+,且大多數短網址并不需要永久保存,需要做好清理規劃

5、 分析歷史資料發現,生成量遠大于跳轉量,跳轉服務流程簡單僅做查詢,優化空間不大,倒是對生成服務性能要求極高,優化重點在于生成服務,

優化后的短碼生成流程說明:

1、 系統直接采用自增演算法生成了一個短碼,因為自增演算法沒有了隨機碰撞,也就不需要再檢索短網址是否存在redis或hbase中,

2、 直接保存短網址到長網址的映射到redis中,因為沒有了檢索長網址是否存在于redis或hbase,也就不再需要保存長網址到短網址的映射,也就可以把hbase的寫入改成異步寫入,然后直接回傳短網址,流程結束,(可以看到系統僅剩下1次同步的redis操作,流程極大簡化,可以預見介面性能將得到極大提升)

自研專利演算法介紹

細心的同學可能會有疑問,上面的分布式自增演算法是怎么實作的呢?

目前市面上已知方案,1、通過資料庫自增(并發QPS數有限)2、通過redis自增(存在單key熱點問題,也就是所有的發號請求都會打到同一分片上),兩種方案均會增加性能損耗,且存在擴展瓶頸,無法滿足京東的海量業務請求,3、雪花演算法(長度太長不符合,短網址要求長度一般在7個字符)

因此設計了下面的專利自增演算法:(性能近乎于記憶體,損耗可忽略)

下面介紹一下核心的自增演算法原理:主要采用快取發號加記憶體自增方式,既無碰撞率又性能極高,主要體現在下圖的三條彩色通道上面,

1、綠色通道:記憶體發號,速度極快,每次從快取取出10000個無重復號碼,然后在記憶體中便可連續生成10000個短碼,因此速度比傳統基于資料庫及快取自增發號方式快萬倍,

2、藍色通道:快取取號,依賴快取保證分布式發號無碰撞,批量發號,每1萬次記憶體綠色通道才走一次藍色快取通道取號,因此性能極高

3、紅色通道:保障機制,保障生成的號碼都在短網址對應長度的號碼總容量范圍內,僅在初始化及總容量用盡時執行,性能損耗可忽略不計,

長度&有效期規劃:

? 有訪問會自動延期N天(7位短碼總容量3萬億,過期時間30天,每天有1000億短碼可用,30天內有1次訪問就會重置30天有效期,也就是說保持“熱資料”始終在redis中)

? 連續N天無訪問自動回收(7位短碼,連續30天沒有訪問的情況下,才會過期回收,也就是說“冷資料”無訪問N天后會自動過期清理回收)

以下統計了最近6天的各短碼長度的使用分布占比情況,目前使用最多的是7位與8位短碼,占比總和近90%,其中43%的用戶選擇了30天有效期,46%的用戶選擇來了100天有效期,

提效成果:

? 介面性能極大提升:tp999:從150+ms ->7ms,解決了業務呼叫緩慢及超時的痛點

? 單機承載量極大提升:單機QPS:從497->10184,提升了20倍+,無擴容支撐了日生成量:從1千萬->2億+

? 按百度短網址費用核算,1年可節約2700萬元(證明短網址產生價值很大

? redis快取30天熱資料,快取量 1.2TB

? Hbase存盤全量資料,存盤量 4TB

? 6月18日生成量4.7億、6月日均1億、峰值QPS 7.2萬

? 6月1日跳轉量1600萬、6月日均800萬

? 線上僅8臺4核docker(優化后日常節約了760核機器,618節約3572核)

? 有訪問自動延期,無訪問自動過期回收,避免了死碼長期占用資源消耗費用,避免短碼越積越多導致的資料量太大及性能下降,系統可長期穩定運行

創新性:

? 產出技術發明 專利1篇,編號:JDZL2019N5022

? 技術關鍵點是分布式 無碰撞 高效 短碼生成演算法:

? 該演算法利用redis的incrby實作分布式號段發放(5位短碼每次發放1000個號,當然6、7位短碼可設定更大步長值10000個),利用本機原子id自增減少redis請求(每10000個id自增后請求1次redis),因為id始終自增所以短碼無碰撞概率(id可以直接轉化為62進制短碼),避免了因短碼碰撞帶來的回圈生成檢索的性能開銷,利用redis.set原子檢測key不存在時才能設定成功實作分布式加鎖,解決多執行緒并發重置問題,最終實作比傳統自增方案快萬倍的高性能無碰撞短碼自增演算法,

? 利用容量規劃及過期時間機制(5位短碼總容量9億,有效期10天,每天有9千萬可用),實作號段回圈重復利用(10天后第1天的號段過期,可以再次使用)(當然如果是6位短碼、總容量有550億,有效期也可以更長,7位短碼總容量3萬億,基本可以不用過期了),保障了系統的長期穩定運行,

影響力:

? 宙斯平臺-京麥服務市場中上架,有**470+**京東商戶應用使用,3.cn/1-jMkHBf

? 3.cn作為京東唯一的短網址服務平臺,合作的應用50+(京東APP、京東金融、京東云、京東保險、七鮮、京東健康、京東物流等等)、小程式20+、合作的二級部門80+

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/552310.html

標籤:其他

上一篇:以資料思維和技能提升資料應用測驗實踐

下一篇:返回列表

標籤雲
其他(158923) Python(38129) JavaScript(25420) Java(18034) C(15226) 區塊鏈(8265) C#(7972) AI(7469) 爪哇(7425) MySQL(7179) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5339) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4572) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2433) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1972) 功能(1967) Web開發(1951) HtmlCss(1936) python-3.x(1918) C++(1915) 弹簧靴(1913) xml(1889) PostgreSQL(1875) .NETCore(1860) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 京東短網址高可用提升最佳實踐

    作者:京東零售 郝彥軍 什么是短網址? 短網址,是在長度上比較短的網址。簡單來說就是幫您把冗長的URL地址縮短成8個字符以內的短網址。 當我們在騰訊、新浪發微博時,有時發很長的網址連接,但由于微博只限制140個字,所以微博就自動把您發的長網址給轉換成短網址了。在微博和手機短信提醒等限制字數的地方來使 ......

    uj5u.com 2023-05-12 10:49:37 more
  • 以資料思維和技能提升資料應用測驗實踐

    作者:京東零售 周雪梅 以資料思維和技能提高測驗覆寫率和效率。資料應用測驗,功能測驗主要聚焦在資料流向(輸入和輸出)。 一、背景 資料質量組當前主要承接黃金眼和商智中的供應鏈模塊,商智包括PC(品牌版:商家端,運營端)和M端。各模塊的產品特征和測驗范圍和策略的通用模式如下圖所示,圖中灰色部分是待建設 ......

    uj5u.com 2023-05-12 10:48:23 more
  • 零基礎學會計三:資產【交易性金融資產】

    二、交易性金融資產 2.1、交易性金融資產的賬務處理 2.1.1、交易性金融資產取得時的賬務處理 借:交易性金融資產-XX-成本【公允價值】 應收股利/應收利息【取得時已宣告但尚未發放的現金股利或已到付息期但尚未領取的債券利息】 貸:其他貨幣資金-存出投資款【支付的價款】 借:投資收益【交易費用】 ......

    uj5u.com 2023-05-12 09:12:28 more
  • SemiEng20230413-What Designers Need To Know About GAA

    Nanowire與nanosheet爭議仍然存在,業界還沒確定誰更適合作下一代主流邏輯器件。 對任何新器件,第一代都是用來學習試驗的,后面再迭代升級。 FinFET不能繼續縮微的原因:fin之間要填柵和功函式堆疊層,fin之間15-20nm的距離是必要的。“So, you have this cli ......

    uj5u.com 2023-05-12 09:12:19 more
  • 如何設計介面測驗用例?(文末送介面測驗用例模板)

    介面測驗是專案測驗的一部分,正如其名,它測驗的主要物件是介面,是測驗系統組件間介面的一種測驗。介面測驗主要用于檢測外部系統與所測系統之間以及內部各系統之間的互動點。測驗的重點是檢查資料互動、傳遞、和控制管理程序以及系統間的相互依賴關系等。 ......

    uj5u.com 2023-05-12 09:12:10 more
  • Python復制檔案的9種方法

    以下是演示“如何在Python中復制檔案”的九種方法。 1.shutil copyfile()方法 2.shutil copy()方法 3.shutil copyfileobj()方法 4.shutil copy2()方法 5.os popen方法 6.os系統()方法 7.Thread()方法 8 ......

    uj5u.com 2023-05-12 09:06:37 more
  • OCR 文字檢測,可微的二值化(Differentiable Binarization --- DB)

    百度飛槳(PaddlePaddle) - PaddleOCR 文字識別簡單使用 影像二值化 影像二值化( Image Binarization),指將影像上的像素點灰度值設為0或255,將整個影像呈現出明顯的黑白效果程序,二值影像每個像素只有兩種取值:要么純黑,要么純白 影像二值化,有利于影像的進一 ......

    uj5u.com 2023-05-12 08:58:40 more
  • 零基礎學會計二:資產【應收、預付、應付、預收】

    一、應收、預付、應付、預收 >>應收、預付是資產,應付、預收是負債。 >>預付賬款和預收賬款賬戶,一用用到底。(借方代表資產,貸方代表負債) >>預付或預收業務不多的企業可以采用“收收核算”或“付付核算”,應保留原來的借貸方向。 1.1、壞賬準備的賬務處理 1>計提/補提壞賬準備 借:信用減值損失( ......

    uj5u.com 2023-05-12 08:52:36 more
  • 零基礎學會計一:會計概述

    一、 會計要素及其確認與計量 1.1、會計要素 資金運動(會計物件)->資產、負債、所有者權益、利潤、收入、費用(會計要素)->會計科目 1.2、會計恒等式 1>資產=負債+所有者權益 注:左邊代表資金占有,右邊代表資金來源。 2>利潤=收入-負債 注:利潤歸屬于所有者權益,所以有3)的代入式公式。 ......

    uj5u.com 2023-05-12 08:52:32 more
  • pxe基礎的批量化裝機

    PXE網路裝機 PXE 原理 開機自檢 》MBR引導 》grub2選單 》內核初始化 》init初始化 服務器的批量部署 1.規模化:同時裝配多臺服務器 2.自動化:安裝系統、配置各種服務 3.遠程實作:不需要光碟、U盤等安裝介質 4.對于無盤作業站,服務器端需要提供可運行的完整系統鏡像;對于遠程安 ......

    uj5u.com 2023-05-12 08:52:24 more