一、TiDB整體架構
與傳統的單機數據庫相比,TiDB具有以下優勢:
- 純分布式架構,擁有良好的擴展性,支持彈性的擴縮容
- 支持SQL,對外暴露MySQL的網絡協議,並兼容大多數MySQL的語法,在大多數場景下可以直接替換MySQL
- 默認支持高可用,在少數副本失效的情況下,數據庫本身能夠自動進行數據修復和故障轉移,對業務透明
- 支持ACID事務,對於一些有強一致需求的場景友好,例如:銀行轉賬
- 具有豐富的工具鏈生態,覆蓋數據遷移、同步、備份等多種場景
二、TiDB架構圖
在內核設計上,TiDB分布式數據庫將整體架構拆分成了多個模塊,各模塊之間互相通信,組成完整的TiDB系統。對應的架構圖如下:
1、TiDB Server:SQL層,對外暴露MySQL協議的連接endpoint,負責接受客戶端的鏈接,執行SQL解析和優化,最終生成分布式執行計划
TiDB層本身是無狀態的,實踐中可以啟動多個TiDB實例,通過負載均衡組件(如LVS、HAProxy、或F5)對外提供統一的接入地址,客戶端的
連接可以均勻的分攤在多個TiDB實例上以達到負載均衡的效果。TiDB Server本身並不存儲數據,只是解析SQL,將實際的數據讀取請求轉發給底層的存儲節點TiKV(或TiFlash)
2、PD(Placement Driver) Server:整個TiDB集群的元信息管理模塊,負責存儲每個TiKV節點實時的數據分布情況和集群的整體拓撲結構,提供TiDB Dashboard管控界面,並為
分布式事務分配事務ID。PD不僅存儲元信息,同時還會根據TiKV節點實時上報的數據分布狀態,下發數據調度命令給具體的TiKV節點,可以說是整個集群的“大腦”。此外,PD本身
也是由至少3個節點構成,擁有高可用的能力。建議部署奇數個PD節點。
3、存儲節點
- TiKV Server:負責存儲數據,從外部看TiKV是一個分布式的提供事務的Key-Value存儲引擎。存儲數據的基本單位是Region,每個Region負責存儲一個Key Range(從StartKey到
EndKey的左閉右開區間)的數據,每個TiKV節點會負責多個Region。TiKV的API在KV鍵值對層面提供對分布式事務的原生支持,默認提供了SI(Snampshot Isolation)的隔離級別,這也是
TiDB在SQL層面支持分布式事務的核心。TiDB的SQL層做完SQL解析后,會將SQL的執行計划轉換為對TiKV API的實際調用。所以,數據都存儲在TiKV中。另外,TiKV中的數據都會自動
維護多副本(默認為三副本),天然支持高可用和自動故障轉移。
- TiFlash:TiFlash是一類特殊的存儲節點。和普通TiKV節點不一樣的是,在TiFlash內部,數據是以列式的形式進行存儲,重要的功能是為分析型的場景加速。