InfluxDB 2.0 Alpha 版本发布及未来展望
作者:Paul Dix / 公司, 产品
2019年1月23日
导航至
今天,我们发布 InfluxDB 2.0 的首个 Alpha 版本。我们对 2.0 的愿景是将 TICK Stack 整合为一个连贯且一致的整体,将时间序列数据库、UI 和仪表板工具以及后台处理和监控代理集成到一个单一的 API 之下。从 1.x 系列到 2.0 的转变代表了自 2013 年我们启动 InfluxDB 以来产品最大的演变。在这篇文章中,我将介绍我们尝试通过 InfluxDB 和 Flux 的 2.x 系列实现的目标,我们为什么要以目前的方式构建它,以及 2.0 版本的开发过程,包括 Alpha、Beta 以及最终的正式发布阶段。
如果您想跳过历史和更高层次的目标,直接开始试用,请查看我们的入门指南,其中包含安装和设置说明以及 Flux 的文档。我们非常希望在我们的社区网站的 influxdb2 类别下听到您的反馈。或者,如果您正在寻找更像产品的演练,请查看 Russ Savage 关于发布的博客文章。
Flux,一种新语言
InfluxDB 2.0 最重要的部分之一是 Flux,我们新的数据脚本和查询语言。在回顾了多年来的功能请求、社区问题以及关于我们当前的查询语言 InfluxQL 和用于 Kapacitor 的语言 TICKscript 的问题之后,我们决定构建一种新语言。从设计目标来看,Flux 应该:
- 支持驱动图形用户体验的语言服务,以便用户无需学习实际语言即可完成更多工作。Flux 的设计应该比我们使用其他语言选择更容易实现这一点。
- 设计用于跨不同数据源集成。这些数据源可以是其他数据库、第三方 API、文件系统或数据存在的任何地方。与其他系统的集成是核心语言设计特性。
- 能够交叉编译。在许多不同的语言中都可以处理时间序列,例如 InfluxQL、PromQL、Flux 等。我们希望它在一个单一的优化器上工作,该优化器可以针对许多不同的源进行计划。合理的开发人员可能会对语言选择持有不同意见,我们希望拥抱更广泛的生态系统来处理数据。
- 除了支持多种查询语法外,Flux 还必须与其他分析工具和环境无缝集成。这包括与 Jupyter 集成,并使用 Apache Arrow 作为底层数据交换格式,以便它可以与其他大数据分析系统集成。
- Flux 是一种第四代编程语言,专为数据脚本、ETL、监控和警报而设计。它不仅仅是一种查询语言,但它不仅仅是一种编程语言。它包括一个计划器和优化器。它应该在查询和编程之间实现无缝衔接,将它们组合成一个单一且一致的整体。
所有这些都导致了一些结果。首先,Flux 将是图灵完备的,并且不仅对查询和处理时间序列数据有用,而且对处理一般数据也很有用。在接下来的几个月中,我们将详细介绍如何创建这些连接器,并将它们与查询计划器和优化器配对,以转换 Flux 查询以使用每个数据存储的独特功能。同时,您可以访问我们社区网站的 Fluxlang 版块,告诉我们您希望首先看到哪些连接器。
对于此版本,我们专注于针对嵌入式 InfluxDB 2.0 数据存储的查询能力。长期以来的功能请求,如跨度量进行数学运算、Top N、时间偏移、按字段分组以及按值排序,在最初的 Alpha 版本中都已成为可能。创建一种新语言和一个新的查询引擎是一项艰巨而重要的任务,但这项努力开始在我们可以添加的新功能数量上获得回报。事实上,向语言添加新功能再容易不过了。例如,您可以查看 count 的实现方式。Flux 代码库的主要设计目标是使其易于外部贡献者添加新函数,就像我们在 Telegraf 中使用输入函数一样。
我们将 Flux 保留为与 InfluxDB 分开的存储库,因为该语言将作为开源项目拥有自己的生命周期,无论您是否使用 InfluxDB,它都很有用。为此,我们选择了宽松的 MIT 许可证,我们将接受拉取请求,以将 Flux 与各种第三方系统集成,即使它们与 InfluxDB 存在竞争关系。这反映了我们围绕 Telegraf 贡献的理念,Telegraf 不仅被 InfluxDB 用户广泛使用,而且还被 Microsoft、DataDog、SignalFX、Wavefront 等其他公司的客户广泛使用。接受邀请竞争的连接器的原因是相当简单的:我们认识到 Telegraf 的价值是由其输入插件驱动的,如果每个人都可以将其用作他们的收集器,那么它将吸引更大的社区贡献插件,这也使 InfluxDB 用户受益。在过去的 3 年半中,我们已经看到这种情况发生,Telegraf 现在拥有 200 多个插件,其中大部分由社区(包括竞争对手)贡献,并且社区贡献和使用水平超过了 InfluxDB 本身。它是我们基于使用情况和社区贡献的最受欢迎的开源软件。
TICK 正在整合为一个统一的整体
TICK Stack 是我们对构成 InfluxData 平台的组件集的称呼。按顺序,它代表了四个组件,用于解决时间序列数据问题:Telegraf,我们的数据收集器;InfluxDB,我们的时间序列数据库;Chronograf,我们的可视化 UI;以及 Kapacitor,我们的处理和监控服务。这些组件的当前形式是公司随着时间推移而发展壮大的产物。
我在 2014 年在为 Influx 筹集 A 轮融资时萌生了 TICK 组件的想法。当时的推介非常简单:时间序列是一种基础级别的抽象,可用于解决许多问题,我们正在构建一个用于处理时间序列数据的平台。换句话说:许多数据问题实际上是时间序列数据问题,我们将帮助人们解决这些问题。我们有一个原型数据库,现在我们需要聘请开发人员和设计师来完成这项工作并构建其他三个组件。在 2015 年和 2016 年期间,我们聘请了团队开始构建这些组件,最初的 Telegraf 版本于 2015 年 6 月发布,Kapacitor 于 2015 年 11 月发布,InfluxDB 1.0 于 2016 年 9 月发布,以及重新启动的 Chronograf 于 2016 年 11 月发布。
在那段时间里,我们更多地了解了人们如何使用该平台以及他们经常遇到的问题类型。对于 InfluxQL,有大量的特性请求,我们根本找不到一种优雅的方式来添加该语言。Kapacitor 目前被大约 13% 的 InfluxDB 用户使用。我们经常听到用户提到 TICKscript 难以学习且难以调试,但对于那些完成了学习之旅的用户来说,他们通常认为它是一个杀手级应用。Chronograf 被大约 20% 的 InfluxDB 用户使用。在 InfluxDB 的早期,我们将 UI 作为数据库的一部分提供。当时将所有 UI 放入 Chronograf 的举动引起了争议,我们现在意识到,如果我们只是将该 UI 作为数据库的一部分提供,则可以呈现更好的用户体验。
许多这些因素促成了 Flux 的创建,这是一种新语言,用于交付我们在 InfluxQL 中无法解决的长期存在的查询功能请求。作为一种语言,Flux 看起来比 TICKscript 熟悉得多,这是一个经过深思熟虑的语言设计选择。将 Flux 作为交互式即席查询和后台处理的语言,将使开发工具来帮助用户调试和查看其监控、警报和 ETL 任务中发生的情况变得更加容易。
另一个主要的推动力是创建一个统一的 API,用于整个平台。它内置了旨在使 InfluxDB 成为多租户时间序列服务的概念。由于所有这些组件,InfluxDB 实际上不仅仅是一个数据库。它是一个监控系统,一个仪表板引擎,一个分析服务,一个事件和指标处理器。随着 Flux 功能的扩展,InfluxDB 的功能和范围也将随之扩展。
Telegraf 继续在 InfluxDB 之外拥有自己的生命周期,但我们将在 InfluxDB 2.0 中添加 API 以供 Telegraf 与其集成。Alpha 版本中提供的一个示例是,我们现在拥有一个用户界面,用于创建 Telegraf 配置,Telegraf 可以直接从 InfluxDB 中提取配置。
推和拉合二为一
InfluxDB 2.0 的另一个重要部分是我们对 Prometheus 指标暴露格式的一流支持。InfluxDB 2.0 可以充当指标抓取器,并且初始入门体验可以选择设置抓取本地 InfluxDB 服务器的指标。借助 InfluxDB 2.0,我们开箱即用地支持推和拉模型。最终,我们还将开箱即用地支持通过 PromQL 进行查询。
未来工作
我们希望发布此早期版本供社区用户试用并向我们提供反馈。在我们准备进入 Beta 阶段之前,还需要完成一些缺失的核心功能。我们仍然需要添加兼容性(能够通过 InfluxQL 和 1.x API 查询 InfluxDB 2.0),并能够像写入 1.x 服务器一样写入 InfluxDB 2.0。我们还需要添加备份和恢复、批量数据导入和导出以及数据删除功能。
这些功能中的大多数代表了较低级别的 API 工作。随着我们完成这些工作,UI 团队将能够根据用户反馈快速迭代,以添加更多用户面对的功能,这些功能可以构建在核心 2.0 API 之上。我们计划从 2 月的第一周开始每周发布版本化的 Alpha 构建版本。一旦我们获得了最少的功能集,我们将进入该项目的 Beta 阶段。在 Beta 期间,我们将进行额外的错误修复、性能测试和其他运营准备活动。Alpha 构建版本并非旨在测试性能,而是更多地用于提供有关 UI 和 API 的反馈。
整个 InfluxDB 2.0 API 均基于此 Swagger 文件进行文档记录和实施。一旦我们进入该项目的 Beta 阶段,API 应该是稳定的,只有增量更改。我们仍然需要将 TICKscript 的所有功能添加到 Flux 中,这将使 Tasks 对监控和警报工作负载非常有用。我们还必须创建一个 TICKscript 到 Flux 的转换器,以帮助 Kapacitor 用户迁移到 InfluxDB 2.0。
这绝对是一个早期版本,我们计划在 InfluxDB 2.x 系列版本的过程中做更多的事情。这将为我们未来几年以 Flux 为核心构建模块的持续创新奠定基础。
我们还在构建新的 InfluxData Cloud 产品,它将是 InfluxDB 2.x API 的完全托管和托管版本。它将具有基于使用量的定价,类似于您在其他完全托管的多租户服务中看到的价格。我们很快会发布更多关于此消息。
我们需要您的反馈!
这仅仅是持续开发和公开迭代的旅程的开始。请查看我们的入门指南,其中包含安装和设置说明以及 Flux 的文档。我们非常希望在我们的社区网站的 influxdb2 类别下听到您的反馈。有关更多产品演练,请查看 Russ Savage 关于发布的博客文章。
我很乐意听到您的声音,所以请随时在 Twitter 上 @ 我或提交到 HN,我会在那里评论。