CN113377816B - 一种分布式数据存取系统 - Google Patents
一种分布式数据存取系统 Download PDFInfo
- Publication number
- CN113377816B CN113377816B CN202110656873.8A CN202110656873A CN113377816B CN 113377816 B CN113377816 B CN 113377816B CN 202110656873 A CN202110656873 A CN 202110656873A CN 113377816 B CN113377816 B CN 113377816B
- Authority
- CN
- China
- Prior art keywords
- data
- prometheus
- index
- service
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分布式数据存取系统,包括键值数据库、多个Prometheus及相应的读写适配器;其中:Prometheus用于:监听自身需要监听的服务以获取对应指标的指标数据,以及获取自身所对应的读写适配器返回的指标数据;读写适配器用于:获取自身所对应的Prometheus监听到的指标数据,并将获取的指标数据写入键值数据库,以及从键值数据库中查询自身所对应的Prometheus需要的指标数据,并返回查询到的指标数据;键值数据库用于:保存写入的指标数据以供查询。本申请能够提高存储空间及IOPS,能够在抓取大量服务数据时支持高并发存储和访问,且能够长期保存数据,对数据分析和挖掘是有利的。
Description
技术领域
本发明涉及数据存取技术领域,更具体地说,涉及一种分布式数据存取系统。
背景技术
随着云计算和大数据时代的到来,服务器和微服务应用的数量都越来越多,可达上万甚至几十万数量。面向服务的监控是相对于传统面向IP地址监控而言,他把所有的计算能力抽象为对外提供服务的能力,是针对具体服务能力的监控。Prometheus是针对服务监控的一种开源解决方案,他提供了一个基于本地文件系统的时序数据库和一些收集各种服务指标的客户端代理;Prometheus有一套多维度数据模型、灵活的查询语句、易于单机部署和数据采集高效等优点被大多数互联网和初创公司广泛使用。但是Prometheus只提供保存指标数据到本地磁盘,由于本地存储空间有限,而且IOPS比较低,当需要抓取大量服务数据时,目前是不能支持高并发存储和访问的,而且不能长期保存数据,对数据分析和挖掘是不利的。
发明内容
本发明的目的是提供一种分布式数据存取系统,能够提高存储空间及IOPS,能够在抓取大量服务数据时支持高并发存储和访问,且能够长期保存数据,对数据分析和挖掘是有利的。
为了实现上述目的,本发明提供如下技术方案:
一种分布式数据存取系统,包括键值数据库、多个Prometheus以及分别与每个所述Prometheus对应的读写适配器;其中:
所述Prometheus用于:监听自身需要监听的服务以获取对应指标的指标数据,以及获取自身所对应的读写适配器返回的指标数据;
所述读写适配器用于:获取自身所对应的Prometheus监听到的指标数据,并将获取的指标数据写入所述键值数据库,以及从所述键值数据库中查询自身所对应的Prometheus需要的指标数据,并返回查询到的指标数据;
所述键值数据库用于:保存写入的指标数据以供查询。
优选的,所述读写适配器将获取的指标数据写入所述键值数据库具体为:将包含对应指标的指标名称、指标值及产生时间的指标数据构造为预设格式的数据后,写入所述键值数据库;
所述读写适配器从所述键值数据库中查询自身所对应的Prometheus需要的指标数据具体为:将需要查询的指标数据的指标名称及产生时间的范围传输至所述键值数据库,以查询相应的指标数据。
优选的,所述读写适配器将获取的指标数据构造为预设格式的数据具体为:基于获取的指标数据,构造包含指标名称、分隔符、产生时间及全局唯一ID的Key,以及包含指标值的Value,得到由构造的Key及Value组成的预设格式的数据。
优选的,所述读写适配器构造包含指标值的Value具体为:采用protobuf格式对获取的指标数据中的指标值进行序列化,以得到相应的二进制比特数组形式的Value。
优选的,所述键值数据库中包含有多个存储区域,且其中每至少两个存储区域之间互为备份。
优选的,还包括管理模块、中转模块及分别与每个所述Prometheus对应的代理模块;其中:
所述管理模块用于:配置需要监听的服务并发送至所述中转模块;
所述中转模块用于:保存接收到的需要监听的服务;
所述代理模块用于:从所述中转模块中读取并抢占需要监听的服务,且在抢占到任意服务后指示对应Prometheus对该任意服务进行监听;其中,任意服务同一时间仅能被一个所述代理模块抢占到。
优选的,所述中转模块具体为分布式raft集群,所述分布式raft集群包含一个主节点及至少一个从节点,所述主节点实现所述中转模块应实现的操作,所述从节点保持与所述主节点的数据同步,且在所述主节点发生故障时,任意从节点成为新的主节点实现所述中转模块应实现的各项操作。
本发明提供的一种分布式数据存取系统,包括键值数据库、多个Prometheus以及分别与每个所述Prometheus对应的读写适配器;其中:所述Prometheus用于:监听自身需要监听的服务以获取对应指标的指标数据,以及获取自身所对应的读写适配器返回的指标数据;所述读写适配器用于:获取自身所对应的Prometheus监听到的指标数据,并将获取的指标数据写入所述键值数据库,以及从所述键值数据库中查询自身所对应的Prometheus需要的指标数据,并返回查询到的指标数据;所述键值数据库用于:保存写入的指标数据以供查询。本申请中在多个Prometheus及键值数据库之间设置读写适配器,从而能够将Prometheus监控到的指标数据通过读写适配器写入至键值数据库,以及将Prometheus需要查询的指标数据通过读写适配器从键值数据库中查询,从而在提供保存指标数据到本地磁盘的同时,还提供保存指标数据到远端的键值数据库,从而能够提高存储空间及IOPS,能够在抓取大量服务数据时支持高并发存储和访问,且能够长期保存数据,对数据分析和挖掘是有利的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种分布式数据存取系统的第一种结构示意图;
图2为本发明实施例提供的一种分布式数据存取系统中prometheus的节点架构图;
图3为本发明实施例提供的一种分布式数据存取系统的第二种结构示意图;
图4为本发明实施例提供的一种分布式数据存取系统中Agent进程状态转换关系图;
图5为本发明实施例提供的一种分布式数据存取系统中数据查询流图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,其示出了本发明实施例提供的一种分布式数据存取系统的结构示意图,可以包括键值数据库、多个Prometheus以及分别与每个所述Prometheus对应的读写适配器;其中:
所述Prometheus用于:监听自身需要监听的服务以获取对应指标的指标数据,以及获取自身所对应的读写适配器返回的指标数据;
所述读写适配器用于:获取自身所对应的Prometheus监听到的指标数据,并将获取的指标数据写入所述键值数据库,以及从所述键值数据库中查询自身所对应的Prometheus需要的指标数据,并返回查询到的指标数据;
所述键值数据库用于:保存写入的指标数据以供查询。
其中,prometheus(或者可以称之为prometheus服务节点)与现有技术中对应概念的含义相同,其节点架构图可以如图2所示。目前需要监控指标数据每天采集量为1亿左右,采用传统的本地磁盘不能解决海量数据存储和高并发查询的IOPS;本申请实施例为了实现海量指标数据分布式存储和快速查询,可以在每个Prometheus服务节点上部署数据远端读写适配器(Adapter,可简称为读写适配器),通过Adapter把指标数据发送到远端的键值分布式存储数据库(可简称为键值数据库)进行存储;当有读取指标数据的请求产生时,Adapter根据请求构造访问键值数据库的快速结构,然后基于该快速结构查询到相应的指标数据后返回给Prometheus。具体来说,本申请实施例中Prometheus会监听相应服务以获取各项指标的指标数据,然后将获取的指标数据通过读写适配器写入至键值数据库中,进而在Prometheus需要读取指标数据时,则可以通过读写适配器你从键值数据库中实现所需指标数据的查询,从而实现Prometheus存储的扩展。
但是Prometheus只提供保存指标数据到本地磁盘,由于本地存储空间有限,而且IOPS比较低,当需要抓取大量服务数据时,目前是不能支持高并发存储和访问的,而且不能长期保存数据,对数据分析和挖掘是不利的。
本申请中在多个Prometheus及键值数据库之间设置读写适配器,从而能够将Prometheus监控到的指标数据通过读写适配器写入至键值数据库,以及将Prometheus需要查询的指标数据通过读写适配器从键值数据库中查询,从而在提供保存指标数据到本地磁盘的同时,还提供保存指标数据到远端的键值数据库,从而能够提高存储空间及IOPS,能够在抓取大量服务数据时支持高并发存储和访问,且能够长期保存数据,对数据分析和挖掘是有利的。
本发明实施例提供的一种分布式数据存取系统,所述读写适配器将获取的指标数据写入所述键值数据库具体可以为:将包含对应指标的指标名称、指标值及产生时间的指标数据构造为预设格式的数据后,写入所述键值数据库;
所述读写适配器从所述键值数据库中查询自身所对应的Prometheus需要的指标数据具体可以为:将需要查询的指标数据的指标名称及产生时间的范围传输至所述键值数据库,以查询相应的指标数据。
其中,指标可以包括服务实现信息反馈的时长、处理数据的时长等信息,当然根据实际需要进行的其他设定也均在本发明的保护范围之内。本申请实施例中在获取指标数据时具体可以获取包括指标名称(如信息反馈时长、处理数据时长等)、指标值(指标的具体取值)及指标数据的产生时间,进而将指标数据构造为根据实际需要设定的格式(如json格式等)的数据后,将指标数据写入键值数据库,从而在需要查询键值数据库中某指标在一定时间范围内的指标值时,可以利用指标的名称及需要查询的指标值所属的产生时间的时间范围进行查询,从而能够快速获取该时间范围内相应指标名称的指标值,从而大大提高数据查询速度。
本发明实施例提供的一种分布式数据存取系统,所述读写适配器将获取的指标数据构造为预设格式的数据具体可以为:基于获取的指标数据,构造包含指标名称、分隔符、产生时间及全局唯一ID的Key,以及包含指标值的Value,得到由构造的Key及Value组成的预设格式的数据。
需要说明的是,本申请中预设格式可以根据实际需要设定,在本实施例中可以获取到指标数据后,构造包含该指标数据中指标名称、分隔符、产生时间及为其分配的全部唯一ID的Key,以及包含该指标数据中指标值的Value,从而将构造的Key及Value组成预设格式的数据后进行存储,从而便于实现对数据的存储及后续的查询。
在一种具体实现方式中,所述读写适配器构造包含指标值的Value具体可以为:采用protobuf格式对获取的指标数据中的指标值进行序列化,以得到相应的二进制比特数组形式的Value。从而通过这种方式实现对指标数据中指标值的处理,从而能够便于实现对指标值的存储。
另外为了进一步保证数据存储的可靠性,本申请实施例中所述键值数据库中可以包含有多个存储区域,且其中每至少两个存储区域之间互为备份。从而在任意存储区域发生故障无法正常读取时,能够从其备份的存储区域中读取所需的数据。
在一种具体实现方式中,键值数据库具体为KV键值数据库,本申请在每个Prometheus服务节点上部署数据远端读写适配器(Adapter),通过Adapter把指标数据发送到远端的键值数据库(Prometheus把指标数据发送到adapter,adapter收到数据后再发给远端的兼职数据库,指标数据即promethues根据Agent进程提供的服务目录抓取到的监控数据信息)。当有请求产生时,Adapter根据请求构造访问键值数据库的快速结构,然后实现相应查询后把查询结果返回给Prometheus。主要可以包括写数据及读数据,且其中的时间均为相应数据的产生时间,具体如下:
1、写数据:
指标数据的原始数据格式,以如下的node_exporter数据为例:
"[name:\"__name__\"
Value:\"node_sockstat_UDP_mem_bytes\"
name:\"instance\"
Value:\"localhost:9100\"
name:\"job\"
Value:\"node_exporter\"]:
[{16384 1616141094305}]
该数据主要由两部分组成“指标tag”和“时间戳的样本值”,其中,“指标tag”以name和Value格式描述每个tag的名字和值,“时间戳的样本值”采用float64和unixtime作为相应的值。获取到该数据后进行重新构造保存到键值数据库的结构,包含Key和Value两部分:
Key:指标标签的字节数组+分隔符(1字节)+unix时间(8字节)+Gid(8字节);
指标标签的字节数组:指上例中的“node_sockstat_UDP_mem_bytes”转换为字节数组;
分隔符:“\xff”占用1字节,二进制表示为[1111 1111];
unix时间:1970年01月01日00时00分00秒到当前的毫秒数,例如“1616141094305”,为了节省空间开销,该字符串占用13字节,转为换int64表示,只需要8个字节,节省1/2存储空间;
Gid:全局唯一ID,为了使每个保存的Key是唯一值,需要在最后添加64位的唯一序列码。
通过以上方法为每一个指标构造一个唯一的Key,并且该Key能保证按照时间范围查询时,同一个指标的所有数据是有序的,从而减少磁盘和网络的IO时间。
构造好Key之后,需要对Value(即指标值)进行重构;本方案采用protobuf格式对Value进行序列化并保存为二进制byte数组。由于Value没有可查询性,为了减小Value的字节长度和解析时间,故采用protobuf数据格式序列化数据。
2、读数据:
该请求原始数据格式如下,以Promethes PromQL为例,在读取数据时,需根据请求数据构造查询字符串,查询字符串包括起始Key和结束Key,定义如下:
{"开始时间":1613722018548,
"结束时间":1613973600000,
"查询关键字":[
{"name":"host","Value":"localhost"},
{"type":2,"name":"instance","Value":"localhost:8080"},
{"type":1,"name":"job","Value":"cadvisor"},
{"type":3,"name":"sunzheng","Value":"nihao"},
{"name":"__name__","Value":"up"}
]
}
StartKey:指标标签的字节数组+分隔符(1字节)+查询开始时间(8字节)+startGID;
EndKey:指标标签的字节数组+分隔符(1字节)+查询结束时间(8字节)+endGID;
字段说明如下:
指标标签的字节数组:查询关键字中,“__name__”所表示的标签;
分隔符:“\xff”,由于“指标标签”的长度不固定,需要通过分隔符来分割指标与后面的字节数据,该分隔符是一个无意义的字符不会和任何字符由冲突;
查询开始时间:请求字符串中的“开始时间”,转换为int64的字节数组形式,占用8字节;
查询结束时间:请求字符串中的“结束时间”,转换为int64的字节数组形式,占用8字节;
startGID:全局唯一ID的最小值int64(0),字节数组格式,占用8个字节,每个bit都为0;
endGID:全局唯一ID的最大值int64(1<<63-1),字节数组格式,占用8个字节,每个bit都为1。
通过以上方法可以构造出需要查询范围指标的起始key和结束key,根据起始key和结束key进行范围查询,可以在常量时间范围内查询到需要的数据,最大的优点查询时间不随指标数据的增加而增长,总能保持在一个固定的时间范围内范围数据,根据测试,在1亿-20亿数据中查询时,可以保证在300ms-800ms之间返回查询结果。另外,根据返回查询批量数据可以减小磁盘IO多次读取的耗时,由于一个指标的数据占用1kb以内,一个region为96MB,查询时间范围80%能保证时查询7天以内的数据,基本上4次网络请求就可以返回所有数据;在接收到返回数据之后,根据查询关键字过滤返回结果。
可见,本申请中键值数据库中的数据是按照键有序排列的,当有请求访问时,可以根据请求的查询名称和时间戳范围构造一个起始查询键和结束查询键,通过查询键的有序性,能保证在固定的值范围内查找,而不随数据总量增加而查询时间增加。
本发明实施例提供的一种分布式数据存取系统,还可以包括管理模块、中转模块及分别与每个所述Prometheus对应的代理模块;其中:
所述管理模块用于:配置需要监听的服务并发送至所述中转模块;
所述中转模块用于:保存接收到的需要监听的服务;
所述代理模块用于:从所述中转模块中读取并抢占需要监听的服务,且在抢占到任意服务后指示对应Prometheus对该任意服务进行监听;其中,任意服务同一时间仅能被一个所述代理模块抢占到。
本申请实施例为了实现prometheus的横向扩展监控,可以为每个prometheus服务节点设置相应的代理模块,代理模块与prometheus服务节点是一一对应的关系,具体来说,代理模块(Agent进程)为部署在各个Prometheus服务节点上的管理进程,其没有直接嵌入到prometheus服务节点当中,而是独立于Prometheus服务节点的一个单独进程,因此Agent进程是以低侵入的方式对接相应Prometheus服务节点的,不受Prometheus服务节点的程序更新和修改的影响,能最大范围兼容各个Prometheus服务节点的版本;并且,各Prometheus服务节点对接的Agent进程分别与中转模块通信连接,能够基于此完成以下核心工作:为了所对接的Prometheus服务节点抢占服务,以使得所对接的Prometheus服务节点能够对抢占到的服务进行监听。
管理模块(或者可以称之为管理服务,也即管理服务进程,能够实现相应信息的统一管理)能够与中转模块进行通信连接,其能够提供用户管理Agent进程的入口,进而在外界人员或者其他模块的触发下配置需要监听的服务,并将需要监听的服务发送至中转模块中,以使得中转模块在接收到需要监听的服务后,保存接收到的需要监听的服务。相应的,中转模块接收到管理模块发送的需要监听的服务后,对接收到的需要监听的服务进行保存,以供prometheus服务节点对中转模块中保存的需要监听的服务进行读取,进而对需要监听的服务进行抢占;具体来说,管理模块还可以为中转模块提供互斥锁,中转模块在任意代理模块抢占到任意需要监听的服务后,则利用互斥锁对该任意需要监听的服务进行锁定,也即不再允许该任意代理模块之外的其他代理模块对该任意需要监听的服务进行抢占,因此任意需要监听的服务在同一时间仅允许被一个代理模块抢占到。
综上,本申请实施例中的分布式数据存取系统实现工作的过程可以包括:管理模块配置需要监听的服务并发送至中转模块;中转模块对接收到的需要监听的服务进行保存;代理模块从中转模块中读取并抢占需要监听的服务,并在抢占到任意服务后,指示所对接的prometheus服务节点对该任意服务进行监听;从而实现prometheus的横向扩展监控。
本申请中通过多个代理模块对接有多个prometheus,从而在管理模块配置并发送需要监听的服务至中转模块中保存后,上述多个代理模块能够从中转模块中读取并抢占需要监听的服务,进而使得所对接的prometheus能够对抢占到的服务进行监听。可见,本申请能够使得多个Prometheus协同工作,进而提供横向扩展监控能力。
本发明实施例提供的一种分布式数据存取系统,所述代理模块还可以用于:定时发送心跳信息至所述中转模块中保存;
所述管理模块还可以用于:从所述中转模块中读取所述心跳信息,并在通过所述心跳信息确定任意代理模块的工作状态异常时,将该任意代理模块所对应的Prometheus需要监听的服务收回并发送至所述中转模块。
需要说明的是,中转模块还用于同步所有Prometheus的心跳信息,具体来说,代理模块会定时向中转模块发送心跳信息,以通过心跳信息证明自己还在工作,这样管理模块就能够通过代理模块发送的信息判断代理模块的工作状态,如果自上次接收到任意代理模块的心跳信息后,经过根据实际需要设定的一定时间段后还未接收到该任意代理模块发送的心跳信息,则说明该任意代理模块并未正常工作,也即其无法再正常实现所对接的Prometheus与其他Prometheus之间的协同工作,因此本申请实施例则需要收回该任意代理模块所对接的Prometheus当前需要监听的服务,进而将这些回收的服务发送至中转模块中进行保存,以供该任意代理模块之外的其他代理模块对中转模块中保存的回收的这些服务进行抢占。可见,本申请能够通过代理模块的心跳信息确定代理模块的工作状态,进而在代理模块无法正常工作时,将代理模块所对接的Prometheus需监听的服务回收后再由其他代理模块所对接的Prometheus实现相应监听,从而保证参与协同工作的全部代理模块均能够正常工作,进而有效实现服务监听。
本发明实施例提供的一种分布式数据存取系统,所述管理模块还可以用于:将相应的控制信息发送至所述中转模块中保存;
所述代理模块还可以用于:从所述中转模块中读取与自身对应Prometheus相应的控制信息,并基于读取到的控制信息实现对自身对应Prometheus的开启控制或者关闭控制。
需要说明的是,中转模块还用于同步所有Prometheus的控制信息,具体来说,控制信息也可以称为控制命令,其是一种消息报文,管理模块能够在外界人员或者其他模块的触发下生产相应的控制信息,然后将控制信息发送至中转模块中,以使得中转模块对这些控制信息进行保存,每个代理模块中的任意代理模块从中转模块中读取其保存的控制信息,如果中转模块中保存的控制信息为与该任意代理模块所对接的Prometheus对应的控制信息,则该任意代理模块在该控制信息的控制下实现对所对接的Prometheus的控制,本申请实施例中的控制可以包括对应Prometheus的关闭、开启及暂停工作等控制,均在本发明的保护范围之内。可见,本申请管理模块能够通过中转模块及代理模块实现对相应Prometheus的控制,便于实现对Prometheus的使用等操作。
本发明实施例提供的一种分布式数据存取系统,所述管理模块还可以用于:将相应的配置信息发送至所述中转模块中保存;
所述代理模块还可以用于:从所述中转模块中读取与自身对应Prometheus相应的配置信息,并基于读取到的配置信息更新自身对应Prometheus的配置。
需要说明的是,中转模块还用于同步所有Prometheus的配置信息,具体来说,配置信息可以以包含于配置文件中,相应的,管理模块可以将包含有配置信息的配置文件发送至中转模块中,以使得中转模块对接收到的配置文件进行保存,任意代理模块从中转模块中读取配置信息,如果中转模块中保存有与该任意代理模块所对接的Prometheus对应的配置信息,则该任意代理模块则利用该配置信息更新自身所对接的Prometheus的配置;其中,更新Prometheus的配置可以包括采集所监听的服务的数据的时间间隔、采集时间等,当然根据实际需要进行的其他设定(如需监听的服务、信息规则文件等)也均在本发明的保护范围之内。
本发明实施例提供的一种分布式数据存取系统,所述Prometheus具体可以用于:获取所监听的服务对应各项指标的指标值,并在监听到的任意指标值不符合要求时将相应报警信息发送至所述中转模块中保存;
所述管理模块还可以用于:从所述中转模块中读取所述报警信息,并将所述报警信息发送至相应的管理终端。
需要说明的是,本申请实施例中Prometheus监听相应的服务可以是服务对应各项指标的指标值,进而将获取的指标值分别与预先设定的相应的合理的取值范围进行比对,如果任意指标值不在相应合理的取值范围内,则说明该任意指标值不符合要求,因此生成相应的报警信息,并将报警信息发送至中转模块中进行保存;管理模块可以从中转模块中读取其保存的所有的报警信息,然后将这些报警信息进行统一管理,包括将其发送至相应的管理终端等操作。其中,指标可以包括服务实现信息反馈的时长、处理数据的时长等信息,当然根据实际需要进行的其他设定也均在本发明的保护范围之内。可见,本申请中Prometheus可以监听服务对应各项指标的指标值,进而在监听到的任意指标值不符合要求时发送相应报警信息至中转模块中保存,以使得管理模块能从中转模块中读取报警信息并进行发送至管理终端等管理,从而便于实现对各项服务是否正常的有效监听。
本发明实施例提供的一种分布式数据存取系统,所述管理模块还可以用于:将相应的信息规则文件发送至所述中转模块中保存;
所述代理模块还可以用于:从所述中转模块中读取所述信息规则文件,以指示与自身对应的Prometheus将所述报警信息按照所述信息规则文件进行处理,以执行发送至所述中转模块中保存的操作。
需要说明的是,信息规则文件中可以包含需要对报警信息进行处理的方式,如将报警信息处理为JSON格式等;相应的,管理模块可以在外界人员或者其他模块的触发下获取相应的信息规则文件,然后将获取的信息规则文件发送至中转模块中,以使得中转模块对接收到的信息规则文件进行保存;每个代理模块均需到中转模块中进行信息规则文件的读取,然后每个代理模块均需按照读取到的信息规则文件对报警信息进行相应的数据处理,进而将处理所得的数据发送至中转模块中进行保存。可见,本申请中可以按照需求将报警信息均按照所需的方式进行处理,进而将这些报警信息再传送给中转模块,便于管理模块对中转模块中统一数据处理后的报警信息的获取。
本发明实施例提供的一种分布式数据存取系统,所述中转模块可以包含有多个目录,每个目录分别用于保存所述代理模块发送的心跳信息、所述管理模块发送的信息规则文件以及所述管理模块发送的需要监听的服务,以供读取。
需要说明的是,本申请实施例中的中转模块可以包括有三个目录结构,这三个目录结构分别用于保存心跳信息、信息规则文件以及需要监听的服务,从而方便对相应信息的保存以供获取;具体来说,本申请实施例中设计中转模块中的目录结构可以如下:
*/agent/目录(用于保存心跳信息的目录):该目录用于保存各个Agent进程的心跳信息,管理模块通过监听该目录的变化能实时感知各个Agent进程的工作状态;由于Agent进程是部署在相应Prometheus中的,因此Agent进程的工作状态也能表示其所属Prometheus的工作状态。该目录下的键值数据格式可以如下:
KEY:IP地址_PORT
VALUE::{
TimeStamp:上一次发送心跳信息的时间
Url:Prometheus的url信息
}
当Agent进程在指定时间内没有发送心跳信息到中转模块时,该中转模块会删除该KEY(即IP地址_PORT;中转模块可以设置超时回调,如果Agent进程没有在指定时间发送心跳信息,就会删除该Agent进程往”/agent目录”写入的数据,即该KEY也是中转模块内部保存数据的一种数据结构)和对应数据,管理模块监听到该Agent进程的信息被删除后,会把Prometheus监听的服务信息分发到其他Agent进程工作。
*/Rule/目录(用于保存信息规则文件的目录):该目录保存管理模块配置的各种Rule文件(即信息规则文件),Agent进程监听该目录的变化消息,并根据KEY读取/Rule/目录下的信息规则文件,然后将信息规则文件更新到promethues中。该目录下的键值数据格式可以如下:
KEY:promethes_url
VALYE:{
Rule_id:每个Rule的id
Rule_content:byte编码后的规则内容
}
Agent进程根据自己管理的Prometheus信息监听和抓取/Rule/目录下的Rule文件;当该Agent进程的Prometheus发生进程宕机后,管理模块能够监听到Agent进程的变化,并重新分配Rule文件到其他Prometheus。
*/service/目录(用于保存服务的目录):该目录保存需要监听的服务,由管理模块配置并发送到中转模块;Agent进程监听/service/目录变化,采用互斥锁的方式抢占/service/目录下需要监听的服务(一个服务只能由一个Agent进程抓取,无法让多个Agent进程都抓取,避免出现重复数据的获取);最先抢占到任意服务的Agent进程优先获得该任意服务的控制权限;其中,保存的需要监听的服务可以包括prometheus需要抓取的target信息,可以包含三部分:ip地址、端口和路径。/service/目录的键值数据数据可以如下:
Rule文件中可以包括for子句、labels子句、annotations子句,for子句使Prometheus在第一次遇到新的表达式输出向量元素和将此警告作为此元素的触发计数之间等待一段时间,在这种情况下Prometheus将在每次评估期间检查警报是否继续处于活动状态10分钟,然后再触发警报,而处于活动状态但尚未触发的元素处于pending状态;labels子句允许指定要附加到警报的一组附加标签,任何现有的冲突标签都将被覆盖,标签值可以是模板化的;annotations子句指定一组信息标签,可用于存储更长的附加信息,例如警报描述或Runbook链接,注释值可以是模板化的。
相应的在启动Agent进程时会传入一个参数,指定该Agent进程管理的prometheus的地址,即prometheus_url;管理模块发送到中转模块的Rule文件就可以包含该prometheus_url,Agent进程通过对比自己的prometheus_url和Rule文件中的prometheusurl可以知道自己该读取那些Rule文件。
本发明实施例提供的一种分布式数据存取系统,所述中转模块具体可以为分布式raft集群,所述分布式raft集群包含一个主节点及至少一个从节点,所述主节点实现所述中转模块应实现的各项操作,所述从节点保持与所述主节点的数据同步,且在所述主节点发生故障时,任意从节点成为新的主节点实现所述中转模块应实现的各项操作。
需要说明的是,分布式raft中的节点则为raft节点,通过上述设置,能够在主节点发生故障时由从节点替代主节点,继续完成主节点需完成的操作,从而通过这种方式保证中转模块相应功能的顺利实现。
在一种具体实现方式中,如图3所示,本申请实施例提供的分布式数据存取系统可以由三部分构成,具体如下:
分布式raft集群:用于同步所有Prometheus的配置信息和心跳信息;具体来说,采用分布式raft协议实现的分布式raft集群主要目的是实现配置信息、心跳信息和互斥锁的统一管理,并协同各个Agent进程之间的工作状态和配置信息的同步。
管理服务:1.负责发送配置信息和控制信息到分布式raft集群,并从分布式raft集群获取各个Agent进程的工作状态;2.通过分布式raft集群的心跳信息判断各个Prometheus的工作状态;3.负责统一管理报警信息,并发送报警。
Agent进程:部署在各个Prometheus服务节点上的管理进程;Agent进程以低侵入的方式对接相应的Prometheus服务节点,不受Prometheus服务节点程序更新和修改的影响,能最大范围兼容各个Prometheus版本;Agent主要完成以下核心工作:第一,发送心跳信息到分布式raft集群;第二,从分布式raft集群获取配置信息,然后更新Prometheus的配置;第三,负责根据分布式raft集群提供的Rule文件从prometheus中获取报警信息发送给管理模块。
相应的,本申请实施例提供的分布式数据存取系统的实施可以包括:
1.构造分布式raft集群。raft一致性集群本身具有在分布式环境下的高可用性,该集群用于Agent进程之间的状态数据、心跳数据同步,并保存各个Prometheus的数据共享和实现排他锁服务的能力;并且,管理模块可以通过分布式raft集群发送配置信息和监听相应Agent进程的工作状态。
2.在安装Prometheus的服务器上启动Agent进程,Agent进程的状态转换关系可以如图4所示,具体可以包括:
①在部署有Prometheus的服务器上启动Agent进程;
②Agent进程会启动三个子进程,分别为节点管理进程、Rules管理进程和services管理进程。
③节点管理进程:负责注册本机Prometheus的信息到分布式raft集群中,并定时更新数据,发送心跳信息。
④Rules管理进程:负责监听分布式raft集群的Rule目录,启动时先根据Rule目录遍历所有Prometheus的Rule保存到本地,再监听该目录变化,如果有Rule文件的增删改查再更新到本地Prometheus中。
⑤service管理进程:负责监听分布式raft集群的service目录,抢占需要抓取的服务,并把抢占到的服务发布到本地Prometheus中。
而基于键值数据库实现的数据查询流图可以如图5所示,实现海量数据的快速访问可以包括:
①Prometheus发送请求到Adapter进程;
②Adapter进程接收请求后,根据上述方式构造StarKey和EndKey数据;
③Adapter进程根据上述StarKey和EndKey在分布式raft集群中查询键值范围数据所在键值数据库包含的kvdb服务器。
④根据分布式raft集群的返回结果向指定的键值数据库查询需要的数据。
⑤Adapter进程根据查询结果封装RPC请求,返回结果到Prometheus,一次查询结束。
采用以上查询方法,不管数据量有多大,都能在最多4次请求后返回需要的数据,保证了查询时间不随数据量增加而增加,总能在指定时间内返回。并且由于监控指标数据量巨大,达到上百亿数据量,才用本方法更能体现出大数据量查询带来的优势。
可见,本申请为多个Prometheus提供一种协同工作的解决方案,能让多个Prometheus协同工作,为Prometheus提供高可用、高并发、可扩展的集群能力;且为多个Prometheus提供统一的、高并发的共享KV存储系统适配器,实现海量监控指标的保存与快速查询,在上十亿指标查询中能提供快速的结果返回能力。具体来说,本申请解决海量数据的长效保存和实时查询的问题,并解决多个Prometheus之间的协同工作的问题,简化人工管理,因而带来了以下几个新特征:
1.提供多个Prometheus外部存储代理,可以实现多个Prometheus共同保存海量指标数据,实现在海量指标查询中毫秒级返回,并且查询效率不随数据量增加而增大。提供了一种海量数据实时查询的创新方案,并且该方案部署简单、实施高效,不需要特殊硬件就能满足所有需求。
2.提供多个Prometheus协同工作代理,解决了多个Prometheus之间不能协同工作的问题,为Prometheus横向扩展和集群化部署提供一种新的方法,该方法部署实施简单,在生产环境可行性高。
3.为本发明提供统一的用户管理接口,实现用户的可视化管理能力。
另外,本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (6)
1.一种分布式数据存取系统,其特征在于,包括键值数据库、多个Prometheus、管理模块、中转模块以及分别与每个所述Prometheus对应的代理模块和读写适配器;其中:
所述Prometheus用于:监听自身需要监听的服务以获取对应指标的指标数据,以及获取自身所对应的读写适配器返回的指标数据;
所述读写适配器用于:获取自身所对应的Prometheus监听到的指标数据,并将获取的指标数据写入所述键值数据库,以及从所述键值数据库中查询自身所对应的Prometheus需要的指标数据,并返回查询到的指标数据;
所述键值数据库用于:保存写入的指标数据以供查询;
所述管理模块用于:配置需要监听的服务并发送至所述中转模块;
所述中转模块用于:保存接收到的需要监听的服务;
所述代理模块用于:从所述中转模块中读取并抢占需要监听的服务,且在抢占到任意服务后指示对应Prometheus对该任意服务进行监听;其中,任意服务同一时间仅能被一个所述代理模块抢占到。
2.根据权利要求1所述的系统,其特征在于,所述读写适配器将获取的指标数据写入所述键值数据库具体为:将包含对应指标的指标名称、指标值及产生时间的指标数据构造为预设格式的数据后,写入所述键值数据库;
所述读写适配器从所述键值数据库中查询自身所对应的Prometheus需要的指标数据具体为:将需要查询的指标数据的指标名称及产生时间的范围传输至所述键值数据库,以查询相应的指标数据。
3.根据权利要求2所述的系统,其特征在于,所述读写适配器将获取的指标数据构造为预设格式的数据具体为:基于获取的指标数据,构造包含指标名称、分隔符、产生时间及全局唯一ID的Key,以及包含指标值的Value,得到由构造的Key及Value组成的预设格式的数据。
4.根据权利要求3所述的系统,其特征在于,所述读写适配器构造包含指标值的Value具体为:采用protobuf格式对获取的指标数据中的指标值进行序列化,以得到相应的二进制比特数组形式的Value。
5.根据权利要求4所述的系统,其特征在于,所述键值数据库中包含有多个存储区域,且其中每至少两个存储区域之间互为备份。
6.根据权利要求1所述的系统,其特征在于,所述中转模块具体为分布式raft集群,所述分布式raft集群包含一个主节点及至少一个从节点,所述主节点实现所述中转模块应实现的操作,所述从节点保持与所述主节点的数据同步,且在所述主节点发生故障时,任意从节点成为新的主节点实现所述中转模块应实现的各项操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110656873.8A CN113377816B (zh) | 2021-06-11 | 2021-06-11 | 一种分布式数据存取系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110656873.8A CN113377816B (zh) | 2021-06-11 | 2021-06-11 | 一种分布式数据存取系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113377816A CN113377816A (zh) | 2021-09-10 |
CN113377816B true CN113377816B (zh) | 2022-10-25 |
Family
ID=77574426
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110656873.8A Active CN113377816B (zh) | 2021-06-11 | 2021-06-11 | 一种分布式数据存取系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113377816B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116166846B (zh) * | 2023-04-13 | 2023-08-01 | 广东广宇科技发展有限公司 | 一种基于云计算的分布式多维数据处理方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109840142A (zh) * | 2018-12-15 | 2019-06-04 | 平安科技(深圳)有限公司 | 基于云监控的线程控制方法、装置、电子设备及存储介质 |
CN110347377A (zh) * | 2019-07-08 | 2019-10-18 | 紫光云技术有限公司 | 一种Prometheus exporter数据库监控系统 |
CN111625551A (zh) * | 2020-05-15 | 2020-09-04 | 贵州易鲸捷信息技术有限公司 | 基于ElasticSearch存储的数据库监控数据高可用系统及其实现方法 |
CN112199419A (zh) * | 2020-10-09 | 2021-01-08 | 深圳市欢太科技有限公司 | 一种分布式时序数据库、存储方法、设备及存储介质 |
US10979516B1 (en) * | 2020-03-27 | 2021-04-13 | Mastercard International Incorporated | Monitoring and managing services in legacy systems using cloud native monitoring and managing tools |
-
2021
- 2021-06-11 CN CN202110656873.8A patent/CN113377816B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109840142A (zh) * | 2018-12-15 | 2019-06-04 | 平安科技(深圳)有限公司 | 基于云监控的线程控制方法、装置、电子设备及存储介质 |
CN110347377A (zh) * | 2019-07-08 | 2019-10-18 | 紫光云技术有限公司 | 一种Prometheus exporter数据库监控系统 |
US10979516B1 (en) * | 2020-03-27 | 2021-04-13 | Mastercard International Incorporated | Monitoring and managing services in legacy systems using cloud native monitoring and managing tools |
CN111625551A (zh) * | 2020-05-15 | 2020-09-04 | 贵州易鲸捷信息技术有限公司 | 基于ElasticSearch存储的数据库监控数据高可用系统及其实现方法 |
CN112199419A (zh) * | 2020-10-09 | 2021-01-08 | 深圳市欢太科技有限公司 | 一种分布式时序数据库、存储方法、设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
Horizontal Pod Autoscaling in Kubernetes for Elastic Container Orchestration;Thanh-Tung Nguyen等;《Sensors》;20200817;第20卷(第16期);1-18 * |
企业信息系统运行监控平台的解决方案;李灿;《红水河》;20200425(第02期);93-95 * |
应用于虚拟现实的分布式服务器架构研究;陈丹阳;《中国优秀硕士学位论文全文数据库 信息科技辑》;20190115(第01期);I138-4878 * |
Also Published As
Publication number | Publication date |
---|---|
CN113377816A (zh) | 2021-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200186602A1 (en) | Continuous backup of data in a distributed data store | |
US11755415B2 (en) | Variable data replication for storage implementing data backup | |
US10831614B2 (en) | Visualizing restoration operation granularity for a database | |
CA2910270C (en) | Efficient read replicas | |
US7653668B1 (en) | Fault tolerant multi-stage data replication with relaxed coherency guarantees | |
US7590667B2 (en) | File replication method for distributed file systems | |
US8150800B2 (en) | Advanced clock synchronization technique | |
US6122639A (en) | Network device information collection and change detection | |
US9507842B2 (en) | System for replication-driven repository cache invalidation across multiple data centers | |
US10990629B2 (en) | Storing and identifying metadata through extended properties in a historization system | |
KR20180021679A (ko) | 일관된 데이터베이스 스냅샷들을 이용한 분산 데이터베이스에서의 백업 및 복원 | |
US10409804B2 (en) | Reducing I/O operations for on-demand demand data page generation | |
CN107302569B (zh) | 一种面向云平台的安全监控数据采集与存储方法 | |
JP2003241903A (ja) | 記憶制御装置、ストレージシステム、及びその制御方法 | |
US20150363484A1 (en) | Storing and identifying metadata through extended properties in a historization system | |
US10885023B1 (en) | Asynchronous processing for synchronous requests in a database | |
US10585752B1 (en) | Intelligent snapshot cataloging using separate logical containers to reduce snapshot query times | |
CN115185891B (zh) | 文件系统的数据管理方法及装置、电子设备及存储介质 | |
WO2020125452A1 (zh) | 配置数据处理方法、软件定义网络设备、系统及存储介质 | |
CN104468274A (zh) | 一种集群监控管理方法及系统 | |
CN113377816B (zh) | 一种分布式数据存取系统 | |
CN113377617B (zh) | 一种监控系统 | |
CN112181950B (zh) | 一种分布式对象数据库的构建方法 | |
CN112543222A (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
US7676475B2 (en) | System and method for efficient meta-data driven instrumentation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |