Tendis分布式高性能 KV 存儲數(shù)據(jù)庫
Tendis 是騰訊互娛 CROS DBA 團(tuán)隊 & 騰訊云數(shù)據(jù)庫團(tuán)隊自主設(shè)計和研發(fā)的分布式高性能 KV 存儲數(shù)據(jù)庫,兼容 Redis 核心數(shù)據(jù)結(jié)構(gòu)與接口,可提供大容量、低成本、強(qiáng)持久化的數(shù)據(jù)庫能力,適用于兼容 Redis 協(xié)議、需要大容量且較高訪問性能的溫冷數(shù)據(jù)存儲場景。Tendis 目前已經(jīng)被應(yīng)用到騰訊內(nèi)、外部大型項目中。
集群架構(gòu)
Tendis 使用去中心化集群架構(gòu),每個數(shù)據(jù)節(jié)點(diǎn)都擁有全部的路由信息,用戶可以訪問集群中的任意節(jié)點(diǎn),并且通過 redis 的 move協(xié)議,最終路由到正確的節(jié)點(diǎn)。
每個 Tendis 節(jié)點(diǎn)維護(hù)各自的 slot 數(shù)據(jù),任意兩個 master 節(jié)點(diǎn)之間的 slot 不重復(fù),master 節(jié)點(diǎn)之間支持基于 slot 的數(shù)據(jù)搬遷,主備節(jié)點(diǎn)之間通過 binlog 實(shí)現(xiàn)數(shù)據(jù)復(fù)制。
所有節(jié)點(diǎn)之間通過gossip協(xié)議進(jìn)行通訊,類似于redis cluster的分布式實(shí)現(xiàn),所有節(jié)點(diǎn)通過gossip協(xié)議通訊,可指定hashtag來控制數(shù)據(jù)分布和訪問,使用和運(yùn)維成本極低。
適用場景
-
兼容Redis協(xié)議,需要大容量且較高訪問性能的溫冷數(shù)據(jù)存儲場景
-
適合成本為主要考慮因素,業(yè)務(wù)數(shù)據(jù)有高持久化要求的業(yè)務(wù)場景
-
解決原生Redis固有的fork問題而預(yù)留部分內(nèi)存問題
主要特性
- 兼容Redis協(xié)議。完全兼容redis協(xié)議,支持redis主要數(shù)據(jù)結(jié)構(gòu)和接口,兼容大部分原生Redis命令。
- 持久化存儲。使用rocksdb作為存儲引擎,所有數(shù)據(jù)以特定格式存儲在rocksdb中,最大支持PB級存儲。
- 去中心化架構(gòu)。類似于redis cluster的分布式實(shí)現(xiàn),所有節(jié)點(diǎn)通過gossip協(xié)議通訊,可指定hashtag來控制數(shù)據(jù)分布和訪問,使用和運(yùn)維成本極低。
- 水平擴(kuò)展。集群支持增刪節(jié)點(diǎn),并且數(shù)據(jù)可以按照slot在任意兩節(jié)點(diǎn)之間遷移,擴(kuò)容和縮容過程中對應(yīng)用運(yùn)維人員透明,支持?jǐn)U展至1000個節(jié)點(diǎn)。
- 故障自動切換。自動檢測故障節(jié)點(diǎn),當(dāng)故障發(fā)生后,slave會自動提升為master繼續(xù)對外提供服務(wù)。
- Tendis冷熱混合存儲關(guān)鍵組件。得益于Tendis存版的設(shè)計和內(nèi)部優(yōu)化,Redis和Tendis存儲版可以一起工作成為Tendis冷熱混合存儲?;旌洗鎯^(qū)非常適用于KV存儲場景,并平衡了性能和成本。對于redis占用大量存儲空間的冷數(shù)據(jù)降冷后可以最多減少80%的成本,同時保證了熱數(shù)據(jù)在redis的訪問性能。
項目規(guī)劃
-
持續(xù)完善對Redis的兼容性,包括支持LUA等命令
-
進(jìn)一步提升Tendis的性能,減少rocksdb本身的性能抖動問題。
-
探索更多軟硬結(jié)合方案,基于新硬件特性,發(fā)揮更大的數(shù)據(jù)庫性能。
-
支持異構(gòu)數(shù)據(jù)互通能力,降低異構(gòu)數(shù)據(jù)庫的遷移成本
-
運(yùn)維管理能力全面提升,PASS能力持續(xù)增強(qiáng)
