1. 程式人生 > >(一)分散式資料庫tidb-簡介

(一)分散式資料庫tidb-簡介

  因為資料磁碟問題,最近進行了更換庫,所以決定寫關於這方面的專題的部落格,部落格資訊參考的官方文件。

一、分散式資料庫使用背景

  隨著網際網路的飛速發展,業務量可能在短短的時間內爆發式地增長,對應的資料量可能快速地從幾百 GB 漲到幾百個 TB,傳統的單機資料庫提供的服務,在系統的可擴充套件性、價效比方面已經不再適用。比如MySQL資料庫,缺點是沒法做到水平擴充套件。MySQL 要想能做到水平擴充套件,唯一的方法就業務層的分庫分表或者使用中介軟體等方案。但是,這些中間層方案也有很大侷限性,執行計劃不是最優,分散式事務,跨節點 join,擴容複雜等。

二、分散式資料庫TiDB簡介

  TiDB 是 PingCAP 公司設計的開源分散式 HTAP (Hybrid Transactional and Analytical Processing) 資料庫,結合了傳統的 RDBMS 和 NoSQL 的最佳特性。TiDB 相容 MySQL,支援無限的水平擴充套件,具備強一致性和高可用性。TiDB 的目標是為 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 場景提供一站式的解決方案。。

TiDB 具備如下特性:

  • 高度相容 MySQL

  大多數情況下,無需修改程式碼即可從 MySQL 輕鬆遷移至 TiDB,分庫分表後的 MySQL 叢集亦可通過 TiDB 工具進行實時遷移。

  • 水平彈性擴充套件

  通過簡單地增加新節點即可實現 TiDB 的水平擴充套件,按需擴充套件吞吐或儲存,輕鬆應對高併發、海量資料場景。

  • 分散式事務

  TiDB 100% 支援標準的 ACID 事務。

  • 真正金融級高可用

  相比於傳統主從 (M-S) 複製方案,基於 Raft 的多數派選舉協議可以提供金融級的 100% 資料強一致性保證,且在不丟失大多數副本的前提下,可以實現故障的自動恢復 (auto-failover),無需人工介入。

  • 一站式 HTAP 解決方案

  TiDB 作為典型的 OLTP 行存資料庫,同時兼具強大的 OLAP 效能,配合 TiSpark,可提供一站式 HTAP 解決方案,一份儲存同時處理 OLTP & OLAP,無需傳統繁瑣的 ETL 過程。

  • 雲原生 SQL 資料庫

  TiDB 是為雲而設計的資料庫,支援公有云、私有云和混合雲,使部署、配置和維護變得十分簡單。

  TiDB 的設計目標是 100% 的 OLTP 場景和 80% 的 OLAP 場景,更復雜的 OLAP 分析可以通過 TiSpark 專案來完成。

  TiDB 對業務沒有任何侵入性,能優雅的替換傳統的資料庫中介軟體、資料庫分庫分表等 Sharding 方案。同時它也讓開發運維人員不用關注資料庫 Scale 的細節問題,專注於業務開發,極大的提升研發的生產力。

三、TiDB整體架構

要深入瞭解 TiDB 的水平擴充套件和高可用特點,首先需要了解 TiDB 的整體架構。

 

 

 

 TiDB 叢集主要分為三個元件:

  • TiDB Server

TiDB Server 負責接收 SQL 請求,處理 SQL 相關的邏輯,並通過 PD 找到儲存計算所需資料的 TiKV 地址,與 TiKV 互動獲取資料,最終返回結果。 TiDB Server 是無狀態的,其本身並不儲存資料,只負責計算,可以無限水平擴充套件,可以通過負載均衡元件(如LVS、HAProxy 或 F5)對外提供統一的接入地址。

  • PD Server

Placement Driver (簡稱 PD) 是整個叢集的管理模組,其主要工作有三個: 一是儲存叢集的元資訊(某個 Key 儲存在哪個 TiKV 節點);二是對 TiKV 叢集進行排程和負載均衡(如資料的遷移、Raft group leader 的遷移等);三是分配全域性唯一且遞增的事務 ID。

PD 是一個叢集,需要部署奇數個節點,一般線上推薦至少部署 3 個節點。

  • TiKV Server

TiKV Server 負責儲存資料,從外部看 TiKV 是一個分散式的提供事務的 Key-Value 儲存引擎。儲存資料的基本單位是 Region(區域),每個 Region 負責儲存一個 Key Range (從 StartKey 到 EndKey 的左閉右開區間)的資料,每個 TiKV 節點會負責多個 Region 。TiKV 使用 Raft 協議做複製,保持資料的一致性和容災。副本以 Region 為單位進行管理,不同節點上的多個 Region 構成一個 Raft Group,互為副本。資料在多個 TiKV 之間的負載均衡由 PD 排程,這裡也是以 Region 為單位進行排程。

四、核心特性

  • 水平擴充套件

  無限水平擴充套件是 TiDB 的一大特點,這裡說的水平擴充套件包括兩方面:計算能力和儲存能力。TiDB Server 負責處理 SQL 請求,隨著業務的增長,可以簡單的新增 TiDB Server 節點,提高整體的處理能力,提供更高的吞吐。TiKV 負責儲存資料,隨著資料量的增長,可以部署更多的 TiKV Server 節點解決資料 Scale 的問題。PD 會在 TiKV 節點之間以 Region 為單位做排程,將部分資料遷移到新加的節點上。所以在業務的早期,可以只部署少量的服務例項,隨著業務量的增長,按照需求新增 TiKV 或者 TiDB 例項。

  • 高可用

  高可用是 TiDB 的另一大特點,TiDB/TiKV/PD 這三個元件都能容忍部分例項失效,不影響整個叢集的可用性。

五、TiDB原理與實現

  TiDB 架構是 SQL 層和 KV 儲存層分離,相當於 InnoDB 外掛儲存引擎與 MySQL 的關係。從下圖可以看出整個系統是高度分層的,最底層選用了當前比較流行的儲存引擎 RocksDB,RockDB 效能很好但是是單機的,為了保證高可用所以寫多份,上層使用 Raft 協議來保證單機失效後資料不丟失不出錯。保證有了比較安全的 KV 儲存的基礎上再去構建多版本,再去構建分散式事務,這樣就構成了儲存層 TiKV。有了TiKV,TiDB 層只需要實現 SQL 層,再加上 MySQL 協議的支援,應用程式就能像訪問 MySQL 那樣去訪問 TiDB 了。

&n