操作系统 : 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 ...
随机推荐
-
Java位运算总结-leetcode题目
按位操作符只能用于整数基本数据类型中的单个bit中,操作符对应表格: Operator Description & 按位与(12345&1=1,可用于判断整数的奇偶性) | 按位或 ^ ...
-
机器学习笔记:Gradient Descent
机器学习笔记:Gradient Descent http://www.cnblogs.com/uchihaitachi/archive/2012/08/16/2642720.html
-
工龄居然这么有用![Reprint]
工龄有多重要?你恐怕未必知道,别以为没啥大不了,事实上,工龄会从各方面影响你的生活 .为了自己的权益,关于工龄的这些事儿,你必须要了解! 1.影响带薪年休假 (1)职工本单位累计工作满1年不满10年的 ...
-
SIMATIC IT HISTORIAN在烟用二醋酸纤维素生产中应用
原文转载自:http://www.soft6.com/tech/5/54287.html 本文介绍了西门子MES核心产品SIMATIC IT HISTORIAN实时数据库及客户端工具在流程生产中的具体 ...
-
About javascript language
Core http://www.cnblogs.com/leoo2sk/archive/2010/12/19/ecmascript-scope.html function(arguments) fun ...
-
LFS,编译自己的Linux系统 - 准备分区
分区 之前在安装ubuntu时已经分好了. 建立文件系统 sudo mkfs –v –t ext4 /dev/sda3 挂载文件系统 sudo mkdir /mnt/lfs sudo mount –v ...
-
Java的序列化
1.为啥需要序列化 在Java编程时,一个类被实例化以后,Java虚拟机使得对象处理生存状态,但是当虚拟机关闭后,对象就不复存在了,所以一个对象的生存期不会超过JVM的工作时间,那么如何才能让对象持续 ...
-
eclipse中使用maven插件的时候,运行run as maven build的时候报错
-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable a ...
-
JavaScript -- Window-状态栏
-----024-Window-状态栏.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=&q ...
-
智能家居 (2)手机一键自配置APP
说明 本教程主要记录APP端一键自配置功能+TCP/IP通信 0配套使用单片机烧录 /* 文件名称:smartconfig.ino 功能:ESP8266快速配置功能 作者:www.doit.am 日期 ...