TiKV 源码解析系列文章(一)序

TiKV 源码解析系列文章(一)序作者:唐刘TiKV是一个支持事务的分布式Key-Value数据库,有很多社区开发者基于TiKV来开发自己的应用,譬如titan、tidis。尤其是在TiKV成为CNCF的Sandbox项目之后,吸引了越来越多开发者的目光,很多同学都想参与到TiKV的研发中来。这时候,就会遇到两个比较大的拦路虎:Rust语言:众所周知,TiKV是使用Rust语言来进行开发…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

作者:唐刘

TiKV 是一个支持事务的分布式 Key-Value 数据库,有很多社区开发者基于 TiKV 来开发自己的应用,譬如 titantidis。尤其是在 TiKV 成为 CNCFSandbox 项目之后,吸引了越来越多开发者的目光,很多同学都想参与到 TiKV 的研发中来。这时候,就会遇到两个比较大的拦路虎:

  1. Rust 语言:众所周知,TiKV 是使用 Rust 语言来进行开发的,而 Rust 语言的学习难度相对较高,有些人认为其学习曲线大于 C++,所以很多同学在这一步就直接放弃了。

  2. 文档:最开始 TiKV 是作为 HTAP 数据库 TiDB 的一个底层存储引擎设计并开发出来的,属于内部系统,缺乏详细的文档,以至于同学们不知道 TiKV 是怎么设计的,以及代码为什么要这么写。

对于第一个问题,我们内部正在制作一系列的 Rust 培训课程,由 Rust 作者以及 Rust 社区知名的开发者亲自操刀,预计会在今年第一季度对外发布。希望通过该课程的学习,大家能快速入门 Rust,使用 Rust 开发自己的应用。

而对于第二个问题,我们会启动 《TiKV 源码解析系列文章》以及 《Deep Dive TiKV 系列文章》计划,在《Deep Dive TiKV 系列文章》中,我们会详细介绍与解释 TiKV 所使用技术的基本原理,譬如 Raft 协议的说明,以及我们是如何对 Raft 做扩展和优化的。而 《TiKV 源码解析系列文章》则是会从源码层面给大家抽丝剥茧,让大家知道我们内部到底是如何实现的。我们希望,通过这两个系列,能让大家对 TiKV 有更深刻的理解,再加上 Rust 培训,能让大家很好的参与到 TiKV 的开发中来。

结构

本篇文章是《TiKV 源码解析系列文章》的序篇,会简单的给大家讲一下 TiKV 的基本模块,让大家对这个系统有一个整体的了解。

要理解 TiKV,只是了解 https://github.com/tikv/tikv 这一个项目是远远不够的,通常,我们也需要了解很多其他的项目,包括但不限于:

在这个系列里面,我们首先会从 TiKV 使用的周边库开始介绍,然后介绍 TiKV,最后会介绍 PD。下面简单来说下我们的一些介绍计划。

Storage Engine

TiKV 现在使用 RocksDB 作为底层数据存储方案。在 pingcap/rust-rocksdb 这个库里面,我们会简单说明 Rust 是如何通过 Foreign Function Interface (FFI) 来跟 C library 进行交互,以及我们是如何将 RocksDB 的 C API 封装好给 Rust 使用的。

另外,在 pingcap/rocksdb 这个库里面,我们会详细的介绍我们自己研发的 Key-Value 分离引擎 – Titan,同时也会让大家知道如何使用 RocksDB 对外提供的接口来构建自己的 engine。

Raft

TiKV 使用的是 Raft 一致性协议。为了保证算法的正确性,我们直接将 etcd 的 Go 实现 port 成了 Rust。在 pingcap/raft-rs,我们会详细介绍 Raft 的选举,Log 复制,snapshot 这些基本的功能是如何实现的。

另外,我们还会介绍对 Raft 的一些优化,譬如 pre-vote,check quorum 机制,batch 以及 pipeline。

最后,我们会说明如何去使用这个 Raft 库,这样大家就能在自己的应用里面集成 Raft 了。

gRPC

TiKV 使用的是 gRPC 作为通讯框架,我们直接把 Google C gRPC 库封装在 grpc-rs 这个库里面。我们会详细告诉大家如何去封装和操作 C gRPC 库,启动一个 gRPC 服务。

另外,我们还会介绍如何使用 Rust 的 futures-rs 来将异步逻辑变成类似同步的方式来处理,以及如何通过解析 protobuf 文件来生成对应的 API 代码。

最后,我们会介绍如何基于该库构建一个简单的 gRPC 服务。

Prometheus

TiKV 使用 Prometheus 作为其监控系统, rust-prometheus 这个库是 Prometheus 的 Rust client。在这个库里面,我们会介绍如果支持不同的 Prometheus 的数据类型(Coutner,Gauge,Historgram)。

另外,我们会重点介绍我们是如何通过使用 Rust 的 Macro 来支持 Prometheus 的 Vector metrics 的。

最后,我们会介绍如何在自己的项目里面集成 Prometheus client,将自己的 metrics 存到 Prometheus 里面,方便后续分析。

Fail

Fail 是一个错误注入的库。通过这个库,我们能很方便的在代码的某些地方加上 hook,注入错误,然后在系统运行的时候触发相关的错误,看系统是否稳定。

