阿里云InfluxDB的正确使用姿势

简介: 阿里云InfluxDB介绍 阿里云InfluxDB®专注于处理高写入和查询负载的时序数据,用于存储大规模的时序数据并进行实时分析,包括来自DevOps监控、车联网、智慧交通、金融和IOT传感器数据采集,目前可以在阿里云官网开通购买基础版和高可用版实例。

阿里云InfluxDB介绍

阿里云InfluxDB®专注于处理高写入和查询负载的时序数据,用于存储大规模的时序数据并进行实时分析,包括来自DevOps监控、车联网、智慧交通、金融和IOT传感器数据采集,目前可以在阿里云官网开通购买基础版和高可用版实例。
商业化一年多来,积累了宝贵的使用经验,产品的性能和功能也经过打磨,逐步走向稳定,提供给用户最全面的服务。目前已经获得了一定数量客户的肯定。前面,我们在博客中向用户介绍了阿里云InfluxDB的技术内幕和使用实践,如:<阿里云InfluxDB技术内幕>,<5分钟快速完成监控系统搭建之实践篇>,<一条命令完成k8s监控采集>,<阿里云InfluxDB®高可用设计>等。为了帮助用户更好地使用阿里云InfluxDB®,下面将陆续为大家介绍一些InfluxDB的使用技巧。

InfluxDB的基本概念

在使用阿里云InfluxDB®之前,必须先了解InfluxDB的一些概念。云产品介绍中描述了一些基本的专业术语,如时间线(serieskey),测量值(measurement),数据保留策略(retention policy),数据分片(shard)等。在阿里云InfluxDB®产品系列中,介绍了基础版与高可用版的使用场景与架构区别。这些基础概念将有助于后面深度使用阿里云InfluxDB帮助业务成长。

InfluxDB的使用误区

误区一:阿里云InfluxDB®修改retention policy之后,旧数据会立即删除。

t1
如上图所示,阿里云InfluxDB®数据存储层次是Database->Retention Policy->Shard->WAL/TSM/TSI,查询时数据的访问路径也是 database.rp.measurement。如果写入数据的RP名称被修改,新的数据会被写入不同的目录,旧数据若在保留时间段内,仍然存在,访问时带上旧的RP即可;若只是更改Shard Duration或者数据保留时间,这个只对新产生的Shard生效,旧的数据需要等到原来的保留时间失效才会被删除。

误区二:Shard数目越多,数据查询和删除越快。

InfluxDB中Database会按shardGroupDuration将写入数据分到不同的shard。若shardGroupDuration设置的比较短,会导致最后生成的shard会比较多。因为每个shard的数据存在不同的磁盘目录中,并且每个shard有自己独立的写入cache,最后会导致数据的压缩率不高,写入时占用的内存空间比较大。
用户要结合数据的保留时间和采集数据量的多少合理的设置shardGroupDuration的大小,防止因设置不当而影响写入和查询性能。

误区三:阿里云InfluxDB®时间线采用tsi索引,时间线可以无限增长。

InfluxDB采用tsi的时间线倒排索引,可以将时间线的倒排索引实时序列化在磁盘文件上,相对于原来的in-mem index来说,大大降低了内存开销。但是时间线膨胀,会给整个实例的使用带来比较大的负担。

t2

  1. 数据压缩率降低:如<InfluxDB数据压缩算法>中所述,数据的存储是按serieskey+分隔符+fieldkey+value col的形式组织的,每条时间线都会占用比较多的字节来存储数据点的索引key,而当前每个TSM文件的上限是2GB,在时间点均匀写入的情况下,造成value列中的数据点比较少,压缩率低。例如:监控对象有10M条时间线,每条时间点数据的(serieskey+fieldkey)的大小约为100B,时间线均匀写入的情况下,一个TSM文件中,value列能存储的点的个数约为 (2GB/(10M*100B))=2,即只有两个连续时间点的数据被压缩在一起,这样数据的压缩率很低。
  2. 实例内存水位高:如上图所示,influxdb tsm的间接索引(Indirect Index Entry)主要存在内存中,可以快速定位到一个key在详细索引中的信息。InfluxDB启动时,会从TSM文件中load这些间接索引信息,当TSM中时间线太多时,间接索引占用的空间会比较大,导致内存水位比较高。
  3. 时间线太多对tsm compaction会有影响:TSM会定期将低level的小文件合并成大文件,当时间线比较多时,由于series key占用的空间比较大,写入时会频繁生成小文件,造成level compaction频次比较高,影响写入吞吐。

误区四:Tag有索引,点查询中where条件的key都应放在tag中。

InfluxDB中serieskey由measurement+tagkey+tagvalue构成,seireskey有正排和倒排索引,根据tagkey进行过滤的确能加快过滤和查询。但是若tagkey对应的value频繁变化,结果会导致时间线膨胀,带来的影响与误区三中的基本相同。

误区五:作为Prometheus的远端存储时,连接数越多吞吐越高。

InfluxDB的吞吐与请求的并发有一定的关系,但不是线性相关。并发度低时,增加并发能提高吞吐;但是并发度非常高时,由于资源的竞争,可能会导致写入吞吐的下降。一般并发度设为CPU核数的2倍到5倍之间会比较合适。

