TiKV 源码解析系列文章(一)序
https://cn.pingcap.com/blog/tikv-source-code-reading-1/
- TiKV 是一个支持事务的分布式 Key-Value 数据库
- 项目地址:https://github.com/tikv/tikv
- Rust:pingcap Rust 培训课程
- TiKV文档:
- 《TiKV 源码解析系列文章》
- 周边库->TikV->PD
- 《Deep Dive TiKV 系列文章》
- 《TiKV 源码解析系列文章》
- 周边项目
- raft-rs:https://github.com/pingcap/raft-rs
- rust-prometheus:https://github.com/pingcap/rust-prometheus
- rust-rocksdb:https://github.com/pingcap/rust-rocksdb
- fail-rs:https://github.com/pingcap/fail-rs
- rocksdb:https://github.com/pingcap/rocksdb
- grpc-rs:https://github.com/pingcap/grpc-rs
- pd:https://github.com/pingcap/pd
- rust-rocksdb
- TiKV 使用 RocksDB 作为底层数据存储方案
- Rust 是如何通过 Foreign Function Interface (FFI) 来跟 C library 进行交互
- Foreign Function Interface:调用另一种编程语言编写的服务
- 如何将 RocksDB 的 C API 封装好给 Rust 使用的
- pingcap/rocksdb
- Key-Value 分离引擎 - Titan
- 如何使用 RocksDB 对外提供的接口来构建自己的 engine
- raft-rs
- TiKV 使用 Raft 一致性协议,将 etcd 的 Go 实现 port 成了 Rust
- Raft的基本功能实现
- 选举
- Log复制
- snapshot
- 对Raft的优化
- pre-voke
- check quorum机制
- batch
- pipeline
- 如何使用Raft库,在应用中集成Raft
- grpc-rs
- rpc:remote procedure call,远程过程调用
- TiKV 使用 gRPC 作为通讯框架,把 Google C gRPC 库封装在 grpc-rs 中
- 如何去封装和操作 C gRPC 库,启动一个 gRPC 服务
- 使用 Rust 的 futures-rs 来将异步逻辑变成类似同步的方式来处理
- 如何通过解析 protobuf 文件来生成对应的 API 代码
- 基于grpc-rs库构建一个简单的 gRPC 服务
- rust-prometheus
- TiKV 使用 Prometheus 作为其监控系统
- rust-prometheus 库是 Prometheus 的 Rust client
- 如何支持不同的 Prometheus 的数据类型
- Counter
- Gauge
- Historgram
- 如何通过使用 Rust 的 Macro 来支持 Prometheus 的 Vector metrics
- 如何在项目中集成 Prometheus client,将 metrics 存到 Prometheus 里面,方便后续分析
- fail-rs
- 错误注入
- 在代码的某些地方加上 hook,注入错误,然后在系统运行的时候触发相关的错误,看系统是否稳定
- 如何通过 macro 来注入错误,如何添加 hook,以及如何触发
- 错误注入
- TiKV
- Raftstore:
- 如何使用 Raft
- 如何支持 Multi-Raft
- Storage:
- Multiversion concurrency control (MVCC)
- 基于 Percolator 的分布式事务的实现
- 数据在 engine 里面的存储方式
- engine 操作相关的 API
- Server:
- TiKV 的 gRPC API
- 不同函数执行流程
- Coprocessor:
- TiKV 如何处理 TiDB 的下推请求,通过不同的表达式进行数据读取以及计算
- PD:
- TiKV 如何与 PD 进行交互
- Import:
- TiKV 如何处理大量数据的导入
- 如何与 TiDB 数据导入工具 TiDB Lightning 交互
- Util:
- 介绍一些 TiKV 使用的基本功能库
- Raftstore:
- PD
- 负责整个 TiKV 的调度
- PD 内部是如何使用 etcd 来进行元数据存取和高可用支持,如何跟 TiKV 交互,如何生成全局的 ID 以及 timestamp
- 介绍 PD 提供的 scheduler,以及不同 scheduler 的职责,通过配置 scheduler 来让系统更加的稳定