TiDB 具備如下眾多特性,其中兩大核心特性為:水平擴(kuò)展與高可用。
1. 高度兼容 MySQL
大多數(shù)情況下,無(wú)需修改代碼即可從 MySQL 輕松遷移至 TiDB,分庫(kù)分表后的 MySQL 集群亦可通過(guò) TiDB 工具進(jìn)行實(shí)時(shí)遷移。
對(duì)于用戶(hù)使用的時(shí)候,可以透明地從MySQL切換到TiDB 中,只是“新MySQL”的后端是存儲(chǔ)“無(wú)限的”,不再受制于Local的磁盤(pán)容量。在運(yùn)維使用時(shí)也可以將TiDB當(dāng)做一個(gè)從庫(kù)掛到MySQL主從架構(gòu)中。
2. 分布式事務(wù)
TiDB 100% 支持標(biāo)準(zhǔn)的 ACID 事務(wù)。
3. 一站式 HTAP 解決方案
HTAP: Hybrid Transactional/Analytical Processing
TiDB 作為典型的 OLTP 行存數(shù)據(jù)庫(kù),同時(shí)兼具強(qiáng)大的 OLAP 性能,配合 TiSpark,可提供一站式 HTAP 解決方案,一份存儲(chǔ)同時(shí)處理 OLTP & OLAP,無(wú)需傳統(tǒng)繁瑣的 ETL 過(guò)程。
4. 云原生 SQL 數(shù)據(jù)庫(kù)
TiDB 是為云而設(shè)計(jì)的數(shù)據(jù)庫(kù),支持公有云、私有云和混合云,配合 TiDB Operator 項(xiàng)目 可實(shí)現(xiàn)自動(dòng)化運(yùn)維,使部署、配置和維護(hù)變得十分簡(jiǎn)單。
5. 水平彈性擴(kuò)展
通過(guò)簡(jiǎn)單地增加新節(jié)點(diǎn)即可實(shí)現(xiàn) TiDB 的水平擴(kuò)展,按需擴(kuò)展吞吐或存儲(chǔ),輕松應(yīng)對(duì)高并發(fā)、海量數(shù)據(jù)場(chǎng)景。
6. 真正金融級(jí)高可用
相比于傳統(tǒng)主從 (M-S) 復(fù)制方案,基于 Raft 的多數(shù)派選舉協(xié)議可以提供金融級(jí)的 100% 數(shù)據(jù)強(qiáng)一致性保證,且在不丟失大多數(shù)副本的前提下,可以實(shí)現(xiàn)故障的自動(dòng)恢復(fù) (auto-failover),無(wú)需人工介入。
水平擴(kuò)展的特點(diǎn):
無(wú)限水平擴(kuò)展是 TiDB 的一大特點(diǎn),這里說(shuō)的水平擴(kuò)展包括兩方面:計(jì)算能力(TiDB)和存儲(chǔ)能力(TiKV)。
TiDB Server 負(fù)責(zé)處理 SQL 請(qǐng)求,隨著業(yè)務(wù)的增長(zhǎng),可以簡(jiǎn)單的添加 TiDB Server 節(jié)點(diǎn),提高整體的處理能力,提供更高的吞吐。
TiKV 負(fù)責(zé)存儲(chǔ)數(shù)據(jù),隨著數(shù)據(jù)量的增長(zhǎng),可以部署更多的 TiKV Server 節(jié)點(diǎn)解決數(shù)據(jù) Scale 的問(wèn)題。
PD 會(huì)在 TiKV 節(jié)點(diǎn)之間以 Region 為單位做調(diào)度,將部分?jǐn)?shù)據(jù)遷移到新加的節(jié)點(diǎn)上。
所以在業(yè)務(wù)的早期,可以只部署少量的服務(wù)實(shí)例(推薦至少部署 3 個(gè) TiKV, 3 個(gè) PD,2 個(gè) TiDB),隨著業(yè)務(wù)量的增長(zhǎng),按照需求添加 TiKV 或者 TiDB 實(shí)例。
高可用特點(diǎn): 高可用是 TiDB 的另一大特點(diǎn),TiDB/TiKV/PD 這三個(gè)組件都能容忍部分實(shí)例失效,不影響整個(gè)集群的可用性。下面分別說(shuō)明這三個(gè)組件的可用性、單個(gè)實(shí)例失效后的后果以及如何恢復(fù)。
1. TiDB
TiDB 是無(wú)狀態(tài)的,推薦至少部署兩個(gè)實(shí)例,前端通過(guò)負(fù)載均衡組件對(duì)外提供服務(wù)。當(dāng)單個(gè)實(shí)例失效時(shí),會(huì)影響正在這個(gè)實(shí)例上進(jìn)行的 Session,從應(yīng)用的角度看,會(huì)出現(xiàn)單次請(qǐng)求失敗的情況,重新連接后即可繼續(xù)獲得服務(wù)。單個(gè)實(shí)例失效后,可以重啟這個(gè)實(shí)例或者部署一個(gè)新的實(shí)例。
2. PD
PD 是一個(gè)集群,通過(guò) Raft 協(xié)議保持?jǐn)?shù)據(jù)的一致性,單個(gè)實(shí)例失效時(shí),如果這個(gè)實(shí)例不是 Raft 的 leader,那么服務(wù)完全不受影響;如果這個(gè)實(shí)例是 Raft 的 leader,會(huì)重新選出新的 Raft leader,自動(dòng)恢復(fù)服務(wù)。PD 在選舉的過(guò)程中無(wú)法對(duì)外提供服務(wù),這個(gè)時(shí)間大約是3秒鐘。推薦至少部署三個(gè) PD 實(shí)例,單個(gè)實(shí)例失效后,重啟這個(gè)實(shí)例或者添加新的實(shí)例。
3. TiKV
TiKV 是一個(gè)集群,通過(guò) Raft 協(xié)議保持?jǐn)?shù)據(jù)的一致性(副本數(shù)量可配置,默認(rèn)保存三副本),并通過(guò) PD 做負(fù)載均衡調(diào)度。單個(gè)節(jié)點(diǎn)失效時(shí),會(huì)影響這個(gè)節(jié)點(diǎn)上存儲(chǔ)的所有 Region。對(duì)于 Region 中的 Leader 節(jié)點(diǎn),會(huì)中斷服務(wù),等待重新選舉;對(duì)于 Region 中的 Follower 節(jié)點(diǎn),不會(huì)影響服務(wù)。當(dāng)某個(gè) TiKV 節(jié)點(diǎn)失效,并且在一段時(shí)間內(nèi)(默認(rèn) 30 分鐘)無(wú)法恢復(fù),PD 會(huì)將其上的數(shù)據(jù)遷移到其他的 TiKV 節(jié)點(diǎn)上。
TiDB 存儲(chǔ)和計(jì)算能力存儲(chǔ)能力-TiKV-LSM
TiKV Server通常是3+的,TiDB每份數(shù)據(jù)缺省為3副本,這一點(diǎn)與HDFS有些相似,但是通過(guò)Raft協(xié)議進(jìn)行數(shù)據(jù)復(fù)制,TiKV Server上的數(shù)據(jù)的是以Region為單位進(jìn)行,由PD Server集群進(jìn)行統(tǒng)一調(diào)度,類(lèi)似HBASE的Region調(diào)度。
TiKV集群存儲(chǔ)的數(shù)據(jù)格式是KV的,在TiDB中,并不是將數(shù)據(jù)直接存儲(chǔ)在 HDD/SSD中,而是通過(guò)RocksDB實(shí)現(xiàn)了TB級(jí)別的本地化存儲(chǔ)方案,著重提的一點(diǎn)是:RocksDB和HBASE一樣,都是通過(guò) LSM樹(shù)作為存儲(chǔ)方案,避免了B+樹(shù)葉子節(jié)點(diǎn)膨脹帶來(lái)的大量隨機(jī)讀寫(xiě)。從何提升了整體的吞吐量。
計(jì)算能力-TiDB Server
TiDB Server本身是無(wú)狀態(tài)的,意味著當(dāng)計(jì)算能力成為瓶頸的時(shí)候,可以直接擴(kuò)容機(jī)器,對(duì)用戶(hù)是透明的。理論上TiDB Server的數(shù)量并沒(méi)有上限限制。
總結(jié)
TiDB作為新一代的NewSQL數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)領(lǐng)域已經(jīng)逐漸站穩(wěn)腳跟,結(jié)合了Etcd/MySQL/HDFS/HBase/Spark等技術(shù)的突出特點(diǎn),隨著TiDB的大面積推廣,會(huì)逐漸弱化 OLTP/OLAP的界限,并簡(jiǎn)化目前冗雜的ETL流程,引起新一輪的技術(shù)浪潮。
一言以蔽之,TiDB,前景可待,未來(lái)可期。
猜你喜歡:
shell腳本編輯教程下載【黑馬程序員】
使用shell腳本一鍵啟動(dòng)/關(guān)閉Kafka【操作教程】
Shell如何實(shí)現(xiàn)定時(shí)采集數(shù)據(jù)到HDFS?
Hadoop高可用集群搭建詳細(xì)教程【黑馬程序員】
黑馬程序員python大數(shù)據(jù)開(kāi)發(fā)課程