误区六:InfluxDB高可用版保证了服务的可用性,写入、查询不需要重试。

当前,InfluxDB高可用版采用Raft一致性协议保证了整个实例比较高的可用性,对用户实例的升级、变配、扩容做了不少优化,对用户业务基本没有影响或者影响很小。但是并不意味着业务端的请求总是完全能被处理,不需要重试机制。例如,在版本升级的情况下,实例级的重启会导致连接断开,用户的请求可能会被中断,但是三节点HA的串行升级模式能保证用户在重试的情况下请求成功。因此,需要用户的重试机制保证这种低频操作的情况下请求能顺利完成。

小结

阿里云InfluxDB®商业化一年多来,经过一段时间的技术沉淀,能够提高用户的满意度。相对于开源社区,阿里云InfluxDB®做了比较多的优化,例如相对于时间线比较多,serieskey比较大的场景,磁盘写入带宽放大比较严重,我们自研了tsm-plus 存储引擎,写入吞吐能提高数倍;相对于删除和查询慢的问题,我们也做了一些优化提交到开源社区;并且在稳定性和高可用性上面,我们在持续不断的优化。若有其它问题,可以扫描下面的二维码,加入钉钉技术群进行交流。
t3

参考文献

  1. 阿里云InfluxDB®云栖社区
目录
相关文章
Foo
|
存储 Prometheus 监控
拥抱开源生态:阿里云InfluxDB集成Prometheus查询
前言 Prometheus是CNCF的毕业项目,其生态已成为云原生监控领域的事实标准。Kubernetes集群的指标通过Prometheus格式暴露,很多新项目也直接选择Prometheus格式暴露指标数据,传统应用(比如MySQL, MongoDB,Redis等)在开源社区都有Prometheus Exporter来接入Prometheus生态。 Prometheus内置的tsdb适合存储短
Foo
2027 0
拥抱开源生态:阿里云InfluxDB集成Prometheus查询
|
分布式计算 数据可视化 时序数据库
使用阿里云InfluxDB®和Spark Streaming实时处理时序数据
本文重点介绍怎样利用阿里云InfluxDB®和spark structured streaming来实时计算、存储和可视化数据。下面将介绍如何购买和初始化阿里云InfluxDB®,扩展spark foreach writer,以及设计阿里云InfluxDB®数据库时需要注意的事项。
6795 0
|
存储 算法 数据库
阿里云InfluxDB®基于TSI索引的数据查询流程
简介 时间序列数据库是目前技术发展最快的数据库类型之一。作为业界最为流行的时序数据库InfluxDB,其部署运行十分简洁方便,支持高性能时序数据的读写,在应用程序监控、物联网(IoT)领域有着广泛的应用。
3739 1
|
时序数据库
《阿里云时序数据库TSDB For InfluxDB?介绍》电子版地址
阿里云时序数据库TSDB For InfluxDB®介绍
138 0
《阿里云时序数据库TSDB For InfluxDB?介绍》电子版地址
|
存储 弹性计算 算法
阿里云InfluxDB®高可用设计
阿里云InfluxDB®是一版免运维,稳定可靠,可弹性伸缩的在线时序数据库服务,目前围绕InfluxDB的TIG(Telegraf/InfluxDB/Grafana)生态和高可用服务版本已经商业化,可以在阿里云官网直接购买。
3961 0
阿里云InfluxDB®高可用设计
|
存储 监控 NoSQL
阿里云InfluxDB®云实例监控
本文将详细介绍如何使用阿里云InfluxDB®实例的云实例监控服务,在2分钟内实现对阿里云InfluxDB®️实例所在相同VPC内的Mysql, Redis, MongoDB类型云实例进行监控部署。
4633 0
Foo
|
存储 Kubernetes 监控
阿里云InfluxDB®:一条命令完成k8s监控采集
前言 Kubernetes是当今流行的容器调度系统,已经成为很多软件系统的底座,而kubernetes的监控也有很多方案可选,阿里云InfluxDB®提供时序数据的长期稳定存储,同时集成了grafana可视化组件,可以帮助用户快速搭建监控方案。
Foo
4433 0
阿里云InfluxDB®:一条命令完成k8s监控采集
|
存储 监控 大数据
阿里云InfluxDB®教你玩转A股数据
阿里云InfluxDB®目前已经商业化,专注于处理高写入和查询负载的时序数据,用于存储大规模的时序数据并进行实时分析,包括来自DevOps监控、车联网、智慧交通、金融和IOT传感器数据采集。金融中股票交易具有高频和时间属性,非常符合InfluxDB的应用场景。
10640 0
|
数据采集 关系型数据库 MySQL
阿里云InfluxDB®采集监控MySQL实践
阿里云InfluxDB®已经集成TIG(Telegraf/InfluxDB/Grafana)生态,正在开展首月一元购活动,广泛应用于DevOps监控、车联网、智慧交通、金融和IOT传感器数据采集等领域。
2148 0
|
时序数据库 流计算 缓存
阿里云InfluxDB® 版对接Kapacitor指南
Kapacitor是一个数据处理框架,用于告警、ETL(Extract-Transform-Load)和检测异常。Kapacitor是TICK生态中的最后一环,阿里云InfluxDB® 版对接Kapacitor指南新鲜出炉
4964 0

热门文章

最新文章