天天看點

猿創征文|TiDB 架構分析 & 讀寫性能測試

TiDB 是由 PingCAP 公司開發的一個開源的分布式 HTAP(Hybrid Transactional and Analytical Processing) 資料庫,基于 Google Spanner 和 Percolator 的設計思想,采用存儲與計算分離架構,将整個系統劃分為 TiDB、PD、TiKV、TiFlash 四個元件,各元件之間通過 gRPC 進行通信。TiDB 支援标準 SQL 和分布式事務,預設提供快照隔離級别。支援水準彈性擴充,按範圍對資料進行切分,資料分片之間使用 Multi­Raft 協定維護資料的強一緻性和高可用性。TiDB 整體架構如圖所示。
猿創征文|TiDB 架構分析 & 讀寫性能測試

TiDB 節點

TiDB 位于用戶端和 TiKV 之間,是資料庫的計算層,支援 MySQL 通信協定。在接收到用戶端發送的 SQL 語句後,TiDB 節點首先對 SQL 語句進行詞法檢查和文法分析生成抽象文法樹(Abstract Syntax Tree,AST),然後經過邏輯優化和實體優化,生成最終的執行計劃,發送到 TiKV 節點進行執行。為了避免由于當機而導緻狀态丢失,TiDB 節點被設計為無狀态的,并不存儲資料,是以當 TiDB 節點當機時隻需重新建立一個 TiDB 執行個體即可重新提供服務。在實際使用過程中,使用者可根據系統的計算負載動态的添加或減少 TiDB 節點,通過 HAProxy 等元件将用戶端的連接配接分散到多個 TiDB 執行個體,避免單點過熱問題。

PD 節點

PD 負責叢集授時和中繼資料管理,通過定期收集每個 TiKV 節點儲存的資料範圍,維護資料範圍與 TiKV 節點之間的映射關系。當 TiDB 發起對 TiKV 的讀寫請求時,會首先從 PD 擷取資料的位置資訊。同時 PD 會動态檢測每個 TiKV 節點的負載,通過資料分片的遷移實作 TiKV 的負載均衡,避免出現單點過熱問題。PD 使用實體時鐘拼接邏輯時鐘的方式為整個叢集提供中心化的授時服務,通過定期持久化一段時間後的時戳,實作全局嚴格單調遞增的時戳配置設定。為了保證高可用性,會同時啟動多個 PD 節點,節點之間通過 Raft 協定保證資料的強一緻性。

TiKV 節點

TiKV 是資料庫的存儲層,是基于 Multi­Raft 協定在單機 KV 存儲引擎 RocksDB 之上實作的分布式高可用的 KV 資料庫。TiKV 将資料有序存儲,根據 key 的範圍将資料劃分為多個大小接近的分片(Region),當單個分片的資料量過大或過小時,會自動進行分裂(split)或合并(merge)操作。TiKV 為每個分片維護多個副本存儲在不同的 TiKV 節點上,分片的副本之間使用 Raft 協定進行同步,保證了資料的高可用和強一緻性。TiKV 針對聯機事務處理 (OLTP) 的場景而設計,在 TiKV 内部資料以行式的形式進行存儲,提供了原生的分布式事務支援,通過檢測并發事務間的寫寫沖突,實作了快照隔離。

TiFlash 節點

讀寫性能測試