阿里云InfluxDB技术内幕

  • 时间:
  • 浏览:1
  • 来源:uu快3官网pk10_uu快3官方邀请码_官网ios版

上述一系列的监控能力,使得用户使用阿里云InfluxDB更为清晰和安全,而因此使用开源InfluxDB,用户就还随后每每人及费心费力去搭建那此具体情况监控和告警。

 

当当我们从有些技术论坛和累积重度使用开源InfluxDB的企业客户了解到,当当我们在使用过程中遇到了InfluxDB应用应用程序运行处于OOM而是因为应用应用程序运行退出,服务不可用的具体情况。那末,开源InfluxDB的OOM问题究竟是要怎样处于的?当当我们就先来看看什儿 问题的来龙去脉。

 

开源的数据整理工具,如Telegraf、Logstash和TCollector等,可不还要支持多种数据类型的整理,因此用户还要自行寻找恰当的安装包,因此编写简化配置文件后才可不还要整理数据。因此用户难以直观地监测数据整理的运行具体情况,更无法对整理端进行统一的管控。特别是有众多整理源时,维护工作将非常简化且容易出错。

 

为了简化时序数据整理的繁琐操作,阿里云InfluxDB新推出智能数据整理功能,实现数据从整理到存储的自动化管理,用户只需简单配置即可使用,不多编写任何代码。

 

下面当当我们将详解阿里云InfluxDB的智能数据整理方案。

 

阿里云InfluxDB提供创建、修改、删除和查看整理源的API。同样地,在阿里云InfluxDB中,有专门的模块管理整理源,所有整理源的信息完会存储在阿里云InfluxDB中,并持久化到磁盘,避免信息丢失。图中红色箭头表示用户通过控制台对整理源进行的操作。

 

1.  创建整理源。原来整理源涵盖以下信息:uuid(每个整理源有原来唯一的标志符,用于标识不同的整理源)、主机IP、主机名称、网络类型、整理配置、整理具体情况、最新连接上报成功时间和最新整理上报成功时间。

 

2.  修改整理源。用户可不还要修改整理源正在使用的整理配置和整理源的运行具体情况,更新后的信息会保处于阿里云InfluxDB中。

 

3.  删除整理源。在删除原来整理配置也不我,还要先确认那末正在运行的整理源使用该整理配置,因此删除不成功。删除整理源是因为该整理源无法再次整理数据。

 

4.  查看整理源。用户可不还要在控制台查看所有将数据写入阿里云InfluxDB的整理源,实时监控各个整理源的具体情况。

 

首先当当我们介绍一下InfluxDB的数据存储层次架构:

开源InfluxDB中原有的针对每个Cache的独立snapshot门限监测和执行逻辑保持不变。冷Cache无论size大小都执行snapshot的逻辑也保持不变(前面那末提到,InfluxDB还有原来参数cache-snapshot-write-cold-duration,控制Cache变冷后,也也不我无数据写入后多久就完会做snapshot,该参数与主题关系不密切)。

 

但当当我们在外层新增了原来整体管控的模块,当整个服务的所有Cache的总size达到设定门限时,则会对其中较大的那此Cache执行snapshot逻辑,以便及时刷盘,释放内存。

 

另原来以来,无论Cache几个,每个Cache的实时size有多大,因此我总计的大小系统不能承受,当当我们尽因此让Cache承载更多的数据,避免写放大,也提高最近数据的查询传输速率。

 

开源InfluxDB并都有的流程中,是那末上图中是不是OverLoad的判断的。好多好多 因此我写入请求对应shard的cache大小超过了限制参数,写入请求就完会失败。但当当我们从上图可不还要看一遍,因此服务整体那末OverLoad,即使写负载比较大,是因为短时间写入请求对应shard的cache超出了设定限制,仍然会接受write请求,因此此时系统整体上实在是安全的。

 

