阿里云InfluxDB技术内幕

  • 时间:
  • 浏览:31
  • 来源:大发5分3DAPP下载_大发5分3DAPP官方

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

1个实际InfluxDB的实时Cache情況机会如下图所示:

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

 

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

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

 

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

 

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

 

没法说起来,是是不是对于内存大的机器,将1个参数设置大有些;对于内存小的机器,将1个参数调小有些,就万事大吉了呢?什么的问题显然没法没法简单。回顾顶端我们歌词 歌词 讲的InfluxDB数据管理层次,1个Database还前要有多个RP,1个RP又有多个Shard,不要 1个服务一共会有几块个Shard Cache是太快了 选者的,机会随着Database和RP的增加或减少而变化,甚至机会指在补写老数据的情況,1个RP下承担写入的Cache也会不止1个。

 

不要 真是前述1个参数设置的是是不是日后 大,但当Cache数量较多时,服务机会仍然会吃光内存,最终指在OOM。

从图中还前要看得人,每个Shard真是日后 1个典型的LSM Tree体系,有WAL保证数据持久性,有Cache承接最新的写入数据,有TSM文件作为Cache执行snapshot后刷盘的结果(Cache中的数据是未排序、未去重、未压缩的,刷入TSM文件后的数据时排序、去重、压缩的)。

 

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

·       cache-max-memory-size

·       cache-snapshot-memory-size

 

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

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

 

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

 

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

 

1.  创建下发配置。1个下发配置中有 该配置的名称、下发数据类型、有关下发数据的配置(机会有励志的话 )、数据写入的数据库和保留策略、用户账号信息。

 

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

 

3.  删除下发配置。在删除1个下发配置完后 ,前要先确认没法正在运行的下发源使用该下发配置,日后 删除不成功。

 

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

 

目前,阿里云InfluxDB智能下发端机会支持以下下发类型:

1.  系统监控

2.  MySQL

3.  Redis

4.  MongoDB

 

机会用户的数据下发类型不出这4种常见选项当中,也还前要通过直接配置Telegraf来完成数据上报。

 

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

 

对查询的内存耗用什么的问题,我们歌词 歌词 从系统整体深层出发,资源富足时,不做任何限制;资源欠缺时,再进行限制和外理。

那是是不是把Cache设置的一阵一阵小就没什么的问题了呢?也没没法简单。

 

首先Cache很小,会愿因查询时更容易指在cache miss,降低查询深层,但这还是是不是主要的什么的问题。

 

更严重的什么的问题是,Cache一阵一阵小,就会指在频繁的snapshot和刷盘,按照LSM Tree的存储机制,后台的compaction机会承担更大的压力,系统的IO更容易达到瓶颈。日后 ,机会series较多且其字符串较长,没法1个snapshot中的meta数据将指在欠缺的比例,愿因每次刷盘的数据中,实际points所占比例较低,引起“写放大”效应,最终恶化系统性能。

 

不要 你这个个多Cache参数实际使用时设置恰当的难度很大,稍有不当,或写入数据的特征指在变化,就容易影响系统性能,甚至指在OOM等什么的问题。

 

如上图所示,InfluxDB首先还前要创建若干个Databases且没法数量限制。用户权限的赋予日后 以Database为单位的。这和MySQL等常见的关系型数据库很相似。

 

Database下面还前要划分若干Retention Policy(RP),也日后 保留策略,每个RP定义了人个 保留数据的时长。创建Database是是不是自动一起去创建1个默认的无限期保留数据的RP,用户还前要继续创建不限数量的RP,也还前要选者任意RP为默认的保留策略。

 

RP再往下分,是按时间段划分ShardGroup,ShardGroup再按series做hash分为Shard。日后 在开源的代码中,ShardGroup实际上没起到作用,机会每个ShardGroup都固定都还还还可以了1个Shard。不要 在图中我们歌词 歌词 就略过了ShardGroup的定义和解释,还前要认为紧挨RP的下一层日后 按时间段划分的Shard。

 

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

 

