一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于HTTP协议头部扩展的应用级调用链生成方法

2023-02-02 00:02:25 来源:中国专利 TAG:

基于http协议头部扩展的应用级调用链生成方法
技术领域
1.本发明涉及到通信技术领域,尤其涉及基于http协议头部扩展的应用级调用链生成方法。


背景技术:

2.随着微服务架构在应用系统中的应用,一个完整系统的功能模块被拆分为多个小而专的微服务,系统在内部业务流程调用中,经历的节点链也越来越多,当某个节点出问题时,排查整个调用链条中的故障节点定位缺乏有效的手段。
3.在当前的业务调用过程中,也有一些成熟的技术进行调用链的信息收集和拼装,比如pinpoint技术,就是一种分布式链路追踪和链路监控技术,通过调用链中的每个node节点进行埋点,从而收集每次业务流程到该节点的信息,达到分布式追踪的目的。但pinpoint技术具备一定的前置条件,并且实时性和准确性存在一定的偏差。
4.公开号为cn109726016a,公开日为2019年05月07日的中国专利文献公开了一种用于分布式系统的链路追踪方法,其特征在于,包括:在远程过程调用的调用请求经过计算设备节点时,生成本节点的追踪标记;根据本节点的追踪标记和本节点对子节点的调用请求,生成子节点追踪数据;将所述子节点追踪数据封装至本节点对子节点的远程调用请求中;向所述子节点发送已封装数据的调用请求;子节点接收已封装数据的调用请求,并根据调用请求生成子节点追踪标记;对于任意本节点及其子节点重复上述步骤,直至事务的各调用请求完成;在事务的各调用请求或单次请求完成后,将本节点的追踪标记和子节点的追踪标记上报;其中,所述计算设备节点称为本节点。
5.该专利文献公开的用于分布式系统的链路追踪方法,通过字节码增强技术来实现分布式系统的自动全链路监控追踪,实现自动记录系统的全链路监控,无需修改任何代码,只需在应用程序启动时加上事务即可,且切入点能保证正确性,相比较传统方式有较明显的优势。但是,仍然存在节点遗漏和数据延迟的问题。


技术实现要素:

