InfluxDB原理与实战
更新日期:2024-07-13 00:59:56
出版时间:2020-05-01
浏览量:1132
价格:0.0¥

书籍下载

内容介绍

产品特色

编辑推荐

(1)InfluxDB读写性能高、存储压缩率高,生态丰富而强大,直接推动监控技术进入实时、纳秒级的新时代。

(2)本书蕴含了作者构建千亿级大数据监控平台的实战心得和经验总结。

(3)本书与从功能使用、生态、源码分析3个维度全面讲解InfluxDB,包含9个企业级实战案例,100余示例,300余条命令和语法详解。


内容简介

这是一本从原理与实践角度全面讲解InfluxDB的著作,由腾讯监控大数据平台负责人撰写,融入了作者构建千亿级大数据监控平台的工程实践经验。从生态、应用场景、功能使用、源码分析等角度对InfluxDB进行了深入的讲解,包含9个企业级实战案例,100余示例,300余条命令和语法详解,能帮助读者从零开始,彻底吃透InfluxDB的功能和原理,快速晋级为InfluxDB实战专家。

全书一共9章,从结构上分为四个部分:

第一部分 准备篇(第1~2章)

首先,从宏观角度介绍了InfluxDB的发展历程、适应场景、特点、优势以及社区和生态;然后,手把手教读者如何快速在各种环境中搭建InfluxDB生产环境。

第二部分 基础篇(第3~8章)

着重、全面地讲解InfluxDB的核心功能,包括基础操作、连续查询、保留策略、认证授权、集群和可用性、备份管理、节点管理、第三方协议等,并以多个DevOps实战为例,透彻讲解了InfluxDB的原理和实战技巧。

第三部分 实战篇(第9~10章)

分别以基于TICK的DevOps实战和基于InfluxDB、Grafana、Prometheus的DevOps实战为例,讲解了以InfluxDB为核心的企业级监控系统的构建方法。

第四部分 扩展篇(第11章)

着重讲解了InfluxDB的源码编译方法,并采用抛砖引玉的方式,对启动流程、配置模块、HTTP写入和查询流程等进行了源码分析,帮助读者打开探索和研究InfluxDB源码的精彩之门。


作者简介

韩健

资深架构师,现就职于腾讯,担任监控大数据平台技术负责人,曾先后担任创业公司CTO、Intel资深工程师。既对分布式系统、InfluxDB的架构设计和开发有深刻的理解,又在海量服务分布式组件架构设计、高性能架构设计、高质量代码编写等方面有深厚的积累,经验丰富。

在腾讯先后负责了监控大数据平台、QQ后台海量服务分布式组件(微服务开发框架、名字服务、配置中心等)等项目的相关工作。曾经主导和参与了多个高并发分布式系统、Linux内核、高性能网络操作系统等大型项目。

当前专注于下一代具有成本优势的高性能监控大数据平台、海量服务分布式组件、DPDK高性能TCPIP协议栈的创新和研发。

极客时间《分布式算法和协议实战》专栏作者。维护有微信订阅号influxdb-dev。


精彩书评

本书介绍了InfluxDB的使用场景、使用方法以及相关问题的解决方法,可以作为读者了解和使用InfluxDB的参考书。同时,书中提供了多个企业级实战案例的代码解析,对想进一步理解时序数据库实现原理的开发人员也有很高的参考价值。在这本书里,作者分享了自己在腾讯的实战经验,可以帮助读者少走很多弯路。

——朱小平 华为云网络架构师

近两年DevOps得到广泛应用,相应的开源软件栈也层出不穷。然而,大多数投身其中的开发者可能对其技术栈的基础所知甚少,从而陷入盲目的选型和试错。正如作者在序言中所说,本书来源于作者对海量监控平台的技术选型和对InfluxDB进行二次开发的经验总结。书中没有泛泛而谈,而是针对时序中台这一场景进行了有针对性的剖析。

——方家弘 前科恩实验室成员

