深度解析雙十一背后的阿里云Redis服務(wù)
Redis是一個使用范圍很廣的NOSQL數(shù)據(jù)庫,阿里云Redis同時在公有云和阿里集團(tuán)內(nèi)部進(jìn)行服務(wù),本文介紹了阿里云Redis雙11的一些業(yè)務(wù)場景:微淘社區(qū)之億級關(guān)系鏈存儲、天貓直播之評論商品游標(biāo)分頁和菜鳥單據(jù)履行中心之訂單排序。
在一片歡呼之中,2018年的雙十一***收官,各項數(shù)據(jù)不出意外的刷出了新的記錄,亮眼的數(shù)據(jù)背后是阿里過硬的技術(shù)支撐。其中阿里云Redis不僅保障了阿里集團(tuán)內(nèi)部業(yè)務(wù)雙十一的流量洪峰平穩(wěn)度過,也讓使用阿里云Redis的各個客戶度過了一個安穩(wěn)省心的雙十一。
目前阿里云Redis涵蓋了豐富的產(chǎn)品形態(tài):主從、集群、讀寫分離、同城容災(zāi)、異地多活,可以選擇單副本,雙副本,還有混合存儲類型。
主從規(guī)格的Redis具有100%的兼容性;
讀寫分離增加只讀節(jié)點承擔(dān)讀流量,成本***;
集群規(guī)格大容量、高性能,突破單機(jī)性能極限,兼容redis cluster, sentinel等多種架構(gòu),上云無憂;
同城容災(zāi)雙機(jī)房部署,整機(jī)房故障切換到正常機(jī)房;
異地多活讓業(yè)務(wù)全球部署,就近寫入,自動全球?qū)崟r同步。
此外,阿里云Redis還擁有熱備份、賬號、安全等功能,滿足業(yè)務(wù)的各項安全上的需求。本文將簡單介紹下2018年雙十一的部分業(yè)務(wù)場景。
直播
直播在雙十一期間也迎來流量高峰,觀看直播的用戶每發(fā)一條評論背后就會使用阿里云的Redis的服務(wù)。直播平臺會對每條評論寫入兩條數(shù)據(jù):索引和用戶評論,索引使用Redis的SortedSet數(shù)據(jù)結(jié)構(gòu)對評論進(jìn)行排序,而評論內(nèi)容本身使用Hash存儲。獲取評論的時候,先讀索引,再訪問對應(yīng)Hash拿到評論列表。評論的寫入過程如下:
現(xiàn)在的直播必不可少的就是彈幕,和評論一樣,異常直播彈幕的寫入QPS可能非常高,并且用戶遍布全國各地甚至是分布在全球的華人,一條在美國發(fā)出的彈幕跨洋寫進(jìn)部署在國內(nèi),時延是不可接受的,物理距離的限制就算是低延遲的Redis也無能為力,各個地域單獨部署一套存儲又會造成不同地域的用戶彈幕無法相互看到。阿里云Redis多活產(chǎn)品是為這種場景而生,每個地域部署一套Redis,用戶就近寫入,后端自動實時同步,跨洋的小伙伴感覺不再遙遠(yuǎn)。
菜鳥訂單履行
雙11用戶在產(chǎn)生一個交易訂單之后會隨之產(chǎn)生一個物流訂單。經(jīng)過菜鳥倉配系統(tǒng)處理的訂單,為了讓倉配各個階段能夠更加智能的協(xié)同作業(yè),決策系統(tǒng)會根據(jù)訂單信息指定出對應(yīng)的訂單履行計劃,包括什么時候下發(fā)倉、什么時候出庫、什么時候配送攬收、什么 時候送達(dá)等信息,單據(jù)履行中心根據(jù)履行計劃,對每個階段按照對應(yīng)的時間去履行物流服務(wù)。由于倉、配的運力有限,對于有限的運力下,期望最早作業(yè)的單據(jù)是業(yè)務(wù)認(rèn)為優(yōu)先級***的單據(jù),所以訂單在真正下發(fā)給倉或者配之前,需要按照優(yōu)先級進(jìn)行排序。
訂單履行中心通過使用Redis來對所有的物流訂單進(jìn)行排序決定哪個訂單是***優(yōu)先級的。
微淘社區(qū)用戶關(guān)系鏈
微淘社區(qū)承載了億級淘寶用戶的社交關(guān)系鏈,對于每個用戶都有自己的關(guān)注列表,每個商家有自己的粉絲信息,整個微淘社區(qū)承載的關(guān)系鏈如下圖所示。
Redis豐富的數(shù)據(jù)類型讓這種關(guān)系鏈的存儲變得簡單,高性能保證了雙十一期間業(yè)務(wù)仍如絲般順滑。比如微淘社區(qū)使用了Hash存儲用戶之間的關(guān)注信息,包括:1)用戶A是否關(guān)注過用戶B;2)用戶A/B的關(guān)系列表。
雙十一大屏
雙十一期間不光有出鏡率***的媒體中心數(shù)據(jù)大屏,還有很多技術(shù)和業(yè)務(wù)模塊的監(jiān)控數(shù)據(jù)大屏。這類大屏不僅要求數(shù)據(jù)實時性高,對可靠性要求也非常高,一旦出現(xiàn)異常,通過大屏可以快速展示出來。
數(shù)據(jù)緩存
大屏匯聚了所有業(yè)務(wù)或者技術(shù)模塊的監(jiān)控信息,具有來源廣、數(shù)據(jù)量大、實時性高的特點,Redis的高性能低延遲滿足需求。大量數(shù)據(jù)通過pipeline批量更新,存入數(shù)據(jù)庫時使用update case when語句進(jìn)行一次批量更新,效率非常高,大大緩解了數(shù)據(jù)庫的壓力。
競爭鎖
大屏的高可用要求非常高,任何故障下大屏必須可以正常展示。整個大屏背后需要雙機(jī)房甚至更多機(jī)房的部署,多個任務(wù)同時進(jìn)行,基于Redis實現(xiàn)的競爭鎖來保證一個任務(wù)實際執(zhí)行。
機(jī)房搬遷
雙十一之前阿里集團(tuán)上海機(jī)房業(yè)務(wù)整體搬遷到張北機(jī)房,涉及數(shù)百Redis實例,同時遷移還需要滿足幾個要求:
同時要求Redis服務(wù)的搬遷對業(yè)務(wù)透明,不影響業(yè)務(wù)的正常服務(wù);
必須保證數(shù)據(jù)的一致性,不丟不重;
數(shù)據(jù)同步必須具備斷點續(xù)傳功能;
具備回滾方案,一旦業(yè)務(wù)切換出現(xiàn)問題,可以隨時切換回來。
阿里云Redis多活不僅完全滿足了業(yè)務(wù)所提出的需求,還已經(jīng)產(chǎn)品化和自動化,整個遷移過程用戶只需要在控制臺上點下鼠標(biāo)即可完成,實例狀態(tài),后端的數(shù)據(jù)同步狀態(tài)實時顯示在控制臺上。
結(jié)束
Redis是一個優(yōu)秀的開源數(shù)據(jù)庫,提供了開發(fā)者更便利的數(shù)據(jù)模型,阿里云Redis致力于提供穩(wěn)定、高性能的Redis服務(wù),歡迎廣大開發(fā)者使用阿里云Redis服務(wù)。