InfluxDB源码阅读之snapshotter服务

时间:2022-12-13 21:25:21

操作系统 : CentOS7.3.1611_x64

go语言版本:1.8.3 linux/amd64

InfluxDB版本:1.1.0

服务模块介绍

源码路径: github.com/influxdata/influxdb/services/snapshotter

service.go : snapshotter服务的实现

service_test.go : snapshotter服务的测试代码

client.go : 提供snapshotter服务的客户端访问API

快照服务主要提供如下功能:

  • TSM碎片文件备份
  • Meta文件备份

拥有独特的标记( BackupMagicHeader ,针对meta文件): 0x59590101

  • 数据库信息备份
  • 数据库存储策略信息备份

Service结构

该结构所在文件 :service.go

snapshotter主服务结构如下:

type Service struct {
wg sync.WaitGroup
err chan error Node *influxdb.Node MetaClient interface {
encoding.BinaryMarshaler
Database(name string) *meta.DatabaseInfo
} TSDBStore *tsdb.Store Listener net.Listener
Logger *log.Logger
}

解释如下:

  • wg

使用锁机制进行数据同步

服务收到连接请求后,首先计数器加1,然后在独立的goroutine中处理该连接,处理完成时计数器减1;

调用Close接口时,wg进行阻塞操作,保证服务关闭时所有任务都完成。

  • err

error通道,暂时不知道怎么用。

  • Node

InfluxDB节点信息,集群相关功能。

  • MetaClient

Meta服务客户端接口,获取Meta的信息,用于备份Meta文件、数据库信息、数据库存储策略。

  • TSDBStore

InfluxDB存储引擎指针,用于备份数据库的TSM碎片文件。

  • Listener

socket对象,用于监听服务端口、接收客户端放来的请求。

  • Logger

日志指针,用于记录快照服务在运行过程中产生的日志。

Request结构

该结构所在文件 :service.go

snapshotter客户端请求的数据结构如下:

type Request struct {
Type RequestType
Database string
RetentionPolicy string
ShardID uint64
Since time.Time
}

解释如下:

  • Type

用于区别数据备份的类型。

  • Database

Meta文件备份、数据库信息备份、存储策略备份时使用,用于指定需要备份的数据库名称。

  • RetentionPolicy

存储策略备份时使用,用于指定需要备份的数据库存储策略的名称。

  • ShardID

TSM碎片文件备份时使用,用于指定碎片ID。

  • Since

TSM碎片文件备份时使用,用于指定起始时间。

Response结构

结构如下:

type Response struct {
Paths []string
}

该服务在InfluxDB中的应用

该服务在InfluxDB主服务器程序(influxd)中使用,具体如下:

[root@localhost influxdb]# grep "github.com/influxdata/influxdb/services/snapshotter" * -rn
cmd/influxd/backup/backup.go:: "github.com/influxdata/influxdb/services/snapshotter"
cmd/influxd/restore/restore.go:: "github.com/influxdata/influxdb/services/snapshotter"
cmd/influxd/run/server.go:: "github.com/influxdata/influxdb/services/snapshotter"
services/snapshotter/service.go::package snapshotter // import "github.com/influxdata/influxdb/services/snapshotter"
[root@localhost influxdb]#

1、服务流程

在 Server->Open 中通过 Server->appendSnapshotterService 加载SnapshotterService。

通过 Server->SnapshotterService 对外提供服务。

2、备份流程

备份流程如下:

通过控制台获取用户指令;

连接SnapshotterService,并发送请求;

执行备份过程;

snapshotter在该流程中充当SnapshotterService的客户端,负责转发请求及获取响应。

3、恢复流程

snapshotter在恢复流程中主要验证下 BackupMagicHeader 是否正确。

好,就这些了,希望对你有帮助。

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2018/20180208_InfluxDB源码阅读之snapshotter服务.rst

欢迎补充