我们用时序数据库来记录时序数据、追溯过去、监控现在、预测未来。Influx DB是时序数据库中的佼佼者,有着非常优异的性能和可扩展性。韩健基于他对InfluxDB进行二次开发并处理亿级监控平台的经验,对InfluxDB 的原理进行抽茧剥丝,娓娓道来。希望本书可以帮助你打造更加高效、实时的大数据监控平台,帮助企业减少费用、提升业务。

——陈天 ArcBlock研发副总裁

InfluxDB作为时序性数据库的优秀代表,是当代互联网服务生产环境下的核心技术组件,相较于传统数据库系统,InfluxDB的性能高出几倍乃至几十倍,为超大规模业务系统(如5G驱动的IOT系统)的运转提供了关键的底层数据处理能力。当然,在将InfluxDB运用到腾讯的生产环境的过程中,作者所在团队也做出了大量的改进和优化,最终成功打造出一套能够为几十万台服务器提供秒级监控能力的监控平台。在本书中,作者将其在工作中积累的经验和盘托出,这对正在快速成长的中国IT产业具有不可估量的价值。

——严雷 蔷薇灵动创始人兼CEO


目录

前 言

第1章 初识InfluxDB 1

1.1 什么是InfluxDB 1

1.1.1 简介 1

1.1.2 历史和发展 4

1.1.3 使用场景 5

1.1.4 社区和生态 6

1.2 InfluxDB的优势 7

1.3 InfluxDB的特性 9

1.3.1 InfluxDB的特点 10

1.3.2 核心概念 10

1.4 本章小结 11

第2章 InfluxDB入门 12

2.1 InfluxDB在各环境下的安装部署 12

2.1.1 RedHat & CentOS 环境 13

2.1.2 Ubuntu & Debian 环境 15

2.1.3 Mac OS & OS X 环境 17

2.1.4 MS Windows环境 19

2.1.5 二进制软件包安装 21

2.2 InfluxDB软件包程序 22

2.2.1 influx介绍 23

2.2.2 influxd介绍 24

2.2.3 influx_inspect介绍 26

2.2.4 influx_stress介绍 27

2.2.5 influx_tsm介绍 27

2.3 InfluxDB 配置文件 28

2.4 InfluxDB安装部署和基础操作实战 33

2.5 本章小结 37

第3章 写入和查询 38

3.1 操作模式 38

3.1.1 influx命令行模式 39

3.1.2 InfluxDB API模式 46

3.2 写入 48

3.2.1 行协议 48

3.2.2 写入数据 51

3.3 查询 54

3.3.1 InfluxQL 54

3.3.2 查询数据 71

3.4 本章小结 74

第4章 连续查询和保留策略 75

4.1 连续查询 76

4.1.1 连续查询的基础特性 76

4.1.2 连续查询的高级特性 78

4.1.3 管理连续查询 80

4.1.4 连续查询的场景应用 82

4.2 保留策略 84

4.2.1 创建保留策略 85

4.2.2 查询保留策略 87

4.2.3 管理保留策略 88

4.3 DevOps监控的采样实战 89

4.4 本章小结 94

第5章 认证与授权 95

5.1 认证 95

5.1.1 启动认证 96

5.1.2 认证请求 96

5.2 授权 99

5.2.1 账户权限 99

5.2.2 账户管理命令 100

5.3 DevOps监控的权限管理实战 105

5.4 本章小结 109

第6章 集群和高可用 110

6.1 集群简介 111

6.1.1 集群的基本概念 111

6.1.2 集群架构 112

6.2 集群配置 113

6.2.1 准备工作 114

6.2.2 META节点集群配置 116

6.2.3 DATA节点集群配置 120

6.3 Hinted-Handoff 123

6.4 Anti-Entropy 127

6.4.1 Anti-Entropy原理 128

6.4.2 Anti-Entropy命令 129

6.4.3 Anti-Entropy API 130

6.4.4 Anti-Entropy配置 132

