一种链路关系存储方法、装置、设备及介质与流程

阅读: 评论:0



1.本发明涉及计算机技术领域,特别涉及一种链路关系存储方法、装置、设备及介质。


背景技术:



2.随着客户应用服务之间的调用关系愈加复杂,每一个请求会经过多个应用的业务系统,并产生对各种业务、缓存或者db(data base,即数据库)的访问,但是这些分散的应用数据对于问题排查,或者流程优化提供的帮助很有限。当前是将各应用的日志数据通过代码埋点的方式进行日志收集,并在收集完成后将每条日志实时写入日志系统进行查询定位及展示。然而通过代码埋点进行日志数据存储,对于生产环境下百亿级的日志数据,若采样率过高,则会影响应用系统的吞吐量,从而给业务造成影响;若采样率过低,则会影响相关链路关系的完整性存储及统计。
3.综上,如何理清多应用服务间相互调用生成海量日志数据的链路关系,并对链路关系进行高效存储是目前有待解决的问题。


技术实现要素:



4.有鉴于此,本发明的目的在于提供一种链路关系存储方法、装置、设备及介质,能够理清多应用服务间相互调用生成海量日志数据的链路关系,并对链路关系进行高效存储。其具体方案如下:
5.第一方面,本技术公开了一种链路关系存储方法,包括:
6.通过计算服务端按照预设规则获取日志数据,并将所述日志数据发送至内存数据队列,然后通过若干个计算协程从所述内存数据队列中获取请求日志数据,并根据与所述请求日志数据对应的请求id确定出存储分片的索引序号;
7.基于所述索引序号定位所述存储分片中的单切片字典,并在所述单切片字典存在所述请求id时锁定该单切片字典;
8.根据所述请求id获取所述单切片字典中的请求数据,并计算所述请求数据的当前层级号,然后基于所述当前层级号检测当前层级是否存在spanid数据集;
9.若存在所述spanid数据集,则利用创建的请求实体数据对所述当前层级的spanid切片字典进行赋值,并基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新;
10.按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,以得到链路关系数据,并将所述链路关系数据存储至数据库。
11.可选的,所述通过计算服务端按照预设规则获取日志数据,包括:
12.预设日志消费端通过基于grpc协议的第一协程向计算服务端上报日志数据;
13.通过所述计算服务端基于http协议的第二协程从所述预设日志消费端拉取日志数据。
14.可选的,所述根据与所述请求日志数据对应的请求id确定出存储分片的索引序号,包括:
15.确定与所述请求日志数据对应的请求id,并通过预设哈希算法计算与所述请求id对应的哈希值;
16.基于所述哈希值和存储分片数量确定出存储分片的索引序号。
17.可选的,所述通过若干个协程从所述内存数据队列中获取请求日志数据之后,还包括:
18.根据所述请求日志数据的方法id获取相应的应用id和类id;
19.相应的,所述基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新之前,还包括:
20.基于所述方法id、应用id和类id计算链路的指纹id。
21.所述按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,包括:
22.每隔预设时间间隔轮询所述链路树分片缓存以获取链路树分片缓存对象,并根据链路分片数量分配每一协程的待处理数据任务;
23.通过每一协程获取相应的单片数据拷贝,并执行链路树顶层节点中请求实体数据的计算流程,并在顶层节点计算成功后执行链路树子层节点中请求实体数据的计算流程,直到遍历完所有链路树节点。
24.所述执行链路树顶层节点中请求实体数据的计算流程的过程中,还包括:
25.检测层级号数据组中是否存在相应的顶层节点号,若存在,则检测所述链路树是否有断层或断层号是否超过预设数量;
26.若无断层或断层号不超过所述预设数量,则获取所述链路树顶层节点对应的spanid,并创建顶层链路树的实体节点。
27.所述执行链路树子层节点中请求实体数据的计算流程的过程中,还包括:
28.检测当前子层节点是否存在对应的spanid,若存在,则检测所述当前子层节点是否包括上级节点的spanid特征信息;
29.若包括,则基于所述spanid特征信息获取相应的实体列表,并对所述实体列表进行遍历以得到本层节点信息。
30.第二方面,本技术公开了一种链路关系存储装置,包括:
31.数据获取模块,用于通过计算服务端按照预设规则获取日志数据,并将所述日志数据发送至内存数据队列,然后通过若干个协程从所述内存数据队列中获取请求日志数据,并根据与所述请求日志数据对应的请求id确定出存储分片的索引序号;
32.存储分片确定模块,用于基于所述索引序号定位单切片字典,并在所述单切片字典存在所述请求id时锁定该单切片字典;
33.链路层级检测模块,用于根据所述请求id获取所述单切片字典中的请求数据,并计算所述请求数据的当前层级号,然后基于所述当前层级号检测当前层级是否存在spanid数据集;
34.链路缓存更新模块,用于若存在所述spanid数据集,则利用创建的请求实体数据对所述当前层级的spanid切片字典进行赋值,并基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新;
35.链路数据存储模块,用于按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,以得到链路关系数据,并将所述链路关系数据存储至数据库。
36.第三方面,本技术公开了一种电子设备,包括:
37.存储器,用于保存计算机程序;
38.处理器,用于执行所述计算机程序,以实现前述公开的链路关系存储方法的步骤。
39.第四方面,本技术公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述公开的链路关系存储方法的步骤。
40.可见,本技术通过计算服务端按照预设规则获取日志数据,并将所述日志数据发送至内存数据队列,然后通过若干个计算协程从所述内存数据队列中获取请求日志数据,并根据与所述请求日志数据对应的请求id确定出存储分片的索引序号;基于所述索引序号定位所述存储分片中的单切片字典,并在所述单切片字典存在所述请求id时锁定该单切片字典;根据所述请求id获取所述单切片字典中的请求数据,并计算所述请求数据的当前层级号,然后基于所述当前层级号检测当前层级是否存在spanid数据集;若存在所述spanid数据集,则利用创建的请求实体数据对所述当前层级的spanid切片字典进行赋值,并基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新;按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,以得到链路关系数据,并将所述链路关系数据存储至数据库。由此可见,本技术先获取日志数据并锁定单切片字典,然后利用创建的请求实体数据对当前层级的spanid切片字典进行赋值,再根据链路指纹id利用请求实体数据对链路树分片缓存进行更新,最后对链路树分片缓存中的数据进行计算,以将链路关系数据存储至数据库。通过上述技术方案能够理清并跟踪多应用服务间相互调用生成海量日志数据的链路关系,并将链路关系高效存储至数据库,降低了服务计算资源和存储资源的开销。
附图说明
41.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
42.图1为本技术公开的一种链路关系存储方法流程图;
43.图2为本技术公开的一种具体的链路关系存储流程示意图;
44.图3为本技术公开的一种日志数据拉取示意图;
45.图4为本技术公开的一种具体的链路关系存储方法流程图;
46.图5为本技术公开的一种具体的链路关系存储流程示意图;
47.图6为本技术公开的一种链路关系存储装置结构示意图;
48.图7为本技术公开的一种电子设备结构图。
具体实施方式
49.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于
本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
50.当前是将各应用的日志数据通过代码埋点的方式进行日志收集,并在收集完成后将每条日志实时写入日志系统进行查询定位及展示。然而通过代码埋点进行日志数据存储,对于生产环境下百亿级的日志数据,若采样率过高,则会影响应用系统的吞吐量,从而给业务造成影响;若采样率过低,则会影响相关链路关系的完整性存储及统计。为此,本技术实施例公开了一种链路关系存储方法、装置、设备及介质,能够理清多应用服务间相互调用生成海量日志数据的链路关系,并对链路关系进行高效存储。
51.参见图1和图2所示,本技术实施例公开了一种链路关系存储方法,该方法包括:
52.步骤s11:通过计算服务端按照预设规则获取日志数据,并将所述日志数据发送至内存数据队列,然后通过若干个计算协程从所述内存数据队列中获取请求日志数据,并根据与所述请求日志数据对应的请求id确定出存储分片的索引序号。
53.本实施例中,上述通过计算服务端按照预设规则获取日志数据,具体可以包括:预设日志消费端通过基于grpc协议的第一协程向计算服务端上报日志数据;通过所述计算服务端基于http协议的第二协程从所述预设日志消费端拉取日志数据。可以理解的是,首先启动计算服务端,初始化缓存分片数,配置等;再启动两个协程a和b,协程a即上述第一协程,利用grpc协议实现计算服务端的数据被动实时接收服务,也即预设日志消费端通过基于grpc协议的第一协程向计算服务端主动上报日志数据;协程b即上述第二协程利用http协议方式到各日志数据消费端实时拉取数据服务,具体可以参见图3所示。协程a服务是主要提供给日志消费端a服务,与计算服务端之间可以相互通信,故采用高效率的grpc长链接通信协议采集数据;协程b服务是主要提供给日志消费b服务,与计算服务端之间单项通信,只能由计算服务端访问日志消费端b,采用http协议方式实时拉取数据。
54.在获取到日志数据后,则将日志数据发送至内存数据队列,也即拉取日志消费端的数据和实时上报的数据,然后统一口径发送到日志内存的数据队列中,接着根据配置的协程数n,启动n个计算协程用来计算接收到队列数据的协程,实时获取队列中的请求日志数据,以及根据与请求日志数据对应的请求id确定出存储分片的索引序号。在具体的实施方式中,上述根据与所述请求日志数据对应的请求id确定出存储分片的索引序号,具体可以包括:确定与所述请求日志数据对应的请求id,并通过预设哈希算法计算与所述请求id对应的哈希值;基于所述哈希值和存储分片数量确定出存储分片的索引序号。也即请求id为字符串序列,通过crc32计算32位整数的hash值,然后除以存储分片数量取余得整数值为存储分片的索引序号。
55.步骤s12:基于所述索引序号定位所述存储分片中的单切片字典,并在所述单切片字典存在所述请求id时锁定该单切片字典。
56.本实施例中,根据索引序号定位到存储分片中的单切片字典,然后在该字典中查是否存在请求id,如果存在请求id,则锁定该单切片字典。
57.步骤s13:根据所述请求id获取所述单切片字典中的请求数据,并计算所述请求数据的当前层级号,然后基于所述当前层级号检测当前层级是否存在spanid数据集。
58.本实施例中,通过请求id取出单切片字典中的请求数据,并计算待更新数据的spanid层号,其中,spanid表示日志层级编号,由被调用方的日志层级编号后追加,例如:顶
层为单个数字1,调用下层后,下层的spanid变为1.1,依次调用时追加编号,以点标识层级。然后通过spanid的层级间隔符“.”来切分计算总数,得出请求日志的当前层级号level;然后在请求树对应层级号数组值中level进行去重,如果不存在该level则增加该level,接着在该请求树的spanid数据集合中,通过层级号level检测是否存在该层的spanid数据集。
59.步骤s14:若存在所述spanid数据集,则利用创建的请求实体数据对所述当前层级的spanid切片字典进行赋值,并基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新。
60.本实施例中,若存在spanid数据集,则对当前层级切片spanid的字典进行赋值请求实体数据;如果不存在spanid数据集,则创建该层spanid数据集,并把当前spanid赋值到数据集。
61.进一步的,在获取到请求日志数据之后,还可以包括:根据所述请求日志数据的方法id获取相应的应用id和类id。通过该请求树中所有方法id、应用id、类id综合计算该链路的指纹id,然后更新该请求实体数据到链路树缓存分片中。
62.需要指出的是,在另一种具体实施例中,若单切片中不存在该请求id,则创建该请求树的空实体字典缓存用以后续步骤存储使用,另外也需计算请求数据的层级号level,然后spanid创建实体数据赋值到切片,最终创建该请求数据到切片实体在链路树缓存分片。
63.步骤s15:按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,以得到链路关系数据,并将所述链路关系数据存储至数据库。
64.本实施例中,按照预设规则轮询计算链路树分片缓存中的请求实体数据以得到链路关系数据,并将链路关系数据存储至数据库。
65.可见,本技术通过计算服务端按照预设规则获取日志数据,并将所述日志数据发送至内存数据队列,然后通过若干个计算协程从所述内存数据队列中获取请求日志数据,并根据与所述请求日志数据对应的请求id确定出存储分片的索引序号;基于所述索引序号定位所述存储分片中的单切片字典,并在所述单切片字典存在所述请求id时锁定该单切片字典;根据所述请求id获取所述单切片字典中的请求数据,并计算所述请求数据的当前层级号,然后基于所述当前层级号检测当前层级是否存在spanid数据集;若存在所述spanid数据集,则利用创建的请求实体数据对所述当前层级的spanid切片字典进行赋值,并基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新;按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,以得到链路关系数据,并将所述链路关系数据存储至数据库。由此可见,本技术先获取日志数据并锁定单切片字典,然后利用创建的请求实体数据对当前层级的spanid切片字典进行赋值,再根据链路指纹id利用请求实体数据对链路树分片缓存进行更新,最后对链路树分片缓存中的数据进行计算,以将链路关系数据存储至数据库。通过上述技术方案能够理清并跟踪多应用服务间相互调用生成海量日志数据的链路关系,并将链路关系高效存储至数据库,降低了服务计算资源和存储资源的开销。
66.在一个具体实施例中,本技术提供了获取链路关系数据的具体步骤,参见图4和图5所示,步骤s15可以具体包括:
67.步骤s151:每隔预设时间间隔轮询所述链路树分片缓存以获取链路树分片缓存对象,并根据链路分片数量分配每一协程的待处理数据任务。
68.本实施例中,首先获取配置文件中分析计算服务的服务数,然后启动相应的计算服务协程每隔预设时间间隔进行轮询任务,处理缓存分片计算;然后获取链路树分片缓存对象,然后根据链路分片数分配各协程需要处理的分片组数据任务。
69.步骤s152:通过每一协程获取相应的单片数据拷贝,并执行链路树顶层节点中请求实体数据的计算流程,并在顶层节点计算成功后执行链路树子层节点中请求实体数据的计算流程,直到遍历完所有链路树节点以得到链路关系数据。
70.本实施例中,根据启动已分配的链路分片缓存数据任务组,进行分配计算。然后则进入各自分配的协程执行过程,首先遍历获取单片数据,并返回单片数据的结果拷贝,拷贝是为了避免在计算中途有数据被更新,避免数据的不一致性,再通过遍历已拷贝的单片数据,执行链路树顶层节点中请求实体数据的计算流程,也即进入top1顶层链路树节点计算流程。在具体实施方式中,该过程包括:检测层级号数据组中是否存在相应的顶层节点号,若存在,则检测所述链路树是否有断层或断层号是否超过预设数量;若无断层或断层号不超过所述预设数量,则获取所述链路树顶层节点对应的spanid,并创建顶层链路树的实体节点。具体的,首先检测层级号level数据组中是否存在顶层节点号1;若不存在丢弃该不完整请求日志数据链;在检测到已存在顶层节点号1情况下,进一步检测该层级树中是否有断层号,若有断层号,是否超过2个,若超过2个断层号则丢弃该请求数据链;然后还需检测root顶层是否存在多个节点spanid,若存在多个节点则为不完整请求数据链路,则需要舍弃该数据;接着根据上一步在请求链路树中计算获取顶层树节点的spanid,顶层树进行赋值创建实体节点,并标记是否有断层以及顶层spanid信息;顶层处理完进行数据库查询和缓存处理。根据上述各步骤的计算结果,判断top0顶层是否计算成功,若计算失败则跳出该请求树计算链路。
71.顶层链路树创建成功后,将db中同步的顶层节点id赋值给topnodeid,顶层节点的方法id赋值给场景id保存节点信息。在顶层节点计算成功后则执行链路树子层节点中请求实体数据的计算流程,起始层级为2,依次递归遍历请求数据集合,在处理中忽略层级为1的顶层,查spanid,可能子层有多个,然后依次遍历,进入子节点关系计算处理流。该流程具体包括:检测当前子层节点是否存在对应的spanid,若存在,则检测所述当前子层节点是否包括上级节点的spanid特征信息;若包括,则基于所述spanid特征信息获取相应的实体列表,并对所述实体列表进行遍历以得到本层节点信息。具体的,首先检测子层level中是否有多个spanid,若该层级一个spanid没有则放弃该层数据计算;若存在子层spanid则进行计算是否包含上级节点spanid特征信息,若不包含则放弃该层处理;根据父节点下所包含的spanid获取实体列表集进行遍历,对不含spanid特征的实体集,丢弃该数据;获取实体列表,当前层级的spanid,父节点的场景id,父节点的id,获取当前层级树节点列表;进入本层节点计算,通过遍历该层实体列表,数据库同步和缓存处理,返回本层数据结构节点信息,最后将本层节点信息追加到顶层节点创建的树节点下,并依次递归遍历该层节点下子节点信息。
72.步骤s153:将所述链路关系数据存储至数据库。
73.本实施例中,将得到的链路关系数据存储至数据库,以便对链路关系进行分析。
74.通过本技术的技术方案,能够实现数据存储前在内存中根据链路指纹数据暂行缓存到内存中,然后对同类型数据加以汇聚计算后进行分钟级别的计算和入库,服务计算资
源和存储资源的开销大大降低,原有8台机器搞定100亿级日志数据的多应用链路计算关系串联,同配置下现只需一台计算服务端可以搞定100亿级多应用日志数据的计算串联;原有串联关系日志数据每天计算存储需产生5个g左右的数据,现缩小到10倍以上,只需要300-400mb左右。此外还能提高链路关系节点故障排查效率,具体为根据前台监控的结果,并通过前台的调用,展现节点错误数据量的记录数,可以更快的定位链路节点故障,减少生产质量事故的发生,可以快速定位链路节点响应处理的问题,保证业务的稳定性。
75.参见图6所示,本技术实施例公开了一种链路关系存储装置,该装置包括:
76.数据获取模块11,用于通过计算服务端按照预设规则获取日志数据,并将所述日志数据发送至内存数据队列,然后通过若干个协程从所述内存数据队列中获取请求日志数据,并根据与所述请求日志数据对应的请求id确定出存储分片的索引序号;
77.存储分片确定模块12,用于基于所述索引序号定位单切片字典,并在所述单切片字典存在所述请求id时锁定该单切片字典;
78.链路层级检测模块13,用于根据所述请求id获取所述单切片字典中的请求数据,并计算所述请求数据的当前层级号,然后基于所述当前层级号检测当前层级是否存在spanid数据集;
79.链路缓存更新模块14,用于若存在所述spanid数据集,则利用创建的请求实体数据对所述当前层级的spanid切片字典进行赋值,并基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新;
80.链路数据存储模块15,用于按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,以得到链路关系数据,并将所述链路关系数据存储至数据库。
81.可见,本技术通过计算服务端按照预设规则获取日志数据,并将所述日志数据发送至内存数据队列,然后通过若干个计算协程从所述内存数据队列中获取请求日志数据,并根据与所述请求日志数据对应的请求id确定出存储分片的索引序号;基于所述索引序号定位所述存储分片中的单切片字典,并在所述单切片字典存在所述请求id时锁定该单切片字典;根据所述请求id获取所述单切片字典中的请求数据,并计算所述请求数据的当前层级号,然后基于所述当前层级号检测当前层级是否存在spanid数据集;若存在所述spanid数据集,则利用创建的请求实体数据对所述当前层级的spanid切片字典进行赋值,并基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新;按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,以得到链路关系数据,并将所述链路关系数据存储至数据库。由此可见,本技术先获取日志数据并锁定单切片字典,然后利用创建的请求实体数据对当前层级的spanid切片字典进行赋值,再根据链路指纹id利用请求实体数据对链路树分片缓存进行更新,最后对链路树分片缓存中的数据进行计算,以将链路关系数据存储至数据库。通过上述技术方案能够理清并跟踪多应用服务间相互调用生成海量日志数据的链路关系,并将链路关系高效存储至数据库,降低了服务计算资源和存储资源的开销。
82.图7为本技术实施例提供的一种电子设备的结构示意图。具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的由电子设备执行的链路关系存储方法中的相关步骤。
83.本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本技术技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
84.其中,处理器21可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器21可以采用dsp(digital signal processing,数字信号处理)、fpga(field-programmable gate array,现场可编程门阵列)、pla(programmable logic array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器21也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(central processing unit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器21可以在集成有gpu(graphics processing unit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器21还可以包括ai(artificial intelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。
85.另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源包括操作系统221、计算机程序222及数据223等,存储方式可以是短暂存储或者永久存储。
86.其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,以实现处理器21对存储器22中海量数据223的运算与处理,其可以是windows、unix、linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的链路关系存储方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。数据223除了可以包括电子设备接收到的由外部设备传输进来的数据,也可以包括由自身输入输出接口25采集到的数据等。
87.进一步的,本技术实施例还公开了一种计算机可读存储介质,所述存储介质中存储有计算机程序,所述计算机程序被处理器加载并执行时,实现前述任一实施例公开的由链路关系存储过程中执行的方法步骤。
88.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
89.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
90.结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存
储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
91.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
92.以上对本发明所提供的一种链路关系存储方法、装置、设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

技术特征:


1.一种链路关系存储方法,其特征在于,包括:通过计算服务端按照预设规则获取日志数据,并将所述日志数据发送至内存数据队列,然后通过若干个计算协程从所述内存数据队列中获取请求日志数据,并根据与所述请求日志数据对应的请求id确定出存储分片的索引序号;基于所述索引序号定位所述存储分片中的单切片字典,并在所述单切片字典存在所述请求id时锁定该单切片字典;根据所述请求id获取所述单切片字典中的请求数据,并计算所述请求数据的当前层级号,然后基于所述当前层级号检测当前层级是否存在spanid数据集;若存在所述spanid数据集,则利用创建的请求实体数据对所述当前层级的spanid切片字典进行赋值,并基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新;按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,以得到链路关系数据,并将所述链路关系数据存储至数据库。2.根据权利要求1所述的链路关系存储方法,其特征在于,所述通过计算服务端按照预设规则获取日志数据,包括:预设日志消费端通过基于grpc协议的第一协程向计算服务端上报日志数据;通过所述计算服务端基于http协议的第二协程从所述预设日志消费端拉取日志数据。3.根据权利要求1所述的链路关系存储方法,其特征在于,所述根据与所述请求日志数据对应的请求id确定出存储分片的索引序号,包括:确定与所述请求日志数据对应的请求id,并通过预设哈希算法计算与所述请求id对应的哈希值;基于所述哈希值和存储分片数量确定出存储分片的索引序号。4.根据权利要求1所述的链路关系存储方法,其特征在于,所述通过若干个协程从所述内存数据队列中获取请求日志数据之后,还包括:根据所述请求日志数据的方法id获取相应的应用id和类id;相应的,所述基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新之前,还包括:基于所述方法id、应用id和类id计算链路的指纹id。5.根据权利要求1至4任一项所述的链路关系存储方法,其特征在于,所述按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,包括:每隔预设时间间隔轮询所述链路树分片缓存以获取链路树分片缓存对象,并根据链路分片数量分配每一协程的待处理数据任务;通过每一协程获取相应的单片数据拷贝,并执行链路树顶层节点中请求实体数据的计算流程,并在顶层节点计算成功后执行链路树子层节点中请求实体数据的计算流程,直到遍历完所有链路树节点。6.根据权利要求5所述的链路关系存储方法,其特征在于,所述执行链路树顶层节点中请求实体数据的计算流程的过程中,还包括:检测层级号数据组中是否存在相应的顶层节点号,若存在,则检测所述链路树是否有断层或断层号是否超过预设数量;
若无断层或断层号不超过所述预设数量,则获取所述链路树顶层节点对应的spanid,并创建顶层链路树的实体节点。7.根据权利要求5所述的链路关系存储方法,其特征在于,所述执行链路树子层节点中请求实体数据的计算流程的过程中,还包括:检测当前子层节点是否存在对应的spanid,若存在,则检测所述当前子层节点是否包括上级节点的spanid特征信息;若包括,则基于所述spanid特征信息获取相应的实体列表,并对所述实体列表进行遍历以得到本层节点信息。8.一种链路关系存储装置,其特征在于,包括:数据获取模块,用于通过计算服务端按照预设规则获取日志数据,并将所述日志数据发送至内存数据队列,然后通过若干个协程从所述内存数据队列中获取请求日志数据,并根据与所述请求日志数据对应的请求id确定出存储分片的索引序号;存储分片确定模块,用于基于所述索引序号定位单切片字典,并在所述单切片字典存在所述请求id时锁定该单切片字典;链路层级检测模块,用于根据所述请求id获取所述单切片字典中的请求数据,并计算所述请求数据的当前层级号,然后基于所述当前层级号检测当前层级是否存在spanid数据集;链路缓存更新模块,用于若存在所述spanid数据集,则利用创建的请求实体数据对所述当前层级的spanid切片字典进行赋值,并基于计算得到的指纹id利用所述请求实体数据对链路树分片缓存进行更新;链路数据存储模块,用于按照预设规则轮询计算所述链路树分片缓存中的所述请求实体数据,以得到链路关系数据,并将所述链路关系数据存储至数据库。9.一种电子设备,其特征在于,包括:存储器,用于保存计算机程序;处理器,用于执行所述计算机程序,以实现如权利要求1至7任一项所述的链路关系存储方法的步骤。10.一种计算机可读存储介质,其特征在于,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的链路关系存储方法的步骤。

技术总结


本申请公开了一种链路关系存储方法、装置、设备及介质,涉及计算机技术领域,包括:通过计算服务端获取日志数据并发送至内存数据队列,通过计算协程从内存数据队列中获取请求日志数据,根据对应请求ID确定存储分片的索引序号;基于索引序号定位单切片字典并在单切片字典存在请求ID时进行锁定;根据请求ID获取单切片字典中的请求数据,计算当前层级号并检测当前层级是否存在SpanId数据集;若是则利用请求实体数据对当前层级的SpanId切片字典进行赋值,利用请求实体数据对链路树分片缓存进行更新;轮询计算链路树分片缓存中的请求实体数据得到链路关系数据并存储至数据库。能够理清各应用日志数据间的链路关系,并进行高效存储。储。储。


技术研发人员:

翟增明 陈莹莹 王雅楠 黄昭侠 岑浩铭 王伟 吕勇

受保护的技术使用者:

税友信息技术有限公司

技术研发日:

2022.10.25

技术公布日:

2022/12/16

本文发布于:2022-12-21 17:10:08,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/40446.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:所述   数据   链路   层级
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图