我们会详细的介绍 Fail 是如何通过 macro 来注入错误,会告诉大家如何添加自己的 hook,以及在外面进行触发

TiKV

TiKV 是一个非常复杂的系统,这块我们会重点介绍,主要包括:

  1. Raftstore,该模块里面我们会介绍 TiKV 如何使用 Raft,如何支持 Multi-Raft。
  2. Storage,该模块里面我们会介绍 Multiversion concurrency control (MVCC),基于 Percolator 的分布式事务的实现,数据在 engine 里面的存储方式,engine 操作相关的 API 等。
  3. Server,该模块我们会介绍 TiKV 的 gRPC API,以及不同函数执行流程。
  4. Coprocessor,该模块我们会详细介绍 TiKV 是如何处理 TiDB 的下推请求的,如何通过不同的表达式进行数据读取以及计算的。
  5. PD,该模块我们会介绍 TiKV 是如何跟 PD 进行交互的。
  6. Import,该模块我们会介绍 TiKV 如何处理大量数据的导入,以及如何跟 TiDB 数据导入工具 lightning 交互的。
  7. Util,该模块我们会介绍一些 TiKV 使用的基本功能库。

PD

PD 用来负责整个 TiKV 的调度,我们会详细的介绍 PD 内部是如何使用 etcd 来进行元数据存取和高可用支持,也会介绍 PD 如何跟 TiKV 交互,如何生成全局的 ID 以及 timestamp。

最后,我们会详细的介绍 PD 提供的 scheduler,以及不同的 scheudler 所负责的事情,让大家能通过配置 scheduler 来让系统更加的稳定。

小结

上面简单的介绍了源码解析涉及的模块,还有一些模块譬如 https://github.com/tikv/client-rust 仍在开发中,等完成之后我们也会进行源码解析。

我们希望通过该源码解析系列,能让大家对 TiKV 有一个更深刻的理解。当然,TiKV 的源码也是一直在不停的演化,我们也会尽量保证文档的及时更新。

最后,欢迎大家参与 TiKV 的开发。

TiKV 源码解析系列文章(一)序

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193027.html原文链接:https://javaforall.net

(0)
上一篇 2025年12月3日 下午3:43
下一篇 2025年12月3日 下午4:15


相关推荐

  • Win7 64的cmd控制台进入下级目录和返回上级目录(上级目录cd .. 下级目录cd+文件名称)

    Win7 64的cmd控制台进入下级目录和返回上级目录(上级目录cd .. 下级目录cd+文件名称)本博客主要总结在 win764 位系统下 在 cmd 控制台 一级一级进入目录 然后再一级一级返回上一级目录 具体的如下面所述 背景知识 a1 进入下一级目录命令 nbsp nbsp nbsp nbsp cd 文件夹名称 nbsp nbsp cd 文件夹名称 a2 返回上一级目录命令 nbsp nbsp nbsp nbsp cd nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp cd 下面我要在 cmd 控制台一级一级进入文件夹 D 1test 2test 3test 4tes

    2025年9月20日
    5
  • realsense深度图像保存方法

    realsense深度图像保存方法一般使用realsense时会保存视频序列,当保存深度图像时,需要注意保存的图像矩阵的格式,不然可能造成深度值的丢失。在众多图像库中,一般会使用opencv中的imwrite()函数进行深度图像的保存。一般深度图像中深度值的单位是mm,因此一般使用np.uint16作为最终数据格式保存。例子:importnumpyasnpimportcv2deffun1(…

    2022年4月25日
    34
  • virsh命令详解_1个无法解析的外部命令

    virsh命令详解_1个无法解析的外部命令virsh的详细命令解析virsh有命令模式和交互模式如果直接在vrish后面添加参数是命令模式,如果直接写virsh,就会进入交互模式virshlist 列出所有的虚拟机,虚拟机的状态有(8)种 runing是运行状态 idel是空闲状态 pause暂停状态 shutdown关闭状态 crash虚拟机崩坏状态 daying垂死状态 shutoff不运行完全关闭 pmsuspe…

    2022年8月12日
    9
  • 英伟达 NemoClaw 发布!硬件解耦+开源,企业级 AI 智能体进入“通用时代”

    英伟达 NemoClaw 发布!硬件解耦+开源,企业级 AI 智能体进入“通用时代”

    2026年3月12日
    3
  • screenflow怎么录屏_mac录屏软件 带声音

    screenflow怎么录屏_mac录屏软件 带声音ScreenFlow8forMac是一款集屏幕录制和视频编辑为一体的软件,全新版本screenflowformac中文版已经更新,新版本带来跟踪缩略图、手绘注释、可拆卸编辑时间线、快速旁白和配音添加、刻录字幕等新功能,还有更多改进,赶紧来体验一下吧!ScreenFlow8forMac官方介绍ScreenFlow®是专为macOS设计的屡获殊荣的屏幕录制和视频编辑软件。凭借高质量的屏幕,视频,音频和iOS捕捉,极其强大的编辑功能以及新的StockMediaLibrary选项,

    2026年3月5日
    4
  • AI实战应用!使用「即梦AI」完成B端视觉设计

    AI实战应用!使用「即梦AI」完成B端视觉设计

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号