InfluxDB源码阅读之snapshotter服务的更多相关文章

  1. InfluxDB源码阅读之httpd服务

    操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 服务模块介绍 源码路径: github.com/influxda ...

  2. [源码阅读] 阿里SOFA服务注册中心MetaServer(1)

    [源码阅读] 阿里SOFA服务注册中心MetaServer(1) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(1) 0x00 摘要 0x01 服务注册中心 1.1 服务注册中心简 ...

  3. [源码阅读] 阿里SOFA服务注册中心MetaServer(2)

    [源码阅读] 阿里SOFA服务注册中心MetaServer(2) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(2) 0x00 摘要 0x01 MetaServer 注册 1.1 ...

  4. [源码阅读] 阿里SOFA服务注册中心MetaServer(3)

    [源码阅读] 阿里SOFA服务注册中心MetaServer(3) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(3) 0x00 摘要 0x01 概念 1.1 分布式一致性 1.2 ...

  5. 【Dubbo源码阅读系列】服务暴露之远程暴露

    引言 什么叫 远程暴露 ?试着想象着这么一种场景:假设我们新增了一台服务器 A,专门用于发送短信提示给指定用户.那么问题来了,我们的 Message 服务上线之后,应该如何告知调用方服务器,服务器 A ...

  6. 【Dubbo源码阅读系列】服务暴露之本地暴露

    在上一篇文章中我们介绍 Dubbo 自定义标签解析相关内容,其中我们自定义的 XML 标签 <dubbo:service /> 会被解析为 ServiceBean 对象(传送门:Dubbo ...

  7. xxl-job源码阅读二(服务端)

    1.源码入口 xxl-job-admin是一个简单的springboot工程,简单翻看源码,可以很快发现XxlJobAdminConfig入口. @Override public void after ...

  8. Spark源码阅读之存储体系--存储体系概述与shuffle服务

    一.概述 根据<深入理解Spark:核心思想与源码分析>一书,结合最新的spark源代码master分支进行源码阅读,对新版本的代码加上自己的一些理解,如有错误,希望指出. 1.块管理器B ...

  9. netty&lpar;一&rpar;---服务端源码阅读

    NIO Select 知识 select 示例代码 : //创建 channel 并设置为非阻塞 ServerSocketChannel serverChannel = ServerSocketCha ...

随机推荐

  1. Java位运算总结-leetcode题目

    按位操作符只能用于整数基本数据类型中的单个bit中,操作符对应表格: Operator Description & 按位与(12345&1=1,可用于判断整数的奇偶性) | 按位或 ^ ...

  2. 机器学习笔记:Gradient Descent

    机器学习笔记:Gradient Descent http://www.cnblogs.com/uchihaitachi/archive/2012/08/16/2642720.html

  3. 工龄居然这么有用!&lbrack;Reprint&rsqb;

    工龄有多重要?你恐怕未必知道,别以为没啥大不了,事实上,工龄会从各方面影响你的生活 .为了自己的权益,关于工龄的这些事儿,你必须要了解! 1.影响带薪年休假 (1)职工本单位累计工作满1年不满10年的 ...

  4. SIMATIC IT HISTORIAN在烟用二醋酸纤维素生产中应用

    原文转载自:http://www.soft6.com/tech/5/54287.html 本文介绍了西门子MES核心产品SIMATIC IT HISTORIAN实时数据库及客户端工具在流程生产中的具体 ...

  5. About javascript language

    Core http://www.cnblogs.com/leoo2sk/archive/2010/12/19/ecmascript-scope.html function(arguments) fun ...

  6. LFS,编译自己的Linux系统 - 准备分区

    分区 之前在安装ubuntu时已经分好了. 建立文件系统 sudo mkfs –v –t ext4 /dev/sda3 挂载文件系统 sudo mkdir /mnt/lfs sudo mount –v ...

  7. Java的序列化

    1.为啥需要序列化 在Java编程时,一个类被实例化以后,Java虚拟机使得对象处理生存状态,但是当虚拟机关闭后,对象就不复存在了,所以一个对象的生存期不会超过JVM的工作时间,那么如何才能让对象持续 ...

  8. eclipse中使用maven插件的时候,运行run as maven build的时候报错

    -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable a ...

  9. JavaScript -- Window-状态栏

    -----024-Window-状态栏.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=&q ...

  10. 智能家居 &lpar;2&rpar;手机一键自配置APP

    说明 本教程主要记录APP端一键自配置功能+TCP/IP通信 0配套使用单片机烧录 /* 文件名称:smartconfig.ino 功能:ESP8266快速配置功能 作者:www.doit.am 日期 ...