TiKV架构原理(笔记)
-
设计目标
- 高性能KV存储引擎
- 保证多个机器之间的数据一致性
- 支持ACID事务
- 可以实现自定义数据分布和负载均衡
-
存储引擎,RocksDB
-
LSM-tree:顺序写,优化写性能
-
分层存储,多级缓存,提高数据读取效率: 热数据在上层
-
关键特性
- Column Family
- 精细的compaction,配置线程数,手动触发,rate limiter
- ingest external sst file:快速插入数据,快速balance
- prefix bloom filter/iterator upper bound:特殊场景下加速scan
-
Raft
-
选举:follower-candidate-Leader
-
日志复制:leader复制给follower
-
关键特性
- Leader lease本地读,优化读请求(注:每个心跳会重新续Lease)
- Follower reader分担leader压力
- 动态副本变更,方便调度
- Batch合并多个region的写入(注:raft支持的Batch操作)
-
-
Milti-Raft
- 负载均衡balance
- 分裂split
- 合并merge
-
-
分布式事务
-
基于percolator模型
- PD集成授时服务,保证全局时序
- 两阶段提交
- 乐观事务并发:客户端缓存数据(unionstore),提交时才检测冲突
- 可选悲观事务
- 客户端作为事事务的协调者(tidb)
- 不适用单点事务管理器(primary key)
-
2pc
- prewrite:同步写primarykey&secondarykey
- commit:提交primary key就表示成功,异步提交secondary key
-
-
Coprocessor
- 下推函数到Tikv执行
- TiKV独立组件,低耦合
- 向量化执行(每次处理多行,聚合表达式按列计算)