InfluxDB源码阅读之snapshotter服务
操作系统 : 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地址:
欢迎补充
InfluxDB源码阅读之snapshotter服务的更多相关文章
- InfluxDB源码阅读之httpd服务
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 服务模块介绍 源码路径: github.com/influxda ...
- [源码阅读] 阿里SOFA服务注册中心MetaServer(1)
[源码阅读] 阿里SOFA服务注册中心MetaServer(1) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(1) 0x00 摘要 0x01 服务注册中心 1.1 服务注册中心简 ...
- [源码阅读] 阿里SOFA服务注册中心MetaServer(2)
[源码阅读] 阿里SOFA服务注册中心MetaServer(2) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(2) 0x00 摘要 0x01 MetaServer 注册 1.1 ...
- [源码阅读] 阿里SOFA服务注册中心MetaServer(3)
[源码阅读] 阿里SOFA服务注册中心MetaServer(3) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(3) 0x00 摘要 0x01 概念 1.1 分布式一致性 1.2 ...
- 【Dubbo源码阅读系列】服务暴露之远程暴露
引言 什么叫 远程暴露 ?试着想象着这么一种场景:假设我们新增了一台服务器 A,专门用于发送短信提示给指定用户.那么问题来了,我们的 Message 服务上线之后,应该如何告知调用方服务器,服务器 A ...
- 【Dubbo源码阅读系列】服务暴露之本地暴露
在上一篇文章中我们介绍 Dubbo 自定义标签解析相关内容,其中我们自定义的 XML 标签 <dubbo:service /> 会被解析为 ServiceBean 对象(传送门:Dubbo ...
- xxl-job源码阅读二(服务端)
1.源码入口 xxl-job-admin是一个简单的springboot工程,简单翻看源码,可以很快发现XxlJobAdminConfig入口. @Override public void after ...
- Spark源码阅读之存储体系--存储体系概述与shuffle服务
一.概述 根据<深入理解Spark:核心思想与源码分析>一书,结合最新的spark源代码master分支进行源码阅读,对新版本的代码加上自己的一些理解,如有错误,希望指出. 1.块管理器B ...
- netty(一)---服务端源码阅读
NIO Select 知识 select 示例代码 : //创建 channel 并设置为非阻塞 ServerSocketChannel serverChannel = ServerSocketCha ...
随机推荐
- 不同路径II(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。)
示例 1: 输入: [ [0,0,0], [0,1,0], [0,0,0] ] 输出: 2 解释: 3x3 网格的正中间有一个障碍物. 从左上角到右下角一共有 2 条不同的路径: 1. 向 ...
- 关于pycharm中安装第三方库时报错的解决办法(一)
记录自己的生活! 一.事发背景 在pycharm中直接安装第三方库时因为版本问题总是无法安装成功,事情不大,但是很重要. 二.经过 最开始我自己电脑上安装了Python3.6和Python2. ...
- Python并发复习4- concurrent.futures模块(线程池和进程池)
Python标准库为我们提供了threading(多线程模块)和multiprocessing(多进程模块).从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提 ...
- Django 学习第十天——状态保持及表单
状态保持: 1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态 2.客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端存储与会话有关的数据 3.存 ...
- xss小结-从xss平台搭建到csp规则
0x00前言 xss是跨站脚本攻击,利用嵌入js代码达到‘控制’对方浏览器的作用,测试的时候我们是用alert(1)弹窗,而做CTF也好,实际中的漏洞利用也好一般是用xss获取管理员的cookie 0 ...
- vue中的组件
一.自定义组件1.组件命名 A.dom模板在HTML模板中始终使用kebab-case命名组件 <kebab-cased-component> </kebab-cased-com ...
- IDEA中的常用设置
ps:对于开发工具,不同的开发人员有不同的设置喜好,这里介绍的是我个人的配置,不喜勿喷. Appearance:个人喜欢全黑主题,雅黑字体 背景图片, 效果如下,编写代码的时候有个自己喜欢的背景图片, ...
- go defer笔记
1.函数中return xxx非原子指令 2.函数返回过程:先给返回值赋值:再调用defer:最后回到调用函数中 即:返回值 = xxx; defer; return; 3.多个defer调用顺序类似 ...
- $.extends 继承原理
<script type="text/javascript"> function mixs (){ var arg = arguments; var i = 1; ta ...
- linux查看tomcat安装路径
#查看tomcat安装路径 sudo find / -name *tomcat*