TiKV 源码略读 - Server Start

2023-10-08 09:10
文章标签 源码 server start 略读 tikv

本文主要是介绍TiKV 源码略读 - Server Start,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:alexshen

原文来源: https://tidb.net/blog/97577fd5

这篇文章是上篇文章的继续,上篇文章其实是整个server启动过程中非常小的一部分,文章最后有一个整体流程图,感兴趣的话可以点开进行查看。

TiKV源码略读-Config - 技术文章 / 原理解读 - AskTUG

这次我们的代码略读会基于v4.0.8这个分支开展阅读工作,当阅读完本次代码之后,TiKV就真正运行起来了。TiKV服务启动流程相关的代码肯定拥有更多的逻辑细节,我们会适当忽略一些细节,以便集中在重要的几个模块逻辑上,避免过多的细节迷失方向。

image

主线流程:

和上一篇一样,TiKV启动主要流程我们还是用镂空的图示代表,每一步都会展开讲解。

WXWorkCapture_16177757826863

初始步骤:

初始步骤主要配置日志系统和环境变量检查,没有太多技术细节,也不是我们重点关注的部分,所以我们先跳过。

WXWorkCapture_16177759091910

初始化配置:

这部分的流程其实包含了上一篇文章内容,都是配置信息的读取,检查和对应的设置,不是主要的逻辑代码,所以有几块内容留着空白,等后续再补充。

WXWorkCapture_16177759847086

网络端口冲突检测:

WXWorkCapture_16177760284194

网络地址和端口冲突检测其实非常简单,就是把配置中的地址和端口检查一下可不可用,代码量也不大,直接过。

初始化文件系统:

WXWorkCapture_16177760755766

这段代码主要在store_path下新建了一个LOCK的文件,应该是用来记录和管理锁相关的信息。然后会检查现有的rocksdb文件是否正常,可用磁盘空间是否充足。

初始化Yet another thread pool:

WXWorkCapture_1617776111678

这里调用了一个外部线程池管理库,代码就3行,看着只是配置了prometheus的监控,貌似没有更多实际的代码逻辑。从github项目文件看,也是一个在完善中的库。我们先对yatp有个初步的认识,等具体到项目中再看有没有其他地方用到yatp。

tikv / yatp

初始化加密:

WXWorkCapture_16177762544791

通过配置文件初始化DataKeyManager,代码就一行,很简单。配置的时候会有几个参数需要注意,一个是加密方法EncryptionMethod,包括了明文,AES128,AES192,AES256;还有一个是Master Key,可以通过明文,文件,access-key和secret-key三种方式配置。

WXWorkCapture_1617777816622

初始化raw engine v5.0:

WXWorkCapture_16177779835191

这部分代码是分支换成了master后梳理的内容,当时感觉有点怪,但很明显这部分代码不属于4.0版本,从最近的新分支可以看到这部分代码是5.0的功能。

从代码逻辑上看,这部分代码可以通过config配置,设置当前节点使用本地rocksdb还是raft版本的engine,似乎有大的功能计划,也可能是打算之后废弃init_engines部分的代码,这两部分代码有比较大的重叠部分。

而且raftengine也拉出去变成了一个新的项目库,核心代码会有比较大的变化,很期待。

初始化engines:

WXWorkCapture_16177780412087

TiKV启动流程里的核心代码,第一部分会初始化两个engine:

  • raft_engine存储在raftdb_path目录内,应该是给raft保存信息用的;
  • kv_engine存储在DEFAULT_ROCKSDB_SUB_DIR目录内,是rocksdb所在的地方。

这两个engine会组合在一起保存在engine::Engines里。之后会再初始化一个RaftKV的engine,这个engine的参数不是本地目录,而是一个raft router,可以猜测应该是node之间通信的engine。

初始化GC:

WXWorkCapture_1617778130425

官网只有TiDB的GC相关文档,并没有过多关于TiKV的GC相关的内容。从代码中大致可以看出TiKV的GC可能是用来处理锁的相关事务,这里的悬念我们暂时搁置一下,会在后续文章中详细探究。

初始化servers:

WXWorkCapture_16177796994255

那个红色的框其实和这部分代码关系不大,所以被我移到初始化config的代码块里了,5.0之后这个红框就没有了。

这里根据前面几步初始化的配置,生成了snap manager和raft storage两个管理对象,再生成了server这个对象。

server和SSTimporter,split_check_worker又一起参与到node.start方法中,这时候服务器开始作为tikv分布式系统中的一个节点开始启动,包括启动raft store,连通PD并注册,一些后端的worker开始schedule工作,rocksdb准备工作也开始执行了。

到这步结束,tikv单一节点内部的准备工作都已经完成,就等外部数据请求接入开始工作了。

注册services:

WXWorkCapture_16177799262928

这里主要注册了import,debug,diagnostic,deadlock,backup,cdc等一系列gRPC服务,这些服务会在下一步启动TiKV时候一一执行。

启动TiKV:

WXWorkCapture_16177802396367

这里是启动的最后一步,首先执行上一步注册的services,然后开始运行snap worker,并开始监听gRPC端口,最后输出“TiKV is ready to serve”的日志,标志TiKV正式启动成功!

之后还有一些监控指标的配置和等待结束信号的代码,这里就不细细描述了,有兴趣的小伙伴可以直接翻阅tikv的代码,相信剩下的部分应该不是难事。

整体架构图:

WXWorkCapture_16177802792601

这篇关于TiKV 源码略读 - Server Start的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/164213

相关文章

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

SQL Server清除日志文件ERRORLOG和删除tempdb.mdf

《SQLServer清除日志文件ERRORLOG和删除tempdb.mdf》数据库再使用一段时间后,日志文件会增大,特别是在磁盘容量不足的情况下,更是需要缩减,以下为缩减方法:如果可以停止SQLSe... 目录缩减 ERRORLOG 文件(停止服务后)停止 SQL Server 服务:找到错误日志文件:删除

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory