写点什么

解密 GaussDB(for Influx) 时序洞察

  • 2022 年 3 月 18 日
  • 本文字数:3857 字

    阅读完需:约 13 分钟

本文分享自华为云社区《华为云GaussDB(for Influx)揭秘第三期:解密GaussDB(for Influx)时序洞察》,作者: 高斯 Influx 官方博客。

背景

GaussDB(for Influx)是一款基于华为自研的计算存储分离架构,兼容 InfluxDB 生态的云原生 NoSQL 时序数据库,提供一站式时序数据存储,分析,展示功能。其中时序洞察提供了针对时序数据的可视化功能。

在监控领域,我们经常见到绚丽的监控大屏,实时反映整个系统运行情况,就是监控看板功能。通过监控看板,可以高效的运用监控数据辅助定位故障、性能调优、容量规划;可以查看各产品的监控数据走势及对比;可以跨产品展示关键指标的实时数据、历史数据和整体走势。业务人员可以根据该信息对业务进行及时调整。

监控看板系统的特点和挑战

看板功能极大的提升了业务的分析和运维的效率,包括可视化的展示多个监控指标的走势,展示多个设备某一监控指标的聚合数据;跨设备展示关键指标,掌握不同设备之间关键指标的对比和变化;可自定义设置数据样式,数据自动刷新等等。比如下图是对于服务器的监控包括,虚拟机的内存、CPU、磁盘、IO 等指标进行可视化展示:



在使用过程中存在以下几个痛点:

查询并发大

随着物联网,车联网,数据中心等规模不断扩大,需要监控的指标数据量迅速增长,业务的运维和监控压力不断增大;有时候一个看板需要整面墙来展示,需要同时展示上千指标的实时变化情况。而每次看板上指标的更新背后就是对数据库进行一次查询;以华为云监控为例,华为云目前提供了 200+的各种服务,每个服务都有上万个实例需要监控;比如数据库服务,就有近 10 万个实例需要监控;每个实例都会监控多个指标信息,例如 CPU,内存,磁盘使用率,磁盘读写 IO,网络出口流量,入口流量,TCP 链接等基本信息,还有包括 TPS,QPS,缓存命中率,主从延迟,慢查询,锁状态,链接数,读写延迟,读写并发等数据库特有的信息,总计有 50 多个基础指标需要监控。因此华为云监控业务当前基础的服务需要每次查询超过 20000 个查询语句,这些查询每分钟下发一次;

传统的 zabbix,prometheus,druid 等监控工具已经无法满足业务的需求,其多数只有单机版部署能力,处理能力和扩展能力有限。

查询时延要求低

在运维监控场景下,需要实时关注业务的变化情况,因此看板的刷新频次一般是秒级,这就要求所有的查询必须在秒级甚至毫秒级内完成,由于监控数据量庞大,时间线数量多,加之查询并发大,如何满足查询时延的要求,是时序数据库共同面临的一个技术挑战。

而现有产品大多数在批量查询场景下,查询延迟大;例如开源版的 InfluxDB 针对批量的查询,在内部也是串行执行的,这样总体的查询返回时间基本上在秒级别以上。OpenTSDB 只有在 rowkey 上有索引,在多维查找时只能 scan,延迟非常高。

GaussDB(for Influx)在监控看板中的优势

在云计算,物联网,车联网等大规模业务场景下,监控系统不仅仅只是反馈当前业务状态,还要提供故障预测,告警预测,性能调优,资源容量规划,自动化运维等高级功能;业界也涌现出一些专门针对时序数据进行存储,分析和展示的产品;当前大多数自建监控看板的实现是基于 prometheus 和 Grafana 等不同开源组件来搭建,而 GaussDB(for Influx)提供数据存储、分析、可视化一站式功能。



GaussDB(for Influx)通过实现 Hint 查询,rollupcache,批量查询优化等功能。有效降低了查询时延。下面是针对几种常见查询和企业版 influxdb 的时延对比。

预设数据为:

时延对比:



如图所示,在常见的查询模型中 GaussDB(for Influx)查询时延明显优于企业版的 influxdb,特别是在带有聚合算子的查询中时延只有企业版 influxdb 的十分之一。接下来详细介绍下 Gaussdb(for Influx)针对看板场景所做的具体优化工作。

Hint 查询方式

GaussDB(for Influx)内部支持倒排索引,大部分监控场景的查询性能和效率得到了很大的提升。但是在大批量查询的场景下,还是无法实现毫秒级的查询性能要求。查询语句按照涉及的时间线可以分为单时间线查询和多时间线查询;单时间线查询是指,查询条件可以唯一确认一个时间线的查询;在看板场景中经常会用这类查询,比如查询某台设备的 CPU 指标。针对单时间线数据查询,GaussDB(for Influx)设计了 Hint 功能。



常规的查询都是解析查询语句后,通过倒排索引的功能查找到具体的数据分布位置,再依据这些信息去 store 层读取具体的数据,而 GaussDB(for Influx)的 Hint 功能允许客户在执行单时间线查询时不用通过倒排索引去查找,而是直接能获取到具体数据的分布位置,从而直接去 store 层读取数据,这一功能大大降低查询的时延。

下图为 hint 查询和非 hint 查询的时延对比,测试条件为:300 万时间线,单时间线查询;执行查询 1000 次平均时延。



图中明显可以看出,在单时间线查询场景下,hint 查询时延明显优于非 hint 查询。

rollupcache

在监控看板业务场景下,每次数据更新时下发的都是同样的查询语句,只是时间上的差异。



