操作系统 : 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. 035 控制并发 select * from test1 where id =1 for update 就会对这行加锁了?

    今天在看同事程序的时候,看到这种用法,顺便学习下. 一:理论 1.功能 这个功能是上锁. 上的是一个排它锁,也就是说,其他的事务是可以读取的.但是不能写入或者更新. 二:实践 1.创建表 2.提交一条 ...

  2. 蓝桥杯 剪邮票(dfs枚举 + bfs)

    剪邮票 如图1, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,图2,图3中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不同的 ...

  3. Node.js实现网络编程

    http://www.cnblogs.com/myzhibie/p/4579122.html

  4. DevOps: CLM, RLM, RPM, RPD, BSA, BAA, BMA - WOW!

    1. BMC Release Lifecycle Management (RLM) is our suite targeted at managing and automating applicati ...

  5. OSPF补全计划-2

    想起来几个面试题: 1. OSPF在什么情况下会stuck in Exstart /Exchange状态? 我知道的一个答案是两个端口的mtu不一致.当然整个也不是绝对,因为可以用ip ospf mt ...

  6. 2046 ACM 数学

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2046 思维:与之前有两道题目相似,n可以由n-1和n-2递推过来.f(n)=f(n-1)*1+f(n-2) ...

  7. 通过Quartz 配置定时调度任务:使用cron表达式配置时间点

    Cron官网入口 在后台经常需要一些定时处理的任务,比如微信相关应用所需的access_token,就要定时刷新,官方返回的有效性是7200s,也就是2小时,但是为了保险起见,除了在发现access_ ...

  8. 谈谈canvas的性能优化(主要讲缓存问题)

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! canvas玩多了后,就会自动的要开始考虑性能问题了.怎么优化canvas的动画呢? [使用缓存] 使用缓存也就是用离屏canvas进行预 ...

  9. BZOJ1482 : [Balkan2017]Cats

    若猫和狗中至少有一个出现了$0$次,那么答案显然是$0$,否则若狮子出现了$0$次,那么显然无解. 那么现在至少有一个动物保持原地不同,其它动物恰好移动一次. 如果全部猫都不动而全部狗都动,那么可以贪 ...

  10. Cheapest Palindrome [POJ3280] [区间DP] [经典]

    一句话题意:每个字母添加和删除都相应代价(可以任意位置 增加/删除),求把原串变成回文串的最小代价 Description 保持对所有奶牛的跟踪是一项棘手的任务,因此农场主约翰已经安装了一个系统来实现 ...