6.本发明为了克服上述现有技术的缺陷,提供基于http协议头部扩展的应用级调用链生成方法,本发明在真实的事务请求过程中,在每个node节点进行标签标识,在一个完整的事务请求过程结束后,通过对整体标签标识的分析,就能够实时获取到本次事务请求的真实过程,能够有效避免节点遗漏和数据延迟。
7.本发明通过下述技术方案实现:基于http协议头部扩展的应用级调用链生成方法,其特征在于,包括以下步骤:a、在http协议头部中封装自定义标签,包括chain-trace-id标签、chain-node-id
标签、chain-request-log标签和chain-response-log标签,chain-trace-id标签用于记录每次事务请求的唯一链路标识号,chain-node-id标签用于将当前节点向下游传递进行串联调用链路,chain-request-log标签用于记录事务请求正向调用流程的全程信息,chain-response-log标签用于记录事务请求返回流程的全程信息;b、对每个节点进行实时标签处理,当一个服务节点在接收到http-request请求时,根据上游的流程标识自动装载chain-request-log标签信息,并将本次响应请求同步加载到自身节点的chain-response-log标签中,依次在下游节点执行并记录直至整个调用流程完成;c、在每一个节点http应答结束后,将结果记录在数据存储媒介中进行二次数据备份。
8.所述步骤a中,初始调用拦截到请求时,先校验chain-trace-id标签的值,若为空,则通过雪花算法进行自动生成唯一链路跟踪标识,同时此调用作为调用链开始,再使用随机算法生成节点id,赋值于chain-node-id标签,pid为空,将当前时间赋值于in_time,通过http请求头获取url信息,填充至chain-request-log标签中,将生成的 chain-request-log标签移除特殊字符,回车换行符,最后采用hpack算法压缩加密,添加至头部请求头中。
9.所述步骤b中,下游系统或者子模块接收到调用请求时,通过插件首先取出头部中的chain-node-id标签作为pid,再通过随机算法生成节点id,并赋值给chain-node-id标签,作为下游链路节点的父节点,获取当前时间作为节点开始时间,赋值于in_time,通过http请求头获取url的请求地址信息,信息获取完成后填充至chain-request-log标签中,处理特殊字符,使用hpack算法压缩加密。
10.所述步骤b中,若当前节点为调用链结尾,则填充chain-response-log标签信息,将当前请求返回的时间作为out_time,将当前请求的pid作为cid,将out_time与in_time相减,得到当前节点调用耗时时间,再将chain-response-log标签进行特殊字符处理和hpack压缩加密,作为响应头返回给上游调用节点,上游接收到响应消息时,提取响应头中的chain-response-log标签信息,重复步骤直至返回到调用链顶层。
11.所述步骤c中,通过在响应头中获取调用链详情,则得到头部信息。
12.所述步骤c中,通过插件将当前调用链信息使用基于日志的方式进行输出,使用异步无锁队列的方式进行写日志。
13.所述步骤c中,通过插件将日志进行按日期按大小滚动,自动清理。
14.所述步骤c中,根据全流程路径节点记录分析,结合服务节点对象建模,完成调用链服务拓扑自动呈现。
15.本发明所述http协议是指超文本传输协议。
16.本发明所pinpoint是指链路追踪监控。
17.本发明所述node是指系统或者子模块的调用节点。
18.本发明所述chain-trace-id是指建立调用链路唯一标识。
19.本发明所述chain-node-id是指用于将当前节点向下游传递进行串联调用链路的节点id。
20.本发明所述chain-request-log是指系统与系统,以及系统内各子模块之间调用的正向请求日志记录。
response-log标签用于记录事务请求返回流程的全程信息;b、对每个节点进行实时标签处理,当一个服务节点在接收到http-request请求时,根据上游的流程标识自动装载chain-request-log标签信息,并将本次响应请求同步加载到自身节点的chain-response-log标签中,依次在下游节点执行并记录直至整个调用流程完成;c、在每一个节点http应答结束后,将结果记录在数据存储媒介中进行二次数据备份。
37.本实施例为最基本的实施方式,传统的http协议为无状态协议,协议本身对于事务处理没有记忆能力,缺少状态,本发明较传统的http协议而言,能够将全流程事务随流记录,将请求经过的node节点的路径信息精准安全的存储在请求报文头部中,做到在各个环节均可追踪和溯源。
38.实施例2参见图1,基于http协议头部扩展的应用级调用链生成方法,包括以下步骤:a、在http协议头部中封装自定义标签,包括chain-trace-id标签、chain-node-id标签、chain-request-log标签和chain-response-log标签,chain-trace-id标签用于记录每次事务请求的唯一链路标识号,chain-node-id标签用于将当前节点向下游传递进行串联调用链路,chain-request-log标签用于记录事务请求正向调用流程的全程信息,chain-response-log标签用于记录事务请求返回流程的全程信息;b、对每个节点进行实时标签处理,当一个服务节点在接收到http-request请求时,根据上游的流程标识自动装载chain-request-log标签信息,并将本次响应请求同步加载到自身节点的chain-response-log标签中,依次在下游节点执行并记录直至整个调用流程完成;c、在每一个节点http应答结束后,将结果记录在数据存储媒介中进行二次数据备份。
39.进一步的,所述步骤a中,初始调用拦截到请求时,先校验chain-trace-id标签的值,若为空,则通过雪花算法进行自动生成唯一链路跟踪标识,同时此调用作为调用链开始,再使用随机算法生成节点id,赋值于chain-node-id标签,pid为空,将当前时间赋值于in_time,通过http请求头获取url信息,填充至chain-request-log标签中,将生成的 chain-request-log标签移除特殊字符,回车换行符,最后采用hpack算法压缩加密,添加至头部请求头中。
40.进一步的,所述步骤b中,下游系统或者子模块接收到调用请求时,通过插件首先取出头部中的chain-node-id标签作为pid,再通过随机算法生成节点id,并赋值给chain-node-id标签,作为下游链路节点的父节点,获取当前时间作为节点开始时间,赋值于in_time,通过http请求头获取url的请求地址信息,信息获取完成后填充至chain-request-log标签中,处理特殊字符,使用hpack算法压缩加密。
41.进一步的,所述步骤b中,若当前节点为调用链结尾,则填充chain-response-log标签信息,将当前请求返回的时间作为out_time,将当前请求的pid作为cid,将out_time与in_time相减,得到当前节点调用耗时时间,再将chain-response-log标签进行特殊字符处理和hpack压缩加密,作为响应头返回给上游调用节点,上游接收到响应消息时,提取响应
头中的chain-response-log标签信息,重复步骤直至返回到调用链顶层。
42.本实施例为较佳实施方式,传统的http请求为无连接性请求,在传统调用链分布式跟踪时往往需要事后根据日志中的时间记录去计算调用耗时,流程耗时长,本发明在协议报文中加入chain-trace-id标签、chain-node-id标签、chain-request-log标签和chain-response-log标签数据后,则会在请求的扭转过程中动态记录上下游的事务响应时间,并实时计算节点处理耗时,在流程调用完毕之后即可在全周期视角捕获事务经过的所有服务节点的性能视图。
43.实施例3参见图1,基于http协议头部扩展的应用级调用链生成方法,包括以下步骤:a、在http协议头部中封装自定义标签,包括chain-trace-id标签、chain-node-id标签、chain-request-log标签和chain-response-log标签,chain-trace-id标签用于记录每次事务请求的唯一链路标识号,chain-node-id标签用于将当前节点向下游传递进行串联调用链路,chain-request-log标签用于记录事务请求正向调用流程的全程信息,chain-response-log标签用于记录事务请求返回流程的全程信息;b、对每个节点进行实时标签处理,当一个服务节点在接收到http-request请求时,根据上游的流程标识自动装载chain-request-log标签信息,并将本次响应请求同步加载到自身节点的chain-response-log标签中,依次在下游节点执行并记录直至整个调用流程完成;c、在每一个节点http应答结束后,将结果记录在数据存储媒介中进行二次数据备份。
44.所述步骤a中,初始调用拦截到请求时,先校验chain-trace-id标签的值,若为空,则通过雪花算法进行自动生成唯一链路跟踪标识,同时此调用作为调用链开始,再使用随机算法生成节点id,赋值于chain-node-id标签,pid为空,将当前时间赋值于in_time,通过http请求头获取url信息,填充至chain-request-log标签中,将生成的 chain-request-log标签移除特殊字符,回车换行符,最后采用hpack算法压缩加密,添加至头部请求头中。
45.所述步骤b中,下游系统或者子模块接收到调用请求时,通过插件首先取出头部中的chain-node-id标签作为pid,再通过随机算法生成节点id,并赋值给chain-node-id标签,作为下游链路节点的父节点,获取当前时间作为节点开始时间,赋值于in_time,通过http请求头获取url的请求地址信息,信息获取完成后填充至chain-request-log标签中,处理特殊字符,使用hpack算法压缩加密。
46.所述步骤b中,若当前节点为调用链结尾,则填充chain-response-log标签信息,将当前请求返回的时间作为out_time,将当前请求的pid作为cid,将out_time与in_time相减,得到当前节点调用耗时时间,再将chain-response-log标签进行特殊字符处理和hpack压缩加密,作为响应头返回给上游调用节点,上游接收到响应消息时,提取响应头中的chain-response-log标签信息,重复步骤直至返回到调用链顶层。
47.所述步骤c中,通过在响应头中获取调用链详情,则得到头部信息。
48.所述步骤c中,通过插件将当前调用链信息使用基于日志的方式进行输出,使用异步无锁队列的方式进行写日志。
49.所述步骤c中,通过插件将日志进行按日期按大小滚动,自动清理。
50.所述步骤c中,根据全流程路径节点记录分析,结合服务节点对象建模,完成调用链服务拓扑自动呈现。
51.本实施例为最佳实施方式,相比传统pinpoint,在分布式链路追踪、链路监控场景上除了实时性和准确性有较大幅度的提升之外,在抗异常能力上有较为突出的表现,任何一个节点出现了异常,在标签日志中都能够通过标签完整性进行排查,快速定位故障节点出现在哪个环节。
52.当每次事务请求完成整个调用完成后,该事务的全生命的调用链即可生成,极大的提升了时效性。
53.在所有事务节点都按照规范进行开发,所有经历的节点都能够精确的呈现,不会出现遗漏和偏差,提升了精准性。
54.通过整体的事务调用过程中经历的多个节点,能够快速定位哪个环节消耗的处理时长较大,从而准确的对耗时长的环节进行优化。
55.下面通过一组调用节点进行说明:系统或者子模块引用本发明的插件,当一个服务节点在接收到http-request请求时,插件会自动生成本调用节点的唯一标识id,同时获取当前节点所在主机,将上游的调用标识,结合自身节点信息,由插件自动装载至chain-request-log信息。若此调用节点还有下游系统或者子模块服务调用,则在下游调用时,插件会识别到并拦截,将自身节点信息以及chain-request-log信息自动填充至http请求的头部报文头中,继续向下游传递,下游系统或者子模块引用的插件会自行取出上游节点的信息,接力填充至chain-request-log中,按照上述逻辑继续向下传递。若此调用节点为最底层服务,则插件会将本次响应请求加载到chain-response-log中,自动填充到http响应报文的头部报文头中,上游服务或子模块接收到响应,插件会自行取出下游http响应头部中chain-response-log信息,接力填充至此数据头中,根据以上逻辑依次在上游节点执行并记录直至整个调用流程完成。
56.针对chain-request-log和chain-response-log的值会预先处理特殊字符,如回车换行符,而后使用hpack算法进行加密压缩,减少资源占用。使用外置插件的方式,仅需按照说明配置系统环境变量,插件会自行获取系统应用名。针对使用方系统,无代码侵入性,且更为轻量,效率更高。
57.chain-trace-id:此次业务请求的链路标识号,用来串联跟踪并进行标识业务调用,默认使用雪花算法生成的唯一id,共19位,占38个字节。
58.chain-node-id:当前调用节点的唯一id,使用随机字母数字进行生成,共9位,占18个字节,用于进行调用链的组装,若为入口节点,那么则为空。
59.chain-request-log:请求的正向流程调用日志结构,采用json数组格式进行封装。
60.chain-response-log:返回的逆向调用结构,与正向流程一致,采用json数组格式进行封装。
61.json数组是指值的有序集合。
62.下面通过端到端故障诊断流程中的实际场景实例对本发明进行详细说明:s1、能力调用入口,进行事务请求;s2、能力接收服务进行请求接收,在http协议的头部加入chain-node-id标签、
chain-trace-id标签、chain-request-log标签和chain-response-log标签这四个标签,同时在chain-trace-id标签中加入标准的流水号,在chain-request-log标签中写入起始节点的标签信息;s3、流程执行引擎服务,根据接收到的时间,在chain-request-log标签中加入模块标识和接收时间;s4、能力调用服务,根据引擎服务根据不同的能力,调用各个原子能力,在处理过程中,在chain-request-log标签中加入模块标识及接收时间并在请求流中加入结束标识;同时根据调用南向能力的结果,在chain-response-log标签中,加入开始标识,模块标识、处理结束时间以及处理时长,然后返回消息;s5、流程执行引擎服务,收到能力调用服务返回的消息,在chain-response-log标签中加入模块标识、返回时间以及消耗的时长,接着返回;s6、能力接收服务,接收到流程执行引擎服务返回的结果,在chain-response-log标签中加入模块标识、接收返回时间以及处理的时长,最后加上结束标识,然后将该次事务调用的整个头部内容发送出去,由监控模块进行统一解析入库。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献