一、TiKV简介
1.1、TiKV概述
TiDB的存储用的TiKV, TiKV是基于RocksDB实现了分布式(可水平扩展,支持主从),RocksDB是对单机版LevelDB的封装。
TiKV是开源的、分布式、支持事务的VK数据库。
TiKV不仅提供了KV的API,且提供了兼容ACID的API。
TiKV用Rust语言实现,用采用Raft协议,作为TiDB的存储层,是一个兼容了MySQL协议的分布式HTAP数据库。
TiKV保证数据一致性,TiKV基于Rust语言实现了Raft协议,一致性状态存储在RocksDB中。
PD (Placement Drive):用来实现auto-sharding,自动化数据迁移。
TiKV将数据按Key划分成大致相等的分区region,每个分区里有n个副本(通常为3个),其中一个副本是leader(提供读写服务)。
1.2、TiKV的主要Features
Geo-Replication(异地数据同步)
TiKV用Raft协议和PD来支持Geo-Replication(一种异地数据同步技术,它可以几乎实时地把GlusterFS的卷(Volume)通过网络同步到异地)
Horizontal scalability(水平扩展)
通过PD和Raft Group,TiKV可以水平扩展,可轻松扩展100+TB的数据。
Consistent distributed transactions(一致的分布式事务)
TiKV支持一致的分布式事务
Coprocessor support
与HBase一样,TiKV实现了coprocessor 框架来支持分布式计算
Cooperates with TiDB
TiKV可以和TiDB一起配合来作为一个可水平扩展的,支持一致性事务,可作为关系型数据库和NoSQL的数据库。
二、TiKV的架构
2.1、APIs
TiKV提供了2中API:
1、Raw:Key-Value API, 以单个Key来保证原子性。
使用场景:不需要分布式事务 或 不需要 MVCC(multi-version concurrency control,多版本并发控制)
2、Transactional:支持ACID的key-value API , 以多个key为单位来保证原子性。
使用场景:需要分布式事务 或 MVCC
2.2、系统架构
TiKV基于Rust语言,基于Facebook RocksDB和Raft.
设计灵感来自于Google Spanner和HBase。
2.2.1、TiKV实例的架构
Placement driver (PD)
Placement Driver用来对TiKV做集群管理,他周期性地检查复制约束来在node和region中balance数据和负载,这个过程叫做auto-sharding。
Store
上面架构图中的每个Store其实就是RocksDB,他负责把数据存储到本地磁盘。
Region
Region是Key-value数据的基本单元,每个Region中的数据会被复制到多个nodes上,即一个Raft Group中有多个Replicas。
Node
TiKV的node指集群中的一个物理服务器,可以是一个虚机或容器。
在每个node上,可以由一个或多个Store。Store中存储的数据被划分到多个region中,数据跨region存了多份通过raft协议同步。
当一个node启动后,node、store、region的metadata会记录到Placement Driver中。即每个region和store的状态信息都记录到了PD中。
Transaction model
TiKV的事务模式提供:
- Snapshot锁隔离机制:如SQL:SELECT … FOR UPDATE
- 分布式事务的Externally一致
Raft
TiKV实例的数据分布式实现是通过Raft协议。