阿里云InfluxDB技术内幕

  • 时间:
  • 浏览:0

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

 

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

 

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

 

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

 

阿里云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的组织组织结构底部形态大致是你这俩 样子的:

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

 

1.  创建分发配置。另二个多分发配置蕴藏该配置的名称、分发数据类型、有关分发数据的配置(然后 有语录)、数据写入的数据库和保留策略、用户账号信息。

 

2.  修改分发配置。除了分发配置的名称无法修改外,其它的配置信息都可修改。然后 有分发源正在使用该分发配置,越来越分发配置修改后,自动在分发源中生效。

 

3.  删除分发配置。在删除另二个多分发配置完后 ,还要先确认越来越正在运行的分发源使用该分发配置,然后 删除不成功。

 

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

 

目前,阿里云InfluxDB智能分发端然后 支持以下分发类型:

1.  系统监控

2.  MySQL

3.  Redis

4.  MongoDB

 

然后 用户的数据分发类型没了这4种常见选项当中,也都后能 通过直接配置Telegraf来完成数据上报。

 

越来越说起来,否是对于内存大的机器,将另二个多参数设置大或多或少;对于内存小的机器,将另二个多参数调小或多或少,就万事大吉了呢?疑问显然越来越越来越简单。回顾中间亲们讲的InfluxDB数据管理层次,另二个多Database都后能 有多个RP,另二个多RP又有多个Shard,或多或少另二个多服务一共会有几次个Shard Cache是越来越选折 的,然后 随着Database和RP的增加或减少而变化,甚至然后 处于补写老数据的情况汇报,另二个多RP下承担写入的Cache也会不止另二个多。

 

或多或少随便说说 前述另二个多参数设置的不不大,但当Cache数量较多时,服务然后 仍然会吃光内存,最终处于OOM。

亲们从或多或少技术论坛和要素重度使用开源InfluxDB的企业客户了解到,亲们在使用过程中遇到了InfluxDB多多守护进程 处于OOM而意味多多守护进程 退出,服务不可用的情况汇报。越来越,开源InfluxDB的OOM疑问究竟是怎么处于的?亲们就先来看看你这俩 疑问的来龙去脉。

 

随着移动互联网和物联网的广泛应用,90%以上的数据是和时间相关的,而太大的数据应用场景与时间信息密不可分。时间维度的数据(亲们称之为时序数据)是两种高维数据,还要更为高效的数据解决土辦法 来解决。在实际应用场景上同类传感器网络、移动互联网、射频识别、电网系统等设备时刻输出时间数据,数据量增长非常越快,这对存储和管理时序数据带来了挑战。

 

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

开源的数据分发工具,如Telegraf、Logstash和TCollector等,都后能 支持多种数据类型的分发,然后 用户还要自行寻找恰当的安装包,然后 编写繁复配置文件后才都后能 分发数据。然后 用户难以直观地监测数据分发的运行情况汇报,更无法对分发端进行统一的管控。怪怪的是有众多分发源时,维护工作将非常繁复且容易出错。

 

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

 

下面亲们将详解阿里云InfluxDB的智能数据分发方案。

 

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

用户在数据源所在机器上安装数据分发工具后,分发工具即可现在然后刚结束了了分发数据并上传到阿里云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的或多或少设计疑问会意味“查放大”,也然后随便说说 你只查询了较少的数据,但组织组织结构却遍历并临时存储了较多的数据,最终使用了更多的内存。

 

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

 

1.  创建分发源。另二个多分发源蕴藏以下信息:uuid(每个分发源另二个多唯一的标志符,用于标识不同的分发源)、主机IP、主机名称、网络类型、分发配置、分发情况汇报、最新连接上报成功时间和最新分发上报成功时间。

 

2.  修改分发源。用户都后能 修改分发源正在使用的分发配置和分发源的运行情况汇报,更新后的信息会保处于阿里云InfluxDB中。

 

3.  删除分发源。在删除另二个多分发配置完后 ,还要先确认越来越正在运行的分发源使用该分发配置,然后 删除不成功。删除分发源意味该分发源无法再次分发数据。

 

