1.我們到底需要一個什么樣的數據庫
1.1 需要的數據庫特性
- 擴展性
- 強一致性、高可用性
- 支持SQL,ACID事務。
- 雲原生
- HTAP
- 兼容主流生態和協議
1.1.1 擴展性
Scale out也就是我們經常聽到的彈性橫向擴展。一是從彈性的角度看,顆粒度越小越好,常見的顆粒度有Cluster、Database、Schema、表、分表或者分區。二是數據庫寫入是昂貴資源,我們一定要面向寫入能力的線性擴展機制。
1.1.2 強一致性、高可用性
CAP的強一致指的是理論的一致性,也就是副本一致性,也就是每一份新增數據都會在多個物理節點保存,節點數量和網絡延遲是正向關系,理論上保存的節點越多,寫入延遲就越高,所以在分布式系統里,普遍采用了多數派強一致。
這個強一致屬性對於我們比較核心的業務,比如金融類場景,能做到更好的數據容災。
強一致與高可用這兩個概念,等價過來,就是實現RPO=0,RTO足夠小,
數據庫事務的特性(ACID):
1.2.數據技術棧常見的基礎因素
1.3.計算與存儲分離
1.4 Tidb高度分層架構
TiDB是一個計算與存儲分離的架構,它的存儲引擎叫TiKV。
TiDB在2015立項,彈性是整個架構設計的核心考量點,所以選擇了更為未來的計算與存儲分離的架構,從邏輯上看,主要分為三層:
1.4.1. 支持標准SQL的計算引擎TiDB-Server
這里面有一個概念,大家可能會混淆。TiDB是整個數據庫的名稱,同時有一個兼容MySQL的計算引擎 TiDB-Server(https://github.com/pingcap/tidb),
兼容以MySQL 5.7為主,在逐步兼容MySQL 8.
TiDB Server 支持 MySQL 的協議,語法,方言語法,DDL/DML,系統變量,內置功能,SQL Mode 以及類型推導等等。
1.4.2. 分布式存儲引擎 TiKV
TiDB Server 本身並不存儲數據,只是進行計算,實際的數據存儲在存儲層,也就是 TiKV(https://github.com/pingcap/tikv),目前這個項目已經捐獻給 CNCF,屬於 CNCF 的畢業項目。
1.4.3. 負責元信息管理與調度的,調度引擎 Placement Driver
Placement Driver (pd-server,簡稱 PD,https://github.com/pingcap/pd),PD 主要有幾個功能:
PD是整個集群的大腦,為了保持全局高可用,PD也至少三個節點,通過Raft進行三副本復制。
1.4.4 架構圖
1.5 小結
2.如何構建一個分布式存儲系統
2.1 需要什么樣的存儲引擎
2.2 數據庫核心:數據結構
2.3 選擇數據副本
2.4 如何擴展
擴展是基於分片實現的。分片分為預先分片(靜態)和自動分片(動態)。
常見的分片算法有哈希hash、范圍range、列表list
注意:一個Region默認是96MB
2.5 TiKV整體架構
2.6 多版本控制MVCC
2.7 分布式事務模型
2.8 小結
3 如何構建一個分布式 SQL 引擎
tidb-server的功能:
3.1 sql引擎過程
3.2 關鍵算子分布式化
3.3 如何構建一個online的DDL算法
3.4 如何連接到Tidb-server
3.5 小結
4 基於分布式架構的 HTAP 數據庫
2005年,Gartner提出了HTAP(Hybrid transactional/analytical processing,在線事務處理/在線分析處理數據庫)這一概念,並在2014 年,Gartner 對 HTAP 數據庫給出了明確的定義,HTAP 數據庫需要同時支持 OLTP 和OLAP 場景。
4.1 HTAP發展的必然性
4.2 Tidb被用於數據中台
Tidb可以看作大號的Mysql.
4.3 物理隔離是最好的資源隔離
4.4 行列數據同步,Raft-base最佳方案
5 Tidb關鍵技術創新
5.1 三個分布式系統
5.2 自動分片技術是更細維度彈性的基礎
5.3 彈性的分片構成了動態的系統
5.4 Multi-Raft將復制組更離散
5.5 基於Multi-Raft實現寫入的線性擴展
5.6 去中心化的分布式事務
6.TiDB 典型應用場景及用戶案例
6.1 OLTP Scale
(1)為什么分表
(2)為什么分庫
中間件方案:
6.2 數據架構選型