解密GaussDB(for Influx)时序洞察
摘要:GaussDB(for Influx)是一款基于华为自研的计算存储分离架构,兼容InfluxDB生态的云原生NoSQL时序数据库,提供一站式时序数据存储、分析、展示功能。其中时序洞察提供了针对时序数据的可视化功能。
本文分享自华为云社区《华为云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 & 华为云时空数据库团队
更多技术文章,关注GaussDB(for Influx)官方博客:
https://bbs.huaweicloud.com/community/usersnew/id_1586596796288328
Lab官网:https://www.huaweicloud.com/lab/clouddb/home.html
产品首页:https://www.huaweicloud.com/product/gaussdbforinflux.html
解密GaussDB(for Influx)时序洞察的更多相关文章
- 揭秘华为云GaussDB(for Influx):数据直方图
摘要:本文带您了解直方图在不同产品中的实现,以及GaussDB(for Influx)中直方图的使用方法. 本文分享自华为云社区<华为云GaussDB(for Influx)揭秘第九期:最佳实践 ...
- 揭秘华为云GaussDB(for Influx)最佳实践:hint查询
摘要:GaussDB(for Influx)通过提供hint功能,在单时间线的查询场景下,性能有大幅度的提升,能有效满足客户某些特定场景的查询需求. 本文分享自华为云社区<华为云GaussDB( ...
- 零距离接触阿里云时序时空数据库TSDB
概述 最近,Amazon新推出了完全托管的时间序列数据库Timestream,可见,各大厂商对未来时间序列数据库的重视与日俱增.阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空数 ...
- RDS、DDS 和 GaussDB 理不清?看这一篇足够了!
当前,华为云提供的数据库服务主要包括三大类:关系型数据库服务,非关系型数据库服务以及数据库工具服务.如下图所示: 关系型数据库和非关系型数据库均可分为开源和自研两大类.其中,自研数据库统一为Gauss ...
- 以数字资产模型为核心驱动的一站式IoT数据分析实践
[摘要] 一个不会直播的云服务架构师,不是一个好的攻城狮! 在这个全民直播的时代 一个不会直播的云服务架构师 不是一个好的攻城狮 3月23日15:00-15:50,华为云IoT物联网数据分析服务架构师 ...
- 日吞吐万亿,腾讯云时序数据库CTSDB解密
一.背景 随着移动互联网.物联网.大数据等行业的高速发展,数据在持续的以指数级的速度增长,比如我们使用手机访问互网络时的行为数据,各种可穿戴设备上报的状态数据,工厂中设备传感器采集的指标数据,传统互联 ...
- 打造“云边一体化”,时序时空数据库TSDB技术原理深度解密
本文选自云栖大会下一代云数据库分析专场讲师自修的演讲——<TSDB云边一体化时序时空数据库技术揭秘> 自修 —— 阿里云智能数据库产品事业部高级专家 认识TSDB 第一代时序时空数据处理工 ...
- 云栖深度干货 | 打造“云边一体化”,时序时空数据库TSDB技术原理深度解密
本文选自云栖大会下一代云数据库分析专场讲师自修的演讲——<TSDB云边一体化时序时空数据库技术揭秘> 自修 —— 阿里云智能数据库产品事业部高级专家 认识TSDB 第一代时序时 ...
- AT89C 系列单片机解密原理
单片机解密简单就是擦除单片机片内的加密锁定位.由于AT89C系列单片机擦除操作时序设计上的不合理.使在擦除片内程序之前首先擦除加密锁定位成为可能.AT89C系列单片机擦除操作的时序为:擦除开始---- ...
- Flash型单片机的加密与解密
厂商利用单片机进行产品开发时,都会关心其代码和数据的保密性.考虑到用户在编写和调试代码时所付出的时间和精力,代码的成本是不言而喻的. 早期的单片机,代码是交给芯片制造商制成掩膜ROM.有两种加密 ...
随机推荐
- 2023 SHCTF-校外赛道 WEB WP
WEEK1 babyRCE <?php $rce = $_GET['rce']; if (isset($rce)) { if (!preg_match("/cat|more|less| ...
- Hooks的核心原理梳理
我们前端都在诟病专业版,它的组件,它的耦合嵌套之深,它的性能. 我们希望改善,我们认为,如果--就好了. 如果重构就好了,如果技术栈统一就好了,如果有规范就好了. 其实,不用等,我们只要在写代码,就可 ...
- DDD技术方案落地实践
1. 引言 从接触领域驱动设计的初学阶段,到实现一个旧系统改造到DDD模型,再到按DDD规范落地的3个的项目.对于领域驱动模型设计研发,从开始的各种疑惑到吸收各种先进的理念,目前在技术实施这一块已经基 ...
- Lyndon 分解
介绍 [模板]Lyndon 分解 #include<cstdio> #include<cstring> char s[5000005]; int main(){ scanf(& ...
- Codeforces Round #704 (Div. 2) A~C题解
写在前边 链接:Codeforces Round #704 (Div. 2) D就不补了,大fst场. A. Three swimmers 链接:A题链接 题目大意: 给定三个游泳者的到达岸边的周期, ...
- NCTF2022-Crypto WP
superecc 题目 from Crypto.Util.number import * from secrets import INF, flag assert flag[:5] == b'nctf ...
- 稳了,终于可以通过外网访问 Sealos 中的数据库了!
喜大普奔,Sealos 中的数据库功能现已全面升级,支持外网访问! 现在你可以从互联网的任何地方访问 Sealos 中的数据库,无论您的应用部署在何种环境,现在都可以轻松通过外网连接到 Sealos ...
- 架构师的知行合一(内容由AI的全文生成,满分100分我打99分)
大型架构是怎么来的 随着科技的不断发展,越来越多的企业和组织开始意识到数字化转型的重要性.为了更好地适应市场的变化,满足客户的需求,提高企业的竞争力,大型架构成为了企业和组织不可或缺的一部分.那么,大 ...
- 可视化学习:WebGL的基础使用
引言 继续复习可视化的学习.WebGL和其他Web端的图形系统存在很大的不同,是OpenGL ES规范在浏览器的实现,它最大的不同就在于它更接近底层,可以由开发者直接操作GPU来实现绘图,性能很好,可 ...
- [ABC281G] Farthest City
Problem Statement You are given positive integers $N$ and $M$. Find the number, modulo $M$, of simpl ...