1. 什么是newsql
? ? ? ?NewSQL 是對各種新的可擴展/高性能數據庫的簡稱,這類數據庫不僅具有NoSQL對海量數據的存儲管理能力,還保持了傳統數據庫支持ACID和SQL等特性。
? ? ? ?NewSQL是指這樣一類新式的關系型數據庫管理系統,針對OLTP(讀-寫)工作負載,追求提供和NoSQL系統相同的擴展性能,且仍然保持ACID和SQL等特性(scalable and ACID and (relational and/or sql -access))。
? ? ? NewSQL比較流量的幾種:cockroachDB,tidb,yugabyteDB等 這些都是參考了google spanner論文的開源實現。
2.TiDB介紹
? ? TiDB是一個開源的NewSQL數據庫,支持HTAP(Hybrid Transactional and Analytical Processing),既支持事務型操作,也支持數據分析。同時TiDB和MySQL的大多數協議都是兼容的。支持水平擴展,強一致性和高可用。
? ? ?TiDB的目標是提供一個一站式數據庫解決方案。包括OLTP(Online Transactional Processing), OLAP (Online Analytical Processing), and HTAP services。TiDB 適合高可用、強一致要求較高、數據規模較大等各種應用場景。
3. TiDB的應用場景
? ? ? ?TiDB 的應用場景是典型的 OLTP 場景,它的設計目標是 100% 的 OLTP 場景和 80% 的 OLAP 場景,同時還提供 TiSpark 項目以完成更復雜的 OLAP 分析。
? ? ?替代 MySQL
? ? ? ?傳統的 MySQL 數據庫在數據量急速增長后,使用分庫分表的技術來對數據庫進行擴展,在分布式數據庫系統中也是使用分片技術,但是這些技術不管在維護成本或開發成本上都很高。
? ? ? 而 TiDB 提供了一個可彈性的橫向擴展的分布式數據庫,并且具有高可用性,它兼容 MySQL 協議和絕大多數的 MySQL 語法,在通常情況下,用戶無須修改代碼就可以將 MySQL 無縫遷移到 TiDB。
? ? ?替代 NoSQL 數據庫
? ? ?NoSQL 數據庫擁有彈性的伸縮能力,具有實時并發寫入能力,但是 NoSQL 數據庫不支持 SQL,也不支持事務的 ACID 特性,NoSQL 無法滿足某些強一致性的場景下的需求。
? ? ?TiDB 具備 SQL 所有的特性,同時滿足數據的在線擴展。在線旅行網站“去哪兒”目前使用了幾個 TiDB 集群來替代 MySQL 和 HBase,如機票離線集群、金融支付集群等。
? ? ?集群用來存儲支付信息表和訂單信息表,這些信息嚴格支持事務 ACID 特性,因此可以將原來存儲于 MySQL 中的數據同步到 TiDB 中,然后,運營或開發人員可以在 TiDB 上進行 merge 單表查詢或 OLAP 分析。
? ? 實時數據倉庫
? ? ?目前企業大多數的數據分析場景的解決方案都是圍繞著 Hadoop 生態系統展開的,包括 HDFS、Hive、Spark 等。但是單純使用 Hadoop 已經無法滿足一些實時的 OLTP 和復雜的 OLAP 需求。
? ? ? ?隨著 TiDB 的子項目 TiSpark 的發布,可以在擁有關系數據庫的事務寫入能力同時進行復雜的分析。
4. TiDB架構
? ? ? ?在內核設計上,TiDB 分布式數據庫將整體架構拆分成了多個模塊,各模塊之間互相通信,組成完整的 TiDB 系統。對應的架構圖如下:
TiDB Server:SQL 層,對外暴露 MySQL 協議的連接 endpoint,負責接受客戶端的連接,執行 SQL 解析和優化,最終生成分布式執行計劃。TiDB 層本身是無狀態的,實踐中可以啟動多個 TiDB 實例,通過負載均衡組件(如 LVS、HAProxy 或 F5)對外提供統一的接入地址,客戶端的連接可以均勻地分攤在多個 TiDB 實例上以達到負載均衡的效果。TiDB Server 本身并不存儲數據,只是解析 SQL,將實際的數據讀取請求轉發給底層的存儲節點 TiKV(或 TiFlash)。
PD (Placement Driver) Server:整個 TiDB 集群的元信息管理模塊,負責存儲每個 TiKV 節點實時的數據分布情況和集群的整體拓撲結構,提供 TiDB Dashboard 管控界面,并為分布式事務分配事務 ID。PD 不僅存儲元信息,同時還會根據 TiKV 節點實時上報的數據分布狀態,下發數據調度命令給具體的 TiKV 節點,可以說是整個集群的“大腦”。此外,PD 本身也是由至少 3 個節點構成,擁有高可用的能力。建議部署奇數個 PD 節點。
存儲節點
TiKV Server:負責存儲數據,從外部看 TiKV 是一個分布式的提供事務的 Key-Value 存儲引擎。存儲數據的基本單位是 Region,每個 Region 負責存儲一個 Key Range(從 StartKey 到 EndKey 的左閉右開區間)的數據,每個 TiKV 節點會負責多個 Region。TiKV 的 API 在 KV 鍵值對層面提供對分布式事務的原生支持,默認提供了 SI (Snapshot Isolation) 的隔離級別,這也是 TiDB 在 SQL 層面支持分布式事務的核心。TiDB 的 SQL 層做完 SQL 解析后,會將 SQL 的執行計劃轉換為對 TiKV API 的實際調用。所以,數據都存儲在 TiKV 中。另外,TiKV 中的數據都會自動維護多副本(默認為三副本),天然支持高可用和自動故障轉移。
TiFlash:TiFlash 是一類特殊的存儲節點。和普通 TiKV 節點不一樣的是,在 TiFlash 內部,數據是以列式的形式進行存儲,主要的功能是為分析型的場景加速。
?