这里还要提一下InfluxDB的写cache有原来关联的参数cache-snapshot-memory-size和cache-max-memory-size,前者是启动shard的写cache启动snapshot的门限,后者是结束拒绝写入的门限。因此当当我们选定了原来适当的cache-max-memory-size,则cache-snapshot-memory-size就还要显著小于cache-max-memory-size,因此若二者接近,很容易处于系统还没反应过来,都因此达到cache-max-memory-size,是因为写入失败。而当cache-snapshot-memory-size显著小于cache-max-memory-size时,cache-max-memory-size参数的价值就降低了(shard的cache大小几乎那末因此接近该值就早已snapshot了)。什儿 相互关系产生了上述微妙的矛盾。

阿里云InfluxDB基于开源InfluxDB,提供和开源InfluxDB完整版相同的API和使用生态,并进一步对开源InfluxDB在内存使用等方面做了优化提升,增强了服务的稳定性。

 

阿里云InfluxDB还基于开源Telegraf提供了智能化的数据整理端,覆盖Telegraf原有的所有功能,并大幅提升了使用的便捷性。用户可不还要在阿里云控制台通过点击鼠标动态调整整理策略,而不多学习和编辑简化的Telegraf配置文件。

 

阿里云InfluxDB的控制台对服务的各项主要指标也进行了监控和直观的图形化展示,方便用户预见问题、发现问题、了解服务当前和历史具体情况。

 

下面当当我们将对阿里云InfluxDB的那此特点进行完整版解读。

 

如上图所示,InfluxDB首先可不还要创建若干个Databases且那末数量限制。用户权限的赋予也不我以Database为单位的。这和MySQL等常见的关系型数据库很类式。

 

Database下面可不还要划分若干Retention Policy(RP),也也不我保留策略,每个RP定义了每每人及保留数据的时长。创建Database完会自动同时创建原来默认的无限期保留数据的RP,用户可不还要继续创建不限数量的RP,也可不还要选折 任意RP为默认的保留策略。

 

RP再往下分,是按时间段划分ShardGroup,ShardGroup再按series做hash分为Shard。因此在开源的代码中,ShardGroup实际上没起到作用,因此每个ShardGroup都固定还可不还可以 了原来Shard。好多好多 在图中当当我们就略过了ShardGroup的定义和解释,可不还要认为紧挨RP的下一层也不我按时间段划分的Shard。

 

初始的默认RP的每个Shard将负责原来自然周的数据存储与管理,就如图中所示的数据起止日期。较短时长的RP一般对应较短时长的Shard。

 

Shard的内部管理型态大致是什儿 样子的:

从图中可不还要看一遍,每个Shard实在也不我原来典型的LSM Tree体系,有WAL保证数据持久性,有Cache承接最新的写入数据,有TSM文件作为Cache执行snapshot后刷盘的结果(Cache中的数据是未排序、未去重、未压缩的,刷入TSM文件后的数据时排序、去重、压缩的)。

 

显而易见,对于每个Shard,最消耗内存的也不我Cache了。开源InfluxDB倒是提供了控制Cache大小的原来参数:

·       cache-max-memory-size

·       cache-snapshot-memory-size

 

前者是Cache最大容纳的数据量,后者是Cache结束做snapshot刷盘的数据量门限。它们应该协同调大或调小。

阿里云InfluxDB控制台是用户与数据整理服务进行交互的接口,用户对整理配置和整理源进行管理还要通过控制台。用户在控制台进行的操作,实际上是向阿里云InfluxDB发送相应的请求。

 

阿里云InfluxDB基于开源InfluxDB做了好多好多 提升与强化。本文介绍的全局Cache管控和Load Shedding机制也不我其中重要的原来方面。它们一定程度上化解了开源InfluxDB的配置参数欠缺整体性和自适应性的欠缺,既保护了实例,又充分利用了硬件资源。

 

未来阿里云InfluxDB还将在内存管理方面继续探索和优化,给用户提供最佳的服务和体验。

 

