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