4.  查看分发源。用户都后能 在控制台查看所有将数据写入阿里云InfluxDB的分发源,实时监控各个分发源的情况汇报。

 

从图中都后能 看到,每个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,用户就还你后能 人个费心费力去搭建那些情况汇报监控和告警。

 

那否是把Cache设置的怪怪的小就没疑问了呢?也没越来越简单。

 

首先Cache很小,会意味查询时更容易处于cache miss,降低查询带宽,但这还否是主要的疑问。

 

更严重的疑问是,Cache怪怪的小,就会处于频繁的snapshot和刷盘,按照LSM Tree的存储机制,后台的compaction然后 承担更大的压力,系统的IO更容易达到瓶颈。然后 ,然后 series较多且其字符串较长,越来越另二个多snapshot中的meta数据将处于不足英文的比例,意味每次刷盘的数据中,实际points所占比例较低,引起“写放大”效应,最终恶化系统性能。

 

或多或少这另二个多Cache参数实际使用时设置恰当的难度很大,稍有不当,或写入数据的底部形态处于变化,就容易影响系统性能,甚至处于OOM等疑问。

 

另二个多实际InfluxDB的实时Cache情况汇报然后 如下图所示:

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

而有了中间流程图额外的条件判断,就都后能 解决你这俩 情况汇报,让二者较为接近然后会造成写入失败。

 

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

 

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

 

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

 

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

 

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

 

对查询的内存耗用疑问,亲们从系统整体深度图出发,资源充足时,不做任何限制;资源不足英文时,再进行限制和解决。

如图,亲们会额外增加另二个多协程,周期性地获取多多守护进程 的HeapAlloc信息。当HeapAlloc不超过危险阈值时,不不kill任何用户查询;当超过危险阈值时,则会酌情kill较晚现在然后刚结束了了执行的资源消耗较大的查询。但不管kill掉几次查询,始终会确保最早现在然后刚结束了了执行的查询都后能 继续执行下去,以保证系统仍然对查询请求有一定的解决能力。

 

上图展示了数据分发功能的框架,用户可分别创建多个分发配置和分发源,各个分发源之间相互独立,同样地,各个分发源之间也相互独立。另二个多分发配置可被多个分发源使用,然后 另二个多分发源只能使用另二个多分发配置;当分发配置中的参数变化时,所有使用该分发配置的分发源的配置也会处于变化。

 

用户通过控制台对分发配置和分发源所进行的操作,还会同步到阿里云InfluxDB;数据分发工具直接与阿里云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引入了一套Load Shedding机制,该机制在内存充足时总爱满足用户客户端发来的请求,在内存不足英文时保护性地终止要素响应。另二个多既保证了硬件资源的利用率,又保护了服务的持续可用性。算法的整体流程如下图所示:

如图,系统中的实际Cache然后 会有或多或少,且实时的大小各不相同,或多或少亲们增加了对全局所有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之间的通信,实现数据分发的自动化管理。用户不不自行运维然后 编写代码,只需通过控制台的图形界面操作,即可对多种监控数据进行分发管理,实现数据从分发到存储的无缝链接。然后 ,控制台的界面简洁明了、易于操作,用户都后能 直观地监测多个分发源的数据分发情况汇报。

 

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

 

随便说说 开源InfluxDB两种否是获取其运行情况汇报的API,但越来越基于此形成告警机制,也越来越便捷的图形化界面。然后 ,对于每秒写入数据点、磁盘占用量、总series数量等实例监控数据,并未直接提供。

 

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

1.  每秒写入数据点

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

3.  磁盘空间占用率

 

另二个多,用户都后能 通过那些曲线直观地了解服务的当前情况汇报和历史情况汇报,然后 当磁盘空间占用率较高时,系统会自动向用户告警,提醒用户清理数据或升配。

 

用户还都后能 在阿里云的“云监控”产品中(基本功能免费对用户开放使用)基于那些情况汇报信息设置我人个的报警规则。