為余勢負天工背,云原生內(nèi)存數(shù)據(jù)庫Tair助力用戶體驗優(yōu)化
作為雙11大促承載流量洪峰的利器,Tair支撐了電商交易核心體驗場景。不僅在數(shù)十億QPS的峰值下保持著亞毫秒級別的順滑延遲,同時在電商交易核心體驗場景上也做出了技術創(chuàng)新。
一、前言
2021年雙十一,是天貓的第十三次雙十一,也是 Tair 的第十三次雙十一。每個參與備戰(zhàn)的 Tair 同學各有不同,有的同學是第一次,感受到了技術大團建的獨特氛圍;有的同學稍多點,集齊了七件戰(zhàn)袍來召喚神龍。今年是我經(jīng)歷過的最緊張的一次:備戰(zhàn)過程跌宕起伏,今年上線的新產(chǎn)品壓測過程不太順利;同時也是經(jīng)歷過的最暖的一次:在業(yè)務伙伴們鼎力支持下,團隊兄弟們并肩作戰(zhàn),最終做到了“順滑如絲安穩(wěn)如磐”。
二、背景
Tair 從2009年4月誕生開始,經(jīng)歷了多次迭代,為豐富的業(yè)務場景支持了不同的引擎。其中 MDB / LDB 是發(fā)展時間最長的子產(chǎn)品,也依然是今天雙十一的絕對主力,順滑地承擔了雙十一流量洪峰,壓測階段也表現(xiàn)良好。這背后是成熟的內(nèi)核能力對場景的全面覆蓋,以及不斷迭代的產(chǎn)品能力對維護效率的提升。當然,擁有 10K+ 實例的數(shù)據(jù)庫產(chǎn)品是離不開系統(tǒng) Owner 們精進的專業(yè)能力、對產(chǎn)品運行的關注、對需求的快速響應。
除了產(chǎn)品自身的穩(wěn)定,Tair MDB / LDB 還是 Tair產(chǎn)品線其它所有產(chǎn)品發(fā)展的基石,比如Tair MDB With PMem,作為Tair 在持久內(nèi)存上的第一個里程碑,后面迭代出了2020年云棲大會發(fā)布的 Tair 持久內(nèi)存型;在今年雙十一中,基于持久內(nèi)存架構的 TairSQL,擴寬了內(nèi)存數(shù)據(jù)庫Tair支持的計算場景。Tair 持久內(nèi)存型在今年雙十一的不同場景中發(fā)揮了重要作用,下面的章節(jié)詳細介紹。
三、Tair 持久內(nèi)存型
Tair 持久內(nèi)存型是在阿里云官網(wǎng)公開售賣的提供大容量、兼容 Redis 的內(nèi)存數(shù)據(jù)庫產(chǎn)品,同時也為阿里巴巴集團內(nèi)核心應用提供服務。單實例成本對比 Redis 社區(qū)版最高可降低30%,且數(shù)據(jù)持久化不依賴傳統(tǒng)磁盤,保證每個操作持久化的同時提供近乎 Redis 社區(qū)版的吞吐和延時,極大提升業(yè)務數(shù)據(jù)可靠性。
Tair 持久內(nèi)存型所用的存儲介質(zhì)英特爾? 傲騰? 持久內(nèi)存(Optane PMem)是兼具出色的內(nèi)存與存儲性能的解決方案,將高性價比的大容量內(nèi)存與對數(shù)據(jù)持久性的支持巧妙地結合在一起,可以將更多數(shù)據(jù)保存在更靠近CPU的地方,加速大內(nèi)存計算,加快數(shù)據(jù)庫重啟時間并減少I/O, 降低大內(nèi)存節(jié)點的功耗,并在斷電時保護數(shù)據(jù)。
英特爾?傲騰?持久內(nèi)存彌補了傳統(tǒng)SSD和DRAM之間的空白,以創(chuàng)新的技術提供獨特的操作模式,滿足針對各種工作負載的需求,特別是從云到數(shù)據(jù)庫,再到內(nèi)存分析,虛擬化基礎設施等數(shù)據(jù)密集型和計算密集型工作負載,助力從更大的數(shù)據(jù)集中獲取更深入的洞察。
2020年云棲大會發(fā)布之后,通過服務越來越多云上和集團內(nèi)的用戶場景,Tair 持久內(nèi)存型收集的用戶反饋對支持的場景范圍、訪問性能、性價比等方面都提出了更高的要求。基于這些需求,Tair 持久內(nèi)存型攻關了核心優(yōu)化技術,讓數(shù)據(jù)在 DRAM 、持久內(nèi)存之間動態(tài)自適應移動,確保用戶索引占用空間、數(shù)據(jù)區(qū)占用空間維持在固定比例范圍內(nèi),滿足了不同用戶場景下的數(shù)據(jù)存儲需求。
同時,Tair 持久內(nèi)存型與 Aliyun Linux 操作系統(tǒng)內(nèi)核技術深度結合,兼容了主備復制、實時備份等場景對于數(shù)據(jù)快照的需求,并大幅度降低了超大內(nèi)存占用空間下實時快照的延時影響。除了覆蓋更多支持場景和進行高頻場景的性能優(yōu)化,在提供更高性價比方面,Tair 持久內(nèi)存型精簡了自主研發(fā)的持久內(nèi)存存儲結構的元數(shù)據(jù)占用空間,并針對 List、Hash 等用戶高頻使用的數(shù)據(jù)結構進行精細化的透明壓縮,在維持數(shù)據(jù)持久化性能穩(wěn)定下,實現(xiàn)1-2倍的數(shù)據(jù)壓縮率,大幅降低了數(shù)據(jù)持久化版本的硬件成本。
Tair 持久內(nèi)存型除了在 Redis 通用場景上深耕細作持續(xù)優(yōu)化,也拓展對于成本,數(shù)據(jù)一致性,低延時和容量的綜合要求很高的諸如了在廣告領域和特征存儲場景上也大放異彩。同時2021年雙十一中,在兩個不同的用戶場景做出了創(chuàng)新,幫助應用在系統(tǒng)穩(wěn)定性、性價比、體驗等方面得到了顯著提升。首先介紹在風控場景中起到了重要作用的 TairCPC數(shù)據(jù)模型。
1.TairCPC
在2020年雙十一中首次登場的 TairCPC,今年被吸納進入Tair持久內(nèi)存型產(chǎn)品,在雙十一的風控場景起到了重要作用。
TairCPC 提供的聚合算子 Sketches 化能力,以 Module 的形式下沉到存儲引擎內(nèi)部,可以利用很小的空間對采樣數(shù)據(jù)做高性能的計算,用戶增量寫入后直接返回實時計算結果。使用 TairCPC 的風控業(yè)務,作為集團交易鏈路核心模塊,直接影響線上整個交易的安全性,該產(chǎn)品最核心的實時計算鏈路進行實時風控的場景使用了 TairCPC。
今年雙十一這個場景在 Tair 持久內(nèi)存型的助力下,節(jié)省了約1/3的存儲空間,加上持久內(nèi)存的成本優(yōu)勢,讓用戶成本大大降低。針對 TairCPC,Tair 持久內(nèi)存型進行了大量的性能優(yōu)化,使得眾多場景下性能與內(nèi)存相當,在慢查的性能上提升了一個數(shù)量級,有效的提升了系統(tǒng)穩(wěn)定性。在幾乎不影響性能的情況下,實現(xiàn)了數(shù)據(jù)的完全持久化(RPO=0)。
2.TairSQL
2021雙十一 Tair 在核心檢驗場景做出的技術創(chuàng)新,來源于一款內(nèi)部代號為 TairSQL 的子系統(tǒng)。雙11高峰期,用戶下單自動領券,以及交易成功后資產(chǎn)的核銷都會為數(shù)據(jù)庫系統(tǒng)帶來相應的寫入流量,毫秒級別的寫入延時必須維持在較低水平才能保證用戶在商品搜索、詳情展示等導購場景感受到到手價格的一致性變化。
價格一致性場景對于數(shù)據(jù)庫產(chǎn)品的技術挑戰(zhàn)簡單來講就是:讀寫負載高,延時要求苛刻。為了應對這個場景的技術挑戰(zhàn),下面的章節(jié)簡單介紹下 TairSQL 使用的內(nèi)核技術。
TairSQL內(nèi)核技術
針對雙十一的業(yè)務特征,TairSQL 做了持久內(nèi)存數(shù)據(jù)存儲改造、客戶端連接開銷降低、集群初始化加速、內(nèi)存使用優(yōu)化等和性價比、穩(wěn)定性相關的工作,但是服務于高吞吐低延遲的場景,主要得益于持久內(nèi)存存儲、高效事務處理模型、輕量級用戶接口訪問等幾個核心特性:
- 持久內(nèi)存數(shù)據(jù)存儲,使用持久內(nèi)存作為數(shù)據(jù)最終存儲介質(zhì),降低了訪問鏈路上的 IO 延遲,無需再進行傳統(tǒng)數(shù)據(jù)庫產(chǎn)品耗時的緩存、磁盤上的數(shù)據(jù)頻繁淘汰交換,而且針對索引數(shù)據(jù)、用戶區(qū)數(shù)據(jù)的訪問頻率進行了合理的數(shù)據(jù)分布,讓高頻的索引查詢更新在 DRAM 中完成。
- 事務處理模型,水平擴展的集群中,每個節(jié)點服務數(shù)十個分區(qū),每個分區(qū)使用單獨線程響應的事務處理模型避免了鎖競爭的開銷,提供了更為平滑的 P99 訪問延時。
- 輕量級用戶接口,輕量級的用戶接口訪問技術降低了用戶每次請求的SQL解析編譯開銷,結合事務處理模型讓用戶的讀寫請求都能夠在數(shù)百us內(nèi)處理完成并返回。
合格的內(nèi)核技術只是滿足了產(chǎn)品的 physiological needs,產(chǎn)品的 safety needs 需要提供相應的穩(wěn)定性技術來滿足。
TairSQL穩(wěn)定性技術
穩(wěn)定性技術涉及到產(chǎn)品的方方面面,不僅包括開發(fā)中針對穩(wěn)定性的特性,還包括能夠反映系統(tǒng)運行狀態(tài)的周邊組件。下面章節(jié)主要介紹監(jiān)控、客戶端、服務端流控三部分穩(wěn)定性技術。
監(jiān)控。眾所周知,監(jiān)控就是系統(tǒng)的眼睛,沒有監(jiān)控,也不太容易看到產(chǎn)品運行的細節(jié)問題。TairSQL 目前主要有兩套監(jiān)控,一套是用來監(jiān)控集群可用性相關的指標,另外一套是 Grafana+Prometheus+TairSQL Exporter 的鏈路來提供秒級的 RT、QPS 數(shù)據(jù)展示。監(jiān)控的完善程度直接決定是否能夠發(fā)現(xiàn)系統(tǒng)上的一些細節(jié)性問題,比如 TairSQL 的秒級監(jiān)控可以明確展示每個數(shù)據(jù)節(jié)點的 QPS,在熱點訪問沒有觸發(fā)流控就能被發(fā)現(xiàn),從最終數(shù)據(jù)訪問源數(shù)據(jù)庫的視角熱點無處遁形。
客戶端。TairSQL 使用富客戶端的方式,請求可以直接路由到需要訪問到的節(jié)點上。客戶端的資源消耗控制、和服務端的交互開銷、建連斷連在 10K+ 應用節(jié)點時對服務端的沖擊、服務端拓撲變化時對客戶端的及時反饋,這些都是客戶端 SDK 上所做的實現(xiàn)考量和優(yōu)化點。同時客戶端和集團內(nèi)生態(tài) VipServer、鷹眼等產(chǎn)品進行了適配,屏蔽后端節(jié)點變化對應用的影響,支持影子表鏈路的訪問和全鏈路訪問的定位。
服務端流控。流控/背壓是一個成熟的服務端產(chǎn)品必備的功能,TairSQL 目前線上的服務端流控統(tǒng)計部分根據(jù)工作隊列占用的內(nèi)存大小和長度兩個緯度進行限制,根據(jù)極限壓測時的狀態(tài)作為默認值的參考,流控的觸發(fā)階段是相對寬松的,只有異常情況才會觸發(fā)。恢復階段是較為嚴格的,只有以較高的確信值認定節(jié)點已經(jīng)恢復到正常情況之后,才會解除流控狀態(tài)。
四、兄弟系統(tǒng)
云原生內(nèi)存數(shù)據(jù)庫 Tair 所做的創(chuàng)新離不開阿里云完善的基礎設施的支持:
數(shù)據(jù)庫管控平臺 DBaaS,快速實現(xiàn)阿里云數(shù)據(jù)庫提供的安全審計、高可用、彈性伸縮、智能診斷等通用能力,以及 Tair 提供的數(shù)據(jù)閃回、全球分布等企業(yè)級能力。針對Tair持久內(nèi)存型,DBaaS 結合阿里云容器服務 ACK,支持了持久內(nèi)存資源和計算資源的親和性調(diào)度以降低持久內(nèi)存訪問延遲,提供持久內(nèi)存的 QoS 策略支持,保障服務的安全可控和產(chǎn)品的一致性體驗。
神龍裸金屬服務器,提供的持久內(nèi)存系列產(chǎn)品,為云原生內(nèi)存數(shù)據(jù)庫Tair提供了彈性服務的基礎,針對突發(fā)流量進行針對性優(yōu)化的網(wǎng)絡技術讓Tair應對高吞吐場景游刃有余,對內(nèi)存等硬件風險的智能預測讓 Tair 可以提前預見大促高峰期的風險級別進行規(guī)避。
Aliyun Linux,不僅對持久內(nèi)存硬件進行了適配,還針對Tair獨有的持久內(nèi)存數(shù)據(jù)快照支持、實時快照延時降低等業(yè)務場景提供了針對性的優(yōu)化。
五、總結
Tair 持久內(nèi)存版在2021天貓全球購物節(jié)中的表現(xiàn)是云原生內(nèi)存數(shù)據(jù)庫 Tair在產(chǎn)品演進跟線上的重要里程碑。Tair 將持續(xù)以內(nèi)存/持久內(nèi)存 為核心存儲,重點建設云原生、混合存儲介質(zhì)上的數(shù)據(jù)智能分布、在線存儲和實時計算處理一體化等核心能力,加強云原生內(nèi)存數(shù)據(jù)庫的產(chǎn)品能力,在同一套系統(tǒng)中提供多種工作負載,幫助客戶的眾多場景真正在線化。