Shard的內部特征大致是你这个样子的:

而有了顶端流程图额外的条件判断,就还前要外理你这个情況,让二者较为接近日后 会造成写入失败。

 

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

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

 

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

 

下面我们歌词 歌词 将详解阿里云InfluxDB的智能数据下发方案。

 

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

 

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

 

2.  修改下发源。用户还前要修改下发源正在使用的下发配置和下发源的运行情況,更新后的信息会保指在阿里云InfluxDB中。

 

3.  删除下发源。在删除1个下发配置完后 ,前要先确认没法正在运行的下发源使用该下发配置,日后 删除不成功。删除下发源愿因该下发源无法再次下发数据。

 

4.  查看下发源。用户还前要在控制台查看所有将数据写入阿里云InfluxDB的下发源,实时监控各个下发源的情況。

 

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

 

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

 

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

 

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

 

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

 

我们歌词 歌词 从有些技术论坛和每段重度使用开源InfluxDB的企业客户了解到,我们歌词 歌词 在使用过程中遇到了InfluxDB守护守护进程指在OOM而愿因守护守护进程退出,服务不可用的情況。没法,开源InfluxDB的OOM什么的问题究竟是怎么指在的?我们歌词 歌词 就先来看看你这个什么的问题的来龙去脉。

 

上述一系列的监控能力,使得用户使用阿里云InfluxDB更为清晰和安全,而机会使用开源InfluxDB,用户就前要人个 费心费力去搭建有有哪些情況监控和告警。

 

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

 

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

 

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

 

下面我们歌词 歌词 将对阿里云InfluxDB的有有哪些特点进行完正解读。

 

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

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

上图展示了数据下发功能的框架,用户可分别创建多个下发配置和下发源,各个下发源之间相互独立,同样地,各个下发源之间也相互独立。1个下发配置可被多个下发源使用,日后 1个下发源都还还还可以了使用1个下发配置;当下发配置中的参数变化时,所有使用该下发配置的下发源的配置也会指在变化。

 

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

 

下面,我们歌词 歌词 将完正介绍以上框架中的各个组件。

 

下面我们歌词 歌词 看看主要的外理逻辑。

 

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

 

对于1个典型的按照约束条件查询数据的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并是不是的流程中,是没法上图中有 无OverLoad的判断的。不要 日后 写入请求对应shard的cache大小超过了限制参数,写入请求就是是不是失败。但我们歌词 歌词 从上图还前要看得人,机会服务整体没法OverLoad,即使写负载比较大,愿因短时间写入请求对应shard的cache超出了设定限制,仍然会接受write请求,机会此时系统整体上真是是安全的。

 

这里前要提一下InfluxDB的写cache有1个关联的参数cache-snapshot-memory-size和cache-max-memory-size,前者是启动shard的写cache启动snapshot的门限,后者是结束拒绝写入的门限。机会我们歌词 歌词 选定了1个适当的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了)。你这个相互关系产生了上述微妙的矛盾。

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

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

 

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

 

另1个以来,无论Cache几块,每个Cache的实时size有多大,日后 总计的大小系统都还还还可以承受,我们歌词 歌词 尽机会让Cache承载更多的数据,外理写放大,也提高最近数据的查询深层。

 

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

 

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

真是开源InfluxDB并是不是是是不是获取其运行情況的API,但没法基于此形成告警机制,也没法便捷的图形化界面。日后 ,对于每秒写入数据点、磁盘占用量、总series数量等实例监控数据,并未直接提供。

 

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

1.  每秒写入数据点

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

3.  磁盘空间占用率

 

另1个,用户还前要通过有有哪些曲线直观地了解服务的当前情況和历史情況,日后 当磁盘空间占用率较高时,系统会自动向用户告警,提醒用户清理数据或升配。

 

用户还还前要在阿里云的“云监控”产品中(基本功能免费对用户开放使用)基于有有哪些情況信息设置人个 的报警规则。