Flux (原 IFQL) v0.0.3 发布

导航至

Flux (原 IFQL) 团队每两周发布一个新版本。我们希望尽快将我们的更改送到社区手中,以便尽早听到您的体验。请在 repo 上提交问题和 PR。查看 Flux 发布公告,了解 Flux 背后的愿景详情。

在过去的两周里,我们专注于性能和资源管理(即管理 CPU 和内存资源,以便单个查询不会使 Flux 进程不堪重负)。

基准测试

我们整理了比较 Flux 和 InfluxQL 的基准测试。这些基准测试很早就已到位,以便我们能够确保在未来继续保持强大的性能。以下是一些初始图表,显示了 Flux 与等效 InfluxQL 查询的比较。

已在两个系统1上运行了五个代表性查询。要查看基准测试的详细信息,请查看 PR。

以下是五个查询

查询 #1

IFQL - from(db:"db").range(start:2017-11-01T00:00:00Z, stop:2017-11-02T00:00:00Z).filter(exp:{"_measurement" == "m0" and "_field" == "v0" and $ > 0}).sum()
InfluxQL - SELECT sum(v0) FROM m0 WHERE time >= 2017-11-01T00:00:00Z AND time < 2017-11-02T00:00:00Z AND v0 > 0 GROUP BY *

查询 #2

IFQL - from(db:"db").range(start:2017-11-01T00:00:00Z, stop:2017-11-05T00:00:00Z).filter(exp:{"_measurement" == "m0" and "_field" == "v0" and $ > 0}).sum()
InfluxQL - SELECT sum(v0) FROM m0 WHERE time >= 2017-11-01T00:00:00Z AND time < 2017-11-05T00:00:00Z AND v0 > 0 GROUP BY *

查询 #3

IFQL - from(db:"db").range(start:2017-11-01T00:00:00Z, stop:2017-11-05T00:00:00Z).filter(exp:{"_measurement" == "m0" and "_field" == "v0" and $ > 0}).group(by:["tag0"]).sum()
InfluxQL - SELECT sum(v0) FROM m0 WHERE time >= 2017-11-01T00:00:00Z AND time < 2017-11-05T00:00:00Z AND v0 > 0 GROUP BY tag0

查询 #4

IFQL - from(db:"db").range(start:2017-11-01T00:00:00Z, stop:2017-11-13T00:00:00Z).filter(exp:{"_measurement" == "m0" and "_field" == "v0" and $ > 0}).sum()
InfluxQL - SELECT sum(v0) FROM m0 WHERE time >= 2017-11-01T00:00:00Z AND time < 2017-11-13T00:00:00Z AND v0 > 0 GROUP BY *

查询 #5

IFQL - from(db:"db").range(start:2017-11-01T00:00:00Z, stop:2017-11-13T00:00:00Z).filter(exp:{"_measurement" == "m0" and "_field" == "v0" and $ > 0}).group(by:["tag0"]).sum()
InfluxQL - SELECT sum(v0) FROM m0 WHERE time >= 2017-11-01T00:00:00Z AND time < 2017-11-13T00:00:00Z AND v0 > 0 GROUP BY tag0

首先,让我们看一下执行时间,因为在考虑查询引擎的性能时,执行时间是最重要的。

对于大多数查询,Flux 已经比 InfluxQL 更快。请注意,查询 #4 未使用 InfluxQL 完成,因此没有时间。我们已经打开了一个 issue,应该可以改进查询 #5。

接下来,检查进程的堆使用情况,我们可以看到 Flux 在其使用方面效率更高。

与 InfluxQL 的堆使用情况相比,两个 ifql 进程的堆使用情况几乎可以忽略不计。请注意,有两个 ifql 进程,ifqld 可以是任意数量的 sidecar 进程,以及启用新 IFQL API 的 influxd。

资源管理

在 v0.0.3 版本中,现在可以限制查询消耗的资源。我们的目标是确保,首先,一个非常消耗资源的查询不会使进程崩溃;其次,消耗资源的查询将根据其优先级与其他并发查询公平地共享资源。

现在有了这些限制,尝试消耗过多内存的错误查询将被终止,并返回相应的错误,而不是允许查询使进程崩溃。

我们还运行了比较 v0.0.2 和 v0.0.3 的测试。该测试提交的查询多于进程拥有的资源。然后,我们比较了查询的执行时间,发现 v0.0.3 将总体执行时间缩短了 15%。这是通过对工作进行排队和调度来实现的,而不是让所有查询同时争夺资源。由于排队,v0.0.3 中的长尾延迟增加,但我们计划稍后解决该问题。

总的来说,v0.0.3 是一个可靠的迭代版本,我们将在两周后再次与您见面,发布另一个版本。有关所有更改的完整列表,请参阅 CHANGELOG。

脚注

[1] 请注意,InfluxDB master 现在有一个 Prometheus “/metrics” 端点,我们用它来收集这些统计信息。我们还使用了一个新工具 ingen 来创建测试数据集。