6.4.5 Anti-Entropy典型应用场景 134

6.5 本章小结 136

第7章 备份管理和节点管理 137

7.1 备份管理 137

7.1.1 备份 138

7.1.2 还原备份 140

7.1.3 导出数据 143

7.1.4 导入数据 144

7.2 节点管理 145

7.2.1 节点管理相关命令 145

7.2.2 META节点替换实战 149

7.2.3 DATA节点替换实战 153

7.2.4 扩容实战 155

7.3 本章小结 162

第8章 第三方协议 163

8.1 UDP协议 164

8.1.1 UDP协议简介 164

8.1.2 UDP协议基本用法 164

8.2 兼容CollectD 166

8.2.1 CollectD简介 166

8.2.2 CollectD协议的基本用法 167

8.3 兼容Graphite 170

8.3.1 Graphite简介 170

8.3.2 Graphite协议的基本用法 171

8.4 兼容OpenTSDB 175

8.4.1 OpenTSDB简介 175

8.4.2 OpenTSDB协议的基本用法 176

8.5 兼容Prometheus 178

8.5.1 Prometheus简介 178

8.5.2 Prometheus协议的基本用法 179

8.6 本章小结 181

第9章 基于TICK的DevOps监控实战 182

9.1 TICK简介 183

9.2 Telegraf 184

9.2.1 Telegraf简介 184

9.2.2 Telegraf安装部署 186

9.2.3 Telegraf命令 189

9.3 Kapacitor 191

9.3.1 Kapacitor简介 191

9.3.2 Kapacitor安装部署 191

9.3.3 Kapacitor命令 193

9.4 Chronograf 194

9.4.1 Chronograf简介 194

9.4.2 Chronograf安装部署 196

9.4.3 Chronograf命令 198

9.4.4 创建InfluxDB连接 202

9.4.5 创建Kapacitor连接 205

9.5 基于TICK的DevOps监控实战 208

9.6 本章小结 216

第10章 基于InfluxDB、Prometheus、Grafana的DevOps监控实战 217

10.1 Prometheus 218

10.2 Grafana 219

10.2.1 Grafana简介 219

10.2.2 Grafana安装部署 220

10.3 基于InfluxDB、Prometheus、Grafana的DevOps监控实战 225

10.4 本章小结 234

第11章 InfluxDB源码架构剖析 235

11.1 源码编译 236

11.1.1 Golang语言环境配置 236

11.1.2 源码编译安装 237

11.2 启动流程源码剖析 239

11.3 配置模块源码剖析 244

11.3.1 创建示例配置 244

11.3.2 加载配置 246

11.4 HTTP写入流程和查询流程源码剖析 248

11.4.1 HTTP请求处理流程 248

11.4.2 写入流程 254

11.4.3 查询流程 258

11.5 本章小结 265


前言/序言

从2016年起,笔者在腾讯公司负责QQ后台的海量服务分布式组件的架构设计和研发工作,如微服务开发框架、名字路由、名字服务、配置中心等,做了大量分布式架构、高性能架构、海量服务、过载保护、柔性可用、负载均衡、容灾、水平扩展等方面的工作,以公共组件的形式支撑来自QQ后台和其他BG海量服务的海量流量。2018年年底,笔者负责监控大数据平台的研发工作,致力于减少现有监控后台成本,以及支撑内部和外部海量监控数据的需求,打造千亿级监控大数据平台。

笔者发现,当前监控技术领域缺乏优秀的监控系统,尤其是在海量监控数据场景中,很多团队常用的做法是堆服务器和堆开源软件,比如大量采用高配置的服务器,单机近百CPU核数、TB内存、数十TB的SSD存储,安装了大量开源软件,如Elasticsearch、Druid、Storm、Kafka、Hbase、Flink、OpenTSDB、Atlas、MongoDB等,但实际效果并不理想,众多开源软件的组合是在增加了系统的运营成本和数据的处理延迟的情况下解决接入计算,在海量标签和时间序列线情况下,常出现查询超时、数据拉不出来等问题,且成本高昂。