阿里云InfluxDB提供创建、修改、删除和查看整理配置的API。在阿里云InfluxDB中,有专门的模块管理整理配置,所有整理配置的信息完会存储在阿里云InfluxDB中,并持久化到磁盘,避免信息丢失。图中绿色箭头表示用户通过控制台对整理配置进行的操作。

 

1.  创建整理配置。原来整理配置涵盖该配置的名称、整理数据类型、有关整理数据的配置(因此有句子)、数据写入的数据库和保留策略、用户账号信息。

 

2.  修改整理配置。除了整理配置的名称无法修改外,其它的配置信息都可修改。因此有整理源正在使用该整理配置,那末整理配置修改后,自动在整理源中生效。

 

3.  删除整理配置。在删除原来整理配置也不我,还要先确认那末正在运行的整理源使用该整理配置,因此删除不成功。

 

4.  查看整理配置。创建整理配置后,用户可查看该配置的具体信息。

 

目前,阿里云InfluxDB智能整理端因此支持以下整理类型:

1.  系统监控

2.  MySQL

3.  Redis

4.  MongoDB

 

因此用户的数据整理类型找不到这4种常见选项当中,也可不还要通过直接配置Telegraf来完成数据上报。

 

阿里云InfluxDB智能数据整理方案,通过控制台、整理工具和阿里云InfluxDB之间的通信,实现数据整理的自动化管理。用户不多自行运维因此编写代码,只需通过控制台的图形界面操作,即可对多种监控数据进行整理管理,实现数据从整理到存储的无缝链接。因此,控制台的界面简洁明了、易于操作,用户可不还要直观地监测多个整理源的数据整理具体情况。

 

如图,当当我们会额外增加原来协程,周期性地获取应用应用程序运行的HeapAlloc信息。当HeapAlloc不超过危险阈值时,不多kill任何用户查询;当超过危险阈值时,则会酌情kill较晚结束执行的资源消耗较大的查询。但不管kill掉几个查询,始终会确保最早结束执行的查询可不还要继续执行下去,以保证系统仍然对查询请求有一定的避免能力。

 

下面当当我们看看主要的避免逻辑。

 

那末说起来,是完会对于内存大的机器,将原来参数设置大有些;对于内存小的机器,将原来参数调小有些,就万事大吉了呢?问题显然那末那末简单。回顾中间当当我们讲的InfluxDB数据管理层次,原来Database可不还要有多个RP,原来RP又有多个Shard,好多好多 原来服务一共会几个个Shard Cache是很慢选折 的,因此随着Database和RP的增加或减少而变化,甚至因此处于补写老数据的具体情况,原来RP下承担写入的Cache也会不止原来。

 

好多好多 实在前述原来参数设置的都有也不我大,但当Cache数量较多时,服务因此仍然会吃光内存,最终处于OOM。

阿里云InfluxDB提供整理配置和整理源模块,用于避免来自控制台和数据整理工具的请求。绿色箭头和红色箭头表示来自控制台的请求,可对整理配置和整理源进行操作。还要注意的是,在整理源的配置中,完会涵盖正在使用的整理配置的信息。橙色箭头表示整理工具向阿里云InfluxDB发送写入数据的请求,根据整理配置中数据写入的数据库和保留策略,整理工具将整理数据发送到指定的数据库和保留策略,同时,也会更新整理源配置中的最新连接上报成功时间和最新整理上报成功时间。

上图展示了数据整理功能的框架,用户可分别创建多个整理配置和整理源,各个整理源之间相互独立,同样地,各个整理源之间也相互独立。原来整理配置可被多个整理源使用,因此原来整理源还可不还可以 了使用原来整理配置;当整理配置中的参数变化时,所有使用该整理配置的整理源的配置也会处于变化。

 

