作者:黃鵬程(馬格)
一、Tair背景介紹
(一)什么是阿里云Tair云原生內(nèi)存數(shù)據(jù)庫
阿里云Tair云原生內(nèi)存數(shù)據(jù)庫線上名字為阿里云數(shù)據(jù)庫redis企業(yè)版(又稱阿里云Tair),從2009年開始正式承載集團(tuán)業(yè)務(wù),是一款歷經(jīng)磨練的企業(yè)級產(chǎn)品。它完全兼容Redis的數(shù)據(jù)結(jié)構(gòu)和通訊協(xié)議,包括API接口,并且在內(nèi)部逐步打磨的過程中,基于Tair研發(fā)云上托管云內(nèi)存數(shù)據(jù)庫。
如上圖所示,Tair產(chǎn)品分為三個類型,從性能到性價比有不同的產(chǎn)品排布,下面用1.0X表示開源的Redis的性能與價格,從性能和價格上與三個類型的Tair產(chǎn)品進(jìn)行對比。
- Tair性能增強(qiáng)型性能約為開源Redis的兩倍,支持多種常見數(shù)據(jù)結(jié)構(gòu),在天貓/淘寶/高德/優(yōu)酷中大規(guī)模使用,并擁有任意時間點恢復(fù)/全球分布式/熱點散列等特性。
- Tair持久內(nèi)存型基于Intel傲騰持久內(nèi)存做的數(shù)據(jù)庫,后文會重點闡述其特點。
- Tair容量存儲型直接對標(biāo)社區(qū)Pika等開源存儲型Redis產(chǎn)品。然后因為我們會用阿里云的高效的高效云盤,所以說整個的功能和性能都會比Pika強(qiáng)很多。
如上圖所示,從內(nèi)存存儲方面,Tair三個類型的產(chǎn)品適應(yīng)不同的場景。
- Tair性能增強(qiáng)型
1)數(shù)據(jù)讀寫頻繁,要求低延遲,支持大連接;
2)成本相對不敏感,以滿足業(yè)務(wù)性能需求為主。
- Tair持久內(nèi)存型
1)數(shù)據(jù)讀寫較頻繁,延遲要求可稍微放寬,存儲數(shù)據(jù)量有一定較大容量要求;
2)成本控制較之熱數(shù)據(jù)要求更高。
- Tair容量存儲型
1)數(shù)據(jù)讀寫密集程度低,延遲要求不高,整體存儲容量要求高;
2)成本是最大考量因素。
(二)阿里云Tair面向業(yè)務(wù)的數(shù)據(jù)結(jié)構(gòu)讓業(yè)務(wù)創(chuàng)新更容易
在業(yè)務(wù)方面,阿里云Tair與基于傳統(tǒng)Redis存在許多不一樣的地方,阿里云Tair業(yè)務(wù)結(jié)構(gòu)如下所示。
除此之外,阿里云Tair有以下優(yōu)點:
1)高性能
性能增強(qiáng)型,流量上漲淡然處之,性能是開源Redis的2倍。
2)持久化
持久內(nèi)存型,數(shù)據(jù)可靠,方便業(yè)務(wù)使用,不再擔(dān)心數(shù)據(jù)丟失。(RPO=0)
3)低成本
多種存儲介質(zhì),選擇最優(yōu)性價比,性價比高于ECS自建。
4)豐富數(shù)據(jù)模型
在社區(qū)Redis上提供了更多面向應(yīng)用的數(shù)據(jù)結(jié)構(gòu),應(yīng)用開發(fā)更簡便。
5)企業(yè)級能力
全球多活,數(shù)據(jù)閃回,混合多云(熱點散列)。
(三)阿里云Tair歷史
上圖為Tair的發(fā)展歷史。從Tair1.0開始,團(tuán)隊就孵化出了云Redis社區(qū)版和云Memcache,這是線上社區(qū)托管的兩個版本。
在Tair1.0的時候,就會整個孵化出來,2.0逐步上云,3.0會孵化出來一款叫GDB的產(chǎn)品,是一款線上的圖數(shù)據(jù)庫。
再往下是Tair(Redis企業(yè)版/Tair 3.0),集團(tuán)和云上是同一個版本,有很多種形態(tài)來支持用戶在各種業(yè)務(wù)場景下的需求。
二、Tair功能介紹
(一)做一個不丟數(shù)據(jù)的內(nèi)存數(shù)據(jù)庫—Tair持久內(nèi)存型
我們希望做一個不丟數(shù)據(jù)的數(shù)據(jù)庫,做法是通過新硬件和新軟件來進(jìn)行。
1.新硬件
- 引入英特爾® 傲騰™ 數(shù)據(jù)中心級持久內(nèi)存;
- 與DRAM內(nèi)存相近的性能表現(xiàn),而且其大容量和非易失性的特性還可幫助系統(tǒng)獲得更優(yōu)的可用性;
- 它相比于DRAM內(nèi)存的成本和容量優(yōu)勢,也可幫助客戶有效地降低總擁有成本。
上圖為存儲介質(zhì)圖,速度延遲從上到下逐步增大,相反,容量逐步減少,成本逐步降低。Storage Class Memory處于中間,性價比較高。
2.新軟件
- 模式選擇
新軟件的開發(fā)模式方案有兩種,分別是內(nèi)存模式(Memory Mode)與應(yīng)用程序直接訪問模式(App Direct Mode)。
在內(nèi)存模式下,應(yīng)用和OS將其視為易失性內(nèi)存池,雖對應(yīng)用透明,但掉電即失,因此不采用。
在應(yīng)用程序直接訪問模式下,持久內(nèi)存和 DRAM充當(dāng)獨立內(nèi)存資源,通過構(gòu)建符合Redis協(xié)議和數(shù)據(jù)結(jié)構(gòu)的軟件利用兩塊存儲資源構(gòu)建兼容Redis、具備命令級持久化能力的內(nèi)存數(shù)據(jù)庫。
- 全新的挑戰(zhàn)
我們選擇重新寫兼容Redis的東西,而不是在Redis基礎(chǔ)上進(jìn)行更改,是因為新軟件有著全新的挑戰(zhàn):
1)替代原有的內(nèi)存分配器,同時要保證內(nèi)存分配器元數(shù)據(jù)的持久化;
2)Redis數(shù)據(jù)結(jié)構(gòu)與索引的持久化要保持一致性;
3)持久內(nèi)存和易失內(nèi)存如何協(xié)同工作,讓整個數(shù)據(jù)庫高性能工作,同時還具備強(qiáng)大的持久化能力。
3.產(chǎn)品化能力
上文結(jié)合軟硬件的能力闡述了如何去構(gòu)建持久化內(nèi)存的形態(tài),下面可以看一下所帶來的成果。
- 消除aofrewrite與fsync的無Fork設(shè)計,服務(wù)更順滑,P95延時較之內(nèi)存版Redis更低更穩(wěn)定;
- 讀寫性能吞吐為內(nèi)存版Redis的90%以上。
- 原生命令級持久化能力,操作寫入即持久化;
- 緩存主存合一成為可能,成本更低,架構(gòu)更優(yōu)雅。
4.應(yīng)用場景
應(yīng)用場景主要分為如下兩種。
場景一:大數(shù)據(jù)量、高性能、成本的綜合選型考慮
- 機(jī)器學(xué)習(xí)平臺、推薦系統(tǒng)等計算數(shù)據(jù)對性能和容量的要求很高;
- 全內(nèi)存又使得成本壓力巨大;
- 可采用Tair持久內(nèi)存型以有效降低成本,并能夠保持高性能運行;
- 同時用戶也無需為降本而綜合使用其他數(shù)據(jù)存儲,有效地平衡了系統(tǒng)復(fù)雜度與成本。
場景二:用作持久化數(shù)據(jù)存儲
- 游戲、直播、數(shù)據(jù)分析中大數(shù)據(jù)結(jié)果集對外提供查詢服務(wù)等場景可以使用;
- 可采用Tair持久內(nèi)存型作為數(shù)據(jù)最終的存儲;
- 對比緩存+主存的兩層架構(gòu),數(shù)據(jù)同樣可靠;
- 性價比更高,代碼更簡化,架構(gòu)更優(yōu)雅。
(二)做一個具備時光機(jī)能力的數(shù)據(jù)庫--數(shù)據(jù)閃回
我們希望這個內(nèi)存數(shù)據(jù)庫具備有時光機(jī)能力。時光機(jī)能力表示可以將數(shù)據(jù)恢復(fù)到過去指定的任何時間點,也稱為數(shù)據(jù)閃回,它有如下兩大特點:
- 七天內(nèi)任意時間點的數(shù)據(jù)恢復(fù)
1)Backup/Restore的終極形態(tài)
2)支持按秒級的數(shù)據(jù)恢復(fù)(可支持到按條)
3)防止刪庫跑路場景
4)Clone & Switching:隨時回切
- 根據(jù)按照指定Key或者Key Glob Pattern進(jìn)行原地數(shù)據(jù)部分恢復(fù)
1)靈活應(yīng)對部分?jǐn)?shù)據(jù)異常
2)其余未指定數(shù)據(jù)不變化
3)游戲數(shù)據(jù)回檔實現(xiàn)
(三)做一個全球多地寫入的數(shù)據(jù)庫--全球多活
1.基本概念
我們希望數(shù)據(jù)庫能夠多地寫入,把多地的內(nèi)存數(shù)據(jù)庫進(jìn)行多活操作,用戶可以在多地訪問與寫入,我們幫用戶做數(shù)據(jù)按序同步。
2. 三地六向同步
- 全區(qū)全服同時在線,解決漫游(roaming)和DNS漂移問題。
- 數(shù)據(jù)本地訪問(locally data access)的流暢性。
- 單元化:獨立部署,區(qū)域容災(zāi),按需調(diào)度。
- 數(shù)據(jù)的高可靠和性能提升。
3. 低時延SLA保障
- 推送模式(Push),Latency= T1 (binlog落盤時延)+ T2 (Replicator發(fā)現(xiàn)時延) + T3 (Apply時延)
1)整體看,T1 + T2 穩(wěn)定在10ms,最差100ms;T3基本上時延是網(wǎng)絡(luò)RTT。
2)忙時下不敏感,replicator具備獨立的資源,點到點同步通道帶寬穩(wěn)定。
- 適合寫入量大,對平均時延要求高的客戶。
- 目前全球分布式緩存只能做3地6向。
- 適合跨域多活及單元化業(yè)務(wù)(阿里內(nèi)部經(jīng)驗)。
- Tair全球同步時延測試白皮書:https://help.aliyun.com/document_detail/199010.html
4. Session場景
Session的容災(zāi)至關(guān)重要
- 隨著業(yè)務(wù)擴(kuò)展,session訪問壓力幾何級數(shù)增長。
- 對抖動敏感,遠(yuǎn)距離訪問體驗差。
- 單元化部署,全球化部署。
- 除去容災(zāi)(跨域備份),還要能就近讀寫(跨域雙活,多活)。
5. 游戲場景
架構(gòu)特點:玩家可就近接入,本身邏輯就近計算數(shù)據(jù)讀取,基本不存在數(shù)據(jù)一致性問題,靈活調(diào)整分布式節(jié)點。
可以靈活跨地域部署,數(shù)據(jù)通過Tair同步延遲根據(jù)網(wǎng)絡(luò)速度決定通常在100ms以下。
場景:聊天室,彈幕信息同步;跨服對戰(zhàn);全球道具商城。
6.出行場景
Tair也在高德地圖中深度使用,并解決了出行場景的一些問題。
使用前:導(dǎo)航時地理位置信息推送問題
- DNS漂移是一個邊界效應(yīng),通常大概影響邊界上5%-7%的用戶。
- 在導(dǎo)航中跨越邊界時,會大量出現(xiàn)交叉訪問不同數(shù)據(jù)區(qū)的場景;業(yè)務(wù)邏輯復(fù)雜,可靠性低,用戶體驗差。
使用后:高德交通三地六向同步(Tair only)
- Redis-enterprise跨域多活提供百萬OPS每秒的數(shù)據(jù)同步。
- 交通在三地都可高速寫入/訪問;極高性能的優(yōu)勢提供流暢的用戶體驗。
- 用戶可以靈活的在SDK層控制讀寫,比例等。
(四)做一個有計算的內(nèi)存數(shù)據(jù)庫
1. TairCPC高精度計數(shù)
TairCPC是一種數(shù)據(jù)的壓縮算法(sketches)的內(nèi)存實現(xiàn),可以利用很小的空間對采樣數(shù)據(jù)做高性能的計算,適合在實時和流式計算場景下做高性能的風(fēng)控和安全場景。
- 主要特性
1)內(nèi)存占用低
2)增量讀寫,IO最小化
3)毫秒級高性能去重
4)超高去重精度
5)誤差率穩(wěn)定收斂
- 適用場景
1)想以較低的內(nèi)存實現(xiàn)對海量數(shù)據(jù)的去重計算;
2)容忍一定的四舍五入的誤差率;
3)適用于實時計算的滾窗和滑窗去重。
2. TairTS時序數(shù)據(jù)處理
TairTS是基于Redis Module開發(fā)的時序數(shù)據(jù)結(jié)構(gòu),提供低時延高并發(fā)的內(nèi)存讀寫訪問,以及快速的過濾聚合查詢功能。將存儲與計算集于一身,極大地簡化用戶處理時序數(shù)據(jù)的流程,結(jié)合Tair持久內(nèi)存型單集群最大規(guī)模可達(dá)65T。
- 主要特性
1)TairTS相對于TSDB類傳統(tǒng)時序數(shù)據(jù)庫,可提供更快的寫入性能,并提供數(shù)10倍的查詢性能。
2)針對小規(guī)模數(shù)據(jù)場景,TairTS可將批量查詢與聚合計算集成到單條命令中,減少網(wǎng)絡(luò)交互,實現(xiàn)毫秒級響應(yīng)。
3)針對大規(guī)模數(shù)據(jù)場景,可利用索引命令,將大規(guī)模數(shù)據(jù),分批查詢與聚合,實現(xiàn)秒級響應(yīng)。
- 適用場景
1)監(jiān)控數(shù)據(jù)的存儲與計算
2)車聯(lián)網(wǎng)、工業(yè)互聯(lián)網(wǎng)實時IOT數(shù)據(jù)處理
3)APM秒級監(jiān)控等
三、面向未來
最后談一下未來面對的事情,關(guān)注云產(chǎn)品的人可能都知道存儲計算分離,我們希望在這基礎(chǔ)上能再進(jìn)行一層分離。將內(nèi)存也分離出來,做一個大的內(nèi)存存儲池。希望我們的再分離一層,就是把內(nèi)存也分離出來,因為現(xiàn)在可能是一個大的存儲池,為用戶提供更加彈性的服務(wù)。