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