淺析NewSQL資料庫——TiDB

小米運維發表於2018-10-26

本文從誕生背景、整體架構、能力特徵及相容監控等多個方面詳細介紹了TiDB這個新一代的NewSQL資料庫。
上篇文章回顧:SOAR使用指南

如今的資料庫種類繁多,RDBMS(關係型資料庫)、NoSQL(Not Only SQL)、NewSQL憑藉己之長處,在資料庫領域均有一席之地,可謂百家爭鳴之勢。先上一張DBEngines在2018年8月釋出的資料庫排名:

淺析NewSQL資料庫——TiDB

我們可以看到資料庫份額之間的競爭還是十分激烈的。而本篇文章要介紹的是資料庫領域的後起之秀——NewSQL-TiDB,由於TiDB更新發版速度較快,所以本篇文章跟最新版本之間會有差異。

一、TiDB誕生背景

目前RDBMS的代表為Oracle、MySQL、PostgreSQL,傳統關係型資料庫歷史比較久,在資料庫領域也是“輩份”比較高的,其廣泛應用在各行各業。但是此類資料庫存在著一些問題,如自身容量的限制,RDBMS大多為本地儲存或共享儲存。隨著業務量不斷增加,容量漸漸成為瓶頸,此時DBA會通過多次的庫表sharding,以此來緩解容量問題。大量的分庫分表,不僅耗費了大量人力,還使得業務訪問資料庫的路由邏輯變得複雜。除此之外,RDBMS伸縮性比較差,通常叢集擴容縮容成本較高,且不滿足分散式的事務。

NoSQL類資料庫的代表為Hbase、Redis、MongoDB、Cassandra等,這類資料庫解決了 RDBMS伸縮性差的問題,叢集容量擴容變得方便很多,但是由於儲存方式為多個KV儲存,所以對SQL的相容性就大打折扣。對於NoSQL類資料庫來說,只能滿足部分分散式事務的特點。

NewSQL領域的代表是Google的spanner和F1,其號稱可以實現全球資料中心容災,且完全滿足分散式事務的ACID,但是隻能在Google雲上使用。

TiDB誕生在大背景下,也彌補了國內在NewSQL領域中的空缺。TiDB自2015年5月寫下第一行程式碼以來,至今已有3年有餘,已發版幾十次,版本迭代十分迅速,目前最新版本是2.0.6,在GitLab上點贊數已超過14000。

二、TiDB架構特性

1.TiDB整體架構

下圖為TiDB的基本架構。TiDB中可以分為三類節點:PD Server、TiDB Server、TiKV Server。

PD Server負責儲存叢集的後設資料,對每個事物分配全域性的事物ID,並負責對TiKV叢集資料進行排程和負載均衡。

TiDB Server負責接收使用者的請求,並解析成執行計劃,通過PD Server進行資料定址,然後與TiKV Server節點互動,進行查詢。

TiKV Server負責儲存叢集的資料。

Client提交任務的時候會通過LB層轉發,提交到TiDB Server叢集中,PD Server會給每個事務分配一個全域性事務ID,緊接著TiDB Server會將application解析成具體的執行計劃,並向PD叢集獲取資料儲存地址,通過和TiKV Server節點互動,進行查詢。

淺析NewSQL資料庫——TiDB

2.TiDB能力特徵

淺析NewSQL資料庫——TiDB

計算能力:TiDB Server本身是無狀態的,意味著當計算能力成為瓶頸的時候,可以直接擴容機器,對使用者是透明的。理論上TiDB Server的數量並沒有上限限制。

儲存能力:TiKV Server通常是3+的,TiDB每份資料預設為3副本,這一點與HDFS有些相似,但是通過Raft協議進行資料複製,TiKV Server上的資料的是以Region為單位進行,由PD Server叢集進行統一排程,類似HBASE的Region排程。

3.TiDB的高可用

淺析NewSQL資料庫——TiDB

TiDB每個角色都屬於高可用的,單個節點當機不影響整個叢集。TiDB Server會有多個,由於無狀態,即使意外當機,Applcation會通過重試,連線到其他節點。PD Server一般是2n+1數個,通過Raft協議進行選舉,Leader當機後Follower後通過選舉成為Leader,繼續完成工作。每個TiKV節點中的資料儲存格式是KV結構的,通過Key-Range的方式進行 hash到一個Region中,每個Region會有額外兩個副本,分佈到不通的節點上。

4.相容MySQL

TiDB基本相容了MySQL,對於使用者使用的時候,可以透明地從MySQL切換到TiDB 中,只是“新MySQL”的後端是儲存“無限的”,不再受制於Local的磁碟容量。在運維使用時也可以將TiDB當做一個從庫掛到MySQL主從架構中。

淺析NewSQL資料庫——TiDB

5.高效儲存方案

上面講到,TiKV叢集儲存的資料格式是KV的,在TiDB中,並不是將資料直接儲存在 HDD/SSD中,而是通過RocksDB實現了TB級別的本地化儲存方案,RocksDB的架構不再贅述了,有興趣可以搜一下相關文件,著重提的一點是:RocksDB和HBASE一樣,都是通過 LSM樹作為儲存方案,避免了B+樹葉子節點膨脹帶來的大量隨機讀寫。從何提升了整體的吞吐量。

淺析NewSQL資料庫——TiDB

6.TIDB監控

在TiDB中選擇了開源的Prometheus作為整個叢集的監控,在每個節點上,都會通過Multiple角色收集並上報所有節點的資料,推送到PushGateWay中,PushGateWay接收所有Client Push上來的所有資料,Prometheus Server會定期從GateWay中拉取資料資料,整個監控通過Grafana進行視覺化和監控查詢。

淺析NewSQL資料庫——TiDB

三、總結

TiDB作為新一代的NewSQL資料庫,在資料庫領域已經逐漸站穩腳跟,結合了Etcd/MySQL/HDFS/HBase/Spark等技術的突出特點,隨著TiDB的大面積推廣,會逐漸弱化 OLTP/OLAP的界限,並簡化目前冗雜的ETL流程,引起新一輪的技術浪潮。一言以蔽之,TiDB,前景可待,未來可期。


本文首發於公眾號“小米運維”,點選檢視原文


相關文章