操作系统 : 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(一)---服务端源码阅读

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

随机推荐

  1. Eclipse 无输出,但不报错

    解决方法: 若界面中都没有console选项,则 工具栏 Window - Show View - Console Window - Preferences - Run/Debug - Console ...

  2. 2、Qt Project之鼠标事件监控

    鼠标事件监控: 对于鼠标时间监控的相关操作,我们在简历工程的时候需要选择的是QWidget基类,不选择QMainWindow基类,如下所示: Base class:QWidget Step1:我们首先 ...

  3. VDOM总结

    https://segmentfault.com/a/1190000016129036

  4. GYM 101755 K.Video Reviews 【贪心】+【二分】

    <题目链接> 题目大意: 一家公司想让n个人给他们的产品评论,所以依次去找这n个人,第i个人会评论当且仅当已经有ai个人评论或他确实对这个产品感兴趣,但是这n个人都不对这个产品感兴趣,问这 ...

  5. UVa 679 - Dropping Balls【二叉树】【思维题】

    题目链接 题目大意: 小球从一棵所有叶子深度相同的二叉树的顶点开始向下落,树开始所有节点都为0.若小球落到节点为0的则往左落,否则向右落.并且小球会改变它经过的节点,0变1,1变0.给定树的深度D和球 ...

  6. Django之win7下安装与命令行工具

    Django之win7下安装与命令行工具 下载安装 pip3 install django 注意:自动添加环境变量 测试是否安装成功 1.输入python 2.输入import django 3.输入 ...

  7. BZOJ-1- 4868: [Shoi2017]期末考试-三分

    三分出成绩时间,假设当前出成绩最优,那么提前就会调增老师,增加不愉快度多于少等待的:如果延迟时间. 那么等待更久,增加的不愉快度也将多余少调增剩省下的. 于是:对于当前点,两边都是有单调性的. 就是说 ...

  8. php curl函数采集网页出现gzip压缩、编码不同导致的乱码 图文解决方法

    方法一: header("content-type:text/html;charset=utf-8");$url="http://115.47.116.10/rest/k ...

  9. 理解Session缓存

    session的缓存有两大作用 (1)减少访问数据库的频率.应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,音系Session的缓存 可以提高数据库访问性能 (2)保证缓存中 ...

  10. (转)java程序员进入名企需要掌握哪些,立一个flag

    想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,在面试之前到底需要准备哪些东西呢?面试时面试官想了解你的什么专业技能,以下都是一个合格Java软件工程师所要具备的. 一.专业技能 熟练的 ...