用户通过控制台对整理配置和整理源所进行的操作,完会同步到阿里云InfluxDB;数据整理工具直接与阿里云InfluxDB进行通信,获取整理源的最新信息,自动实现数据的整理和发送。

 

下面,当当我们将完整版介绍以上框架中的各个组件。

 

阿里云InfluxDB引入了一套Load Shedding机制,该机制在内存丰富时突然满足用户客户端发来的请求,在内存欠缺时保护性地终止累积响应。另原来既保证了硬件资源的利用率,又保护了服务的持续可用性。算法的整体流程如下图所示:

原来实际InfluxDB的实时Cache具体情况因此如下图所示:

用户在数据源所在机器上安装数据整理工具后,整理工具即可结束整理数据并上传到阿里云InfluxDB。整理工具会周期性地从阿里云InfluxDB获得该整理源的配置信息,判断是不是还要开启或关闭整理数据,同时,也会判断整理源正在使用的整理配置是不是有更新,若有,则中断当前数据的整理,因此以新的配置信息结束整理数据。

 

当整理工具向阿里云InfluxDB发送获得整理源配置的请求时,除了获得最新的配置信息,也会更新整理源配置中的最新连接上报成功时间,根据该时间,用户可不还要知道整理工具的具体情况,是不是成功运行并与阿里云InfluxDB建立连接。

 

目前,阿里云InfluxDB支持整理的数据类型有并都有:MySQL、MongoDB、Redis和系统监控。根据整理源的配置,整理工具自动整理某并都有类型的数据并上传到阿里云InfluxDB中。对于发送的写入数据请求,阿里云InfluxDB会更新对应的整理源的最新整理上报成功时间,根据该时间,用户可不还要知道最近一次整理数据发送到阿里云InfluxDB的时间,实时监控数据是不是成功到达阿里云InfluxDB。

 

图中的浅紫色箭头累积展示了整理工具即会向阿里云InfluxDB获得整理源配置,也会更新其信息。橙色箭头表示整理工具向阿里云InfluxDB发送写入数据的请求。

 

当当我们再看看InfluxDB在查询过程中的内存使用。

 

对于原来典型的按照约束条件查询数据的Query,InfluxDB首先根据倒排索引选折 相关的series,因此对每个series的数据分段从TSM文件中取出压缩块进行decode形成iterator,供上层迭代获取数据,并最终由上层返回给客户端。好多好多 因此查询的数据量特别大,那末消耗的内存也就很大。

 

对于查询,InfluxDB同样给出了有些参数供用户进行设置和约束,主也不我以下三个白:

·       max-select-point(表示单次Query最多可查询的点数)

·       max-select-series(表示单次Query最多可查询的series数)

·       max-concurrent-queries(表示最大并发Query个数)

 

以上参数因此不做任何限制,血块并发的大查询因此会引起服务的OOM等问题。

 

因此单独设置很小的max-concurrent-queries,当用户使用血块并发的小查询时,实在系统完整版可不还要承受,但却被该参数约束而拒绝服务,这显然不共要。

 

因此单独设置很小的max-select-point和max-select-series,当用户还可不还可以 了非并发的大查询时,实在系统完整版可不还要承受,但却被该参数约束而拒绝服务,这显然也不我共要。

 

因此,从内部管理实现上来说,max-select-point约束实际起效往往是滞后的。另外,InfluxDB的有些设计问题会是因为“查放大”,也也不我实在你只查询了较少的数据,但内部管理却遍历并临时存储了较多的数据,最终使用了更多的内存。

 

DB-Engines 2019年9月的时序数据库排行榜

对查询的内存耗用问题,当当我们从系统整体角度出发,资源丰富时,不做任何限制;资源欠缺时,再进行限制和避免。

随着移动互联网和物联网的广泛应用,90%以上的数据是和时间相关的,而不多的数据应用场景与时间信息密不可分。时间维度的数据(当当我们称之为时序数据)是并都有高维数据,还要更为高效的数据避免妙招来避免。在实际应用场景上类式传感器网络、移动互联网、射频识别、电网系统等设备时刻输出时间数据,数据量增长非常很慢,这对存储和管理时序数据带来了挑战。

 

