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 ...
随机推荐
- CF552 E. Two Teams
题意:给出一串n个数 为1-n的乱序 一共有两个教练 教练一的队伍是1队 二是二队 教练一选择 当前队列中剩余人数的最大序号 将其和左边k个人 和右边k个人 变为一队 如此反复直到所有人 ...
- 2018-03-11 20165235祁瑛《Java程序设计》第二周学习总结
2018-03-11 20165235祁瑛<Java程序设计>第二周学习总结 教材学习内容总结 第二章要点: 在这一章中我学到了很多东西: (1)布尔类型boolean,布尔类型的赋值只能 ...
- CentOS7 中文man(cman)配置方法
1. 下载中文man包 http://pkgs.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5.1.tar.gz/13275fd ...
- Knn:Knn实现对150朵共三种花的实例的萼片长度、宽,花瓣长、宽数据统计,根据一朵新花的四个特征来预测其种类
from sklearn import neighbors from sklearn import datasets knn = neighbors.KNeighborsClassifier() ir ...
- UVa11988 Broken Keyboard 损坏的键盘【list】
题目链接:https://vjudge.net/problem/UVA-11988 题目大意: 键盘的home键和end键出现了问题. 在输入一段文本时,home键或end键可能会自动被按下,home ...
- BUG总是存在的
遇到了一个Bug 前段时间,添加功能的时候,在其他页面的Html中(django)的python调用{{}}中不小心按多了一个空格. 这导致这个值在读取的时候,读取多了一个空格:split的时候,多分 ...
- QLayout: Attempting to add QLayout XXX to XXX, which already has a layout
QLayout是Qt应用开发中一个非常重要的组件,然而平时使用的时候不小心经常会发现控制台有类似如下的警告: QLayout: Attempting to add QLayout "&quo ...
- Newtonsoft.Json日期转换
在使用EasyUI做后台时,使用表格datagrid,用Newtonsoft.Json转换为Json格式后,时间显示为2013-06-15 T00:00:00形式. 后来研究了一下Newtonsoft ...
- php文件及文件夹操作(创建、删除、移动、复制)
<?php /** * 操纵文件类 * * 例子: * FileUtil::createDir('a/1/2/3'); 测试建立文件夹 建一个a/1/2/3文件夹 * FileUtil::cre ...
- jmeter时间格式化
jmeter时间格式化 #17位时间取到毫秒 ${__time(yyyyMMdd-HHmmssSSS,)} #10位时间戳 ${__time(/1000,)} yyyyMMddHHmmss yyyy年 ...