笔者认为,海量或千亿级是整体的量,是个笼统的概念,可以分而治之,通过分集群的方法来解决,海量监控数据的真正挑战在于以下几点:

能否做到实时。实时是种质变的能力,可将一个离线监控平台提升为一个实时决策系统。难点在于能否设计实现高性能的架构,以及能否实现水平扩展等。

分集群后,单个业务的流量大小、标签集多少是关键。流量大,相对容易解决,主要涉及系统性能和水平扩展等。标签集多,海量标签,海量时间序列线,如何做查询优化是挑战,如笔者遇到的一些业务上报的监控数据,有几十个维度的标签,并将QQ号和URL作为标签值,有非常海量的时间序列线。

针对监控数据多写少读、成本敏感的特点,如何设计高效的存储引擎?既能充分发挥硬件性能,又能在高效压缩存储的同时保障查询效率。

为了更好地打造有竞争力的监控系统,我们将技术理念定位为“技术降成本,坚决反对开源软件堆砌”。首先,我们认为云计算是基建,决定它能否成功的关键在于能否在基础技术上突破,打造出相比开源软件更有成本优势的云原生软件;其次,虽然现在开源软件非常繁荣,基于开源软件,我们很容易搭建一个基础系统,将功能跑起来,但绝大部分开源软件侧重的是功能,而不是针对海量监控数据的场景进行设计,或多或少都有其局限性,且成本也非常高昂。因此我们要做的是借助强大的技术和工程能力,直面问题,在架构和源码层面解决它,而不是引入和堆砌更多的开源软件。

出于工程效率的考虑,我们选择基于开源软件进行二次开发,使用开源软件的部分代码,按照我们的想法进行架构设计和功能开发。在对众多的开源软件进行调研分析后,我们最终选择了以InfluxDB源码为基础进行二次开发。之所以选择InfluxDB源码,主要是因为我们对InfluxDB源码背后的技术和工程实力比较认可。InfluxDB研发团队能真正解决海量监控数据场景的问题,也是在认真地打造一款优秀的监控产品(出于读写性能和可用性的考虑,InfluxDB研发团队曾2次重构存储引擎)。

在笔者着手以InfluxDB源码为基础开发集群等功能时,业界还没有团队实现了真正可用的InfluxDB集群能力。一些团队只是通过Proxy实现了负载均衡,却无法突破单机接入计算和存储的限制,缺乏一致性能力。有些团队在对InfluxDB进行了多年的学习和研究后,最终考虑到基于时序分片的复杂度而放弃了基于InfluxDB开发集群能力,转而选择基于RocksDB、Zookeeper等开源软件进行自建。

笔者在3个月内快速开发出了CP和AP架构分离、时序分片、水平扩展等基本集群能力,另外,根据业务的特点,在索引引擎、冷热分离、查询实现、第三方协议、高可用性、可运营性等方面也做了大量的工作。最终的效果也是符合预期的,如从替换现有监控系统后台的实施对比来看,我们用了不到10%的机器成本就支撑起原监控后台所支撑的海量监控数据,成本优势突出。

InfluxDB是一款非常优秀的软件,直接推动监控技术进入了实时、纳秒级的新时代,除了类SQL查询语言、RESTful API等现代特性外,还具有读写性能高、存储压缩率高、生态丰富、功能强大等特性。为了更好地推动监控技术的发展,帮助更多的读者掌握构建实时监控系统的方法和分布式时序型数据库的架构设计与开发技巧,笔者规划了两本书。

第一本就是本书,侧重于InfluxDB的原理和实战,致力于帮助读者完全理解InfluxDB的功能原理并掌握实战技巧。第二本正在筹划中,侧重于InfluxDB的设计实现剖析、分布式技术、InfluxDB集群能力开发实战等。关于第二本书的更多信息和进展,敬请关注微信订阅号“华章书院”。