例如上图展示的一个监控 CPU 指标的看板,每次刷新时间为 10s,每次展示 15 分钟的数据,假设第一次查询时间是 15:00:00 ~ 15:15:00 之间的数据,等到 10s 刷新之后,第二次下发的查询时间为 15:00:10 ~ 15:15:10 之间的数据。可以发现,其实看板每次下发的查询数据,90%以上都是重复数据,因此 GuassDB(for Influx)实现了 rollupcache 功能。



1.接受查询 SQL;

2.查找对应的索引;

3.如果 rollupcache 中有存储数据,则直接从 rollupcache 中读取;

4.从 rollupcache 中返回数据;

5.如果 rollupcache 中没有,或者只有部分数据,缺少的数据从 store 中读取;

6.从 store 获取数据;

7.结果返回给客户。

rollupcache 功能会缓存之前的查询结果,新的查询执行时,会优先判断是否命中缓存结果,如果全部命中,则直接返回;如果部分命中,则对未命中部分进行常规查询,将结果返回;如果完全没有命中,则等同于常规执行。这种直接使用缓存数据的方式极大的提高了查询的性能,特别适合于监控看板这种查询语句几乎不变的场景。

针对常用的聚合算子,在 300 万时间线数量下,执行 1000 次查询,rollupcache 功能和非 rollupcache 功能的查询平均时延对比如下图:



从上图可以看出 rollupcache 功能将时延降低了 10 倍左右。

批量查询优化

很多场景下用户业务需要下发大量查询语句,在一些开源产品中并不支持批量查询,或者只是部分支持。比如,在开源的 InfluxDB 中,支持批量发送查询语句,但是在数据库内部,却是串行处理这些批量发送过来的查询请求,导致批量查询的性能没有真正释放出来。

GuassDB(for Influx)提供了针对批量查询的并发查询能力,每个 batch 所包含的查询语句在内核中可以并发执行。同时提供了相关参数,可以控制查询的并发量,可以根据业务的具体场景和机器资源进行调整,既满足了业务的查询性能,也不会因为查询占用过多资源影响其他业务。

使用 GaussDB(for Influx)时序洞察功能

如何快速开通看板功能,可参考 GaussDB(for Influx)的时序洞察部分:

https://support.huaweicloud.com/influxug-nosql/nosql_02_0123.html

开通后就可以使用看板功能了。

创建看板

GaussDB(for Influx)支持的时序洞察功能操作非常便捷,点击 Dashboards 中的 Create Dashboard 按钮就可以创建一个空的看板。



创建成功后,点击 Add Data 就可以创建需要关注的指标了。

添加自定义指标

点击 Add Data 后,会跳转到如下图所示的界面:



图表上显示的数据是依据业务设置的查询语句返回的数据,查询语句支持 InfluxQL 和 Flux。例如上图中 CPU 的指标对应的查询语句。

SELECT mean("schema_sys001_cpu_usage") FROM "DBS_INFLUXDB_OPS_METRIC"."autogen"."INFLUXDB" WHERE time > :dashboardTime: AND time < :upperDashboardTime: AND "schema_nodeId" = :nodeId: GROUP BY time(1m),  "schema_nodeId" fill(null)
复制代码

也可以将多个数值放在同一个图表中进行对比,查询语句的写法可参考下图:



SELECT mean("usage_system") AS "system", mean("usage_user") AS "user", mean("usage_idle") AS "idle" FROM "telegraf"."autogen"."cpu" WHERE time > :dashboardTime: AND time < :upperDashboardTime: AND "cpu"='cpu-total' AND "host"='ecs-c8ad-xie' GROUP BY time(:interval:) FILL(null)
复制代码

也可以通过 group by 语句分开,例如可以分别观察 CPU0 和 CPU-total 的指标,如下图:



SELECT mean("usage_system") AS "system", mean("usage_user") AS "user", mean("usage_idle") AS "idle" FROM "telegraf"."autogen"."cpu" WHERE time > :dashboardTime: AND time < :upperDashboardTime: AND ("cpu"='cpu-total' OR "cpu"='cpu0') AND "host"='ecs-c8ad-xie' GROUP BY time(:interval:), "cpu" FILL(null)
复制代码

其核心在于查询语句的写法。

也可以进行展示图形的设置,选择下图中 Visualization 按钮,就可以看到如下界面:



可以选择设置数据展示类型,调整图形的颜色,例如可以把图形设置成 Step-Plot 方式,如下图:



设置完成后点击右上角保存就可以在看板中看到了,如下图的 CPU Usage 就是我们上面步骤添加的指标项:



其他功能

GaussDB(for Influx)的时序洞察还支持,权限管理、分析任务管理、告警管理,指标预测等功能。

总结

GaussDB(for Influx)是一款基于计算存储分离架构,兼容 InfluxDB 生态的云原生时序数据库。在云计算平台高性能,高可靠,高安全,可弹性伸缩的基础上,提供时序数据的存储、分析、展示功能,同时具有高写入性能、灵活扩容、高压缩率和高查询性能等特点。

同时 GaussDB(forInflux)通过实现 Hint 功能,rollupcache 功能,以及并发查询的能力,有效的降低了大批量查询的时延,满足了大规模监控看板的业务需求。


本文作者:华为 云数据库创新 Lab & 华为云时空数据库团队


点击关注,第一时间了解华为云新鲜技术~​

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
解密GaussDB(for Influx)时序洞察_Influxdb_华为云开发者社区_InfoQ写作平台