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