最后,笔者衷心希望本书能帮助读者更快地掌握InfluxDB的核心特性、功能原理和实战技巧,帮助读者打造更有竞争力的监控产品,赋能业务。

读者对象

系统管理员、运维工程师、网络管理员

开发工程师

数据库技术爱好者

监控技术爱好者

开源软件爱好者

本书特色

不要求读者有InfluxDB的使用经验,而是从零基础开始介绍InfluxDB的功能和实战技巧,通过深入浅出的实战案例让读者更好地掌握InfluxDB。

以写作时的最新稳定版本InfluxDB-v1.7.8为例介绍InfluxDB的功能和原理。

笔者基于最新稳定版的InfluxDB,开发了基于时序分片、水平扩展的InfluxDB集群能力,并在实际场景中落地。所以本书的知识点和案例中也蕴含了大量笔者自身的开发和实战经验。

不仅系统地介绍了InfluxDB,还介绍了InfluxDB生态中常用的原生组件和第三方组件,如Telegraf、Chronograf、Kapacitor、Grafana和Prometheus等。

不仅介绍了InfluxDB的功能和实战,还介绍了InfluxDB的源码编译,并对InfluxDB的几个基础模块进行了源码分析,帮助读者打开探索和研究InfluxDB源码的精彩之门。

如何阅读本书

本书从逻辑上分为四个部分,各部分的主要内容如下:

第一部分为准备篇(第1~2章),简单地介绍了InfluxDB的历史发展、社区生态、优势等背景知识和安装部署、软件包各程序功能等基础知识,并以安装部署DevOps实战为例,帮助读者快速开始使用InfluxDB。

第二部分为基础篇(第3~8章),着重讲解了InfluxDB的核心功能,包括基础操作、连续查询、保留策略、认证授权、集群和可用性、备份管理、节点管理、第三方协议等,并以多个DevOps实战为例,帮助读者全面理解InfluxDB的功能原理并掌握InfluxDB核心功能的实战技巧。

第三部分为实战篇(第9~10章),分别以基于TICK的DevOps实战和基于InfluxDB、Grafana、Prometheus的DevOps实战为例,帮助读者掌握以InfluxDB为核心的企业级监控系统的构建方法和实战技巧。

第四部分为扩展篇(第11章),着重讲解InfluxDB的源码编译方法,并对启动流程、配置模块、HTTP写入和查询流程进行了源码分析,帮助读者打开探索和研究InfluxDB源码的精彩之门。

其中第三部分以接近实战的实例来讲解工程应用,第四部分讲解InfluxDB源码编译和源码分析,相比于前两个部分更为独立。如果你是一名经验丰富的InfluxDB资深用户,能够理解相关的基础知识和使用技巧,那么你可以直接阅读这部分的内容。但是如果你是InfluxDB的初学者,请一定从基础理论知识开始学习。

勘误和支持

除封面署名外,参与本书编写工作的还有朱仪姣。失仪姣编写了第2章和第5章,并作为本书的技术审校,保证了本书的质量。由于时间仓促且水平有限,书中难免会存在疏漏之处,恳请读者朋友批评指正,以期一同学习进步。如果读者朋友对本书有任何意见或建议,请发送到邮箱hanj4096@gmail.com,标题注明“《InfluxDB原理与实战》”,笔者将不胜感激。本书的勘误和后续更新也会在微信订阅号influxdb-dev上与大家分享。

致谢

在本书出版的过程中,笔者得到了很多支持和帮助。

感谢机械工业出版社华章公司的杨福川和张锡鹏老师,感谢你们在这一年的时间里始终支持我的写作,耐心地审阅并指出稿件中的错误和不足,同时给了笔者很多专业性的建议,你们的鼓励和帮助是引导我顺利完成本书的动力。

感谢我的妻子,是她默默地在后方支持着我,使我在工作之余有精力完成本书的撰写。

谨以此书献给我最亲爱的家人,以及众多热爱InfluxDB、监控技术、分布式技术的朋友们!

韩健