一、简介:
TiKV 是一个开源的分布式事务 Key-Value 数据库,支持跨行 ACID 事务,同时实现了自动水平伸缩、数据强一致性、跨数据中心高可用和云原生等重要特性。作为一个基础组件,TiKV 可作为构建其它系统的基石。目前最主要的chang,TiKV 已用于支持分布式 HTAP 数据库—— TiDB 中,负责存储数据,并已被多个行业的领先企业应用在实际生产环境。
二、发展:
发展很快,不到一年成为孵化项目
- 2018 年 8 月 29 日,称 CNCF宣布接纳 TiKV 作为 CNCF Sandbox 的云原生项
- 目。
- 2019 年 5 月,CNCF 的 TOC(技术监督委员会)投票决定接受 TiKV 晋级为孵
- 化项目。
三、特性:
- 跨数据中心高可用:使用 Raft 协议和 PD(Placement Driver)来实现跨地域、跨数据中心的高可用。
- 水平扩展:通过 PD 和精心实现的 Multi-Raft ,TiKV 在水平扩展性方面的表现出色,可以轻松扩展到 200+TB 的数据。
- 一致的分布式事务 :与 Google Spanner 类似,TiKV 支持外部一致的分布式事务。
- 协处理器(Coprocessor)支持:与 HBase 类似,TiKV 实现了支持分布式计算的协处理器框架,用于支持计算下推操作。
- 与 TiDB 无缝协同 :TiKV 和 TiDB 强强联合,构建了一个具有高水平扩展能力、支持一致性事务、融合传统关系型数据库和 NoSQL 优势特性的 NewSQL 数据库解决方案。
四、架构
1. 设计目标
a. 高性能KV存储引擎
b. 保证多个机器之间的数据一致性
c. 支持ACID事务
d. 可以实现自定义数据分布和负载均衡
2. 存储引擎,RocksDB
a. LSMtree:顺序写,优化写性能
b. 分层存储,多级缓存,提高数据读取效率: 热数据在上层
c. 关键特性
- Column Family
- 精细的compaction,配置线程数,手动触发,rate limiter
- ingest external sst file:快速插入数据,快速balance
- prefix bloom filter/iterator upper bound:特殊场景下加速scan
d. Raft
- 选举:followercandidateLeader
- 日志复制:leader复制给follower
- 关键特性
- Leader lease本地读,优化读请求(注:每个心跳会重新续Lease)
- Follower reader分担leader压力动态副本变更,方便调度
- Batch合并多个region的写入(注:raft支持的Batch操作)
e. MiltiRaft
- 负载均衡balance
- 分裂split
- 合并merge
3. 分布式事务
a. 基于percolator模型
- PD集成授时服务,保证全局时序
- 两阶段提交
- 乐观事务并发:客户端缓存数据(unionstore),提交时才检测冲突
- 可选悲观事务
- 客户端作为事事务的协调者(tidb)
- 不适用单点事务管理器(primary key)
b. 2pc
- prewrite:同步写primarykey&secondarykey
- commit:提交primary key就表示成功,异步提交secondary key
4. Coprocessor
- 下推函数到Tikv执行
- TiKV独立组件,低耦合
- 向量化执行(每次处理多行,聚合表达式按列计算)
五、应用
TIKV+REDIS分布式缓存系统
redis的集群不支持分布式事务,codis支持了redis'的集群,但是仍然不支持分布式事务(后续可能会支持),所有可以基于TiKV来实现分布式事务。
注:数据库的学习笔记,部分内容来自网络,如涉及侵权请您留言,我会立刻处置。