购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

前言

为何写作本书

从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、监控技术、分布式技术的朋友们!

韩健 CHXzYjeKi2BBKHR08H3oxSCqVIsinoDzGI3XdlzcfQshq5i0X4IjRpE2vvf/rD3e

点击中间区域
呼出菜单
上一章
目录
下一章
×