而普通的关系型数据库主要针对事务避免,从底层存储机制到对外API功能,都有也不我适合避免时序数据。因此,专门的时序数据库应运而生。若干年中,市面上突然突然出现了好多好多 种不同的时序数据库,当当我们或数据模型不同,或生态不同,或存储架构不同。经过数年的发展,InfluxDB一枝独秀,在DB-Engines的时序数据库排行榜中,InfluxDB高居榜首,遥遥领先有些的时序数据库,成为最流行的时序数据库产品。

那是完会把Cache设置的特别小就没问题了呢?也没那末简单。

 

首先Cache很小,会是因为查询时更容易处于cache miss,降低查询传输速率,但这还完会主要的问题。

 

更严重的问题是,Cache特别小,就会处于频繁的snapshot和刷盘,按照LSM Tree的存储机制,后台的compaction因此承担更大的压力,系统的IO更容易达到瓶颈。因此,因此series较多且其字符串较长,那末原来snapshot中的meta数据将处于欠缺的比例,是因为每次刷盘的数据中,实际points所占比例较低,引起“写放大”效应,最终恶化系统性能。

 

好多好多 这原来Cache参数实际使用时设置恰当的难度很大,稍有不当,或写入数据的型态处于变化,就容易影响系统性能,甚至处于OOM等问题。

 

如图,系统中的实际Cache因此会有好多好多 ,且实时的大小各不相同,好多好多 当当我们增加了对全局所有Cache的统计与管理。简要的架构如下图所示:

从上图可不还要看一遍,因此系统因此设置了OverLoad标识,则新的查询请求也会被拒绝。直到被kill的查询及其它执行的查询完成后释放了足够的内存,让HeapAlloc重新下降到阈值以下后,OverLoad标识才会被unset,系统才会重新接受新的查询请求。

 

另外,超过限制后,完会设置OverLoad标识,它在收到新写入请求和新查询请求的流程中也完会被用到。查询请求预先检查OverLoad标识的流程如下图所示:

实在开源InfluxDB并都有完会获取其运行具体情况的API,但那末基于此形成告警机制,也那末便捷的图形化界面。因此,对于每秒写入数据点、磁盘占用量、总series数量等实例监控数据,并未直接提供。

 

阿里云InfluxDB进一步完善了开源InfluxDB的具体情况上报,新增了总磁盘使用量、总series数量等具体情况信息。最终经过阿里云管控系统后端的数据清洗和汇总,在控制台“实例监控”页面向用户提供以下具体情况的数据曲线:

1.  每秒写入数据点

2.  时间线数量(所有Databases的series数量总和)

3.  磁盘空间占用率

 

另原来,用户可不还要通过那此曲线直观地了解服务的当前具体情况和历史具体情况,因此当磁盘空间占用率较高时,系统会自动向用户告警,提醒用户清理数据或升配。

 

用户还可不还要在阿里云的“云监控”产品中(基本功能免费对用户开放使用)基于那此具体情况信息设置我每每人及的报警规则。

基于开源InfluxDB,阿里云InfluxDB在保留完整版功能,确保1000%兼容性的基础上,在服务稳定性、数据整理便利性和服务监控告警便利性上做了进一步的优化与完善,成为用户在云上使用InfluxDB的最佳选折 。

 

未来,阿里云InfluxDB完会在高可用和集群化上进一步发力,提供更高端的服务能力。也会继续增加智能数据整理的覆盖范围,支持不多的数据类型。除了那此,阿里云InfluxDB也期待听到当当我们的心声,在用户还要的方向上去做更多的努力与提升。

 

而有了中间流程图额外的条件判断,就可不还要避免什儿 具体情况,让二者较为接近也不我会造成写入失败。