CN115422036A - 基于OpenTelemetry的车端SOA服务调用链追踪的方法 - Google Patents
基于OpenTelemetry的车端SOA服务调用链追踪的方法 Download PDFInfo
- Publication number
- CN115422036A CN115422036A CN202210910883.4A CN202210910883A CN115422036A CN 115422036 A CN115422036 A CN 115422036A CN 202210910883 A CN202210910883 A CN 202210910883A CN 115422036 A CN115422036 A CN 115422036A
- Authority
- CN
- China
- Prior art keywords
- vehicle
- chain
- application program
- data
- calling
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于OpenTelemetry的车端SOA服务调用链追踪的方法,包括以下步骤:S1、编写调用链埋点代码,将调用链埋点代码植入车端的各应用程序,各应用程序配置产生调用链埋点信息的处理器及传输调用链埋点信息的导出器,车端配置收集调用链信息的车端收集器;S2、各应用程序的处理器分别将调用链埋点数据发送至导出器,导出器将调用链埋点数据进行转换后分别发送至车端收集器,车端收集器根据设定规则将调用链埋点数据进行处理后上传到云端;S3、云端收到车端的调用链埋点数据后进行存储及分析,并下发配置到车端收集器,车端收集器保存配置信息并发送给各应用程序,各应用程序的处理器根据云端下发的配置信息进行配置更新。能快速定位服务出现的问题。
Description
技术领域
本发明涉及车辆通信领域,具体涉及一种在车端使用DDS通信实现SOA架构时的服务调用链路追踪的方法。
背景技术
数据分发服务(Data Distribution Service,DDS)是对象管理组织(ObjectManagement Group,OMG)在2004年发布的中间件协议和应用程序接口(ApplicationProgram Interface,API)标准,它为分布式系统提供了低延迟、高可靠性、可扩展的通信架构标准,目前在工业、医疗、能源、国防领域都有广泛的应用。随着“软件定义汽车”的兴起,逐渐被应用于汽车行业。
面向服务的架构(Service-Oriented Architecture,SOA)通过标准化的服务接口、松耦合的服务机制及可扩展性的服务特性,结合未来以高性能计算平台“域控制器”为核心的集中化电子电器架构,将成为未来汽车领域“软件定义汽车”的技术基础。
在SOA软件架构下,服务按照不同的维度进行拆分,一个功能的实现往往需要涉及到多个服务。由于服务单元数量众多和业务的复杂性,如果出现了错误和异常,很难去定位。所以在SOA架构中,有必要实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,一旦出现问题,就能很快定位。
在公告号为CN107870762B的专利公开了一种SOA调用链路跟踪的方法,但该方法的使用场景主要是在云端使用Java语言开发的应用程序,应用程序之间通信使用http协议,不能适用于车端,主要原因是在车端的各种应用程序通常采用C++语言开发,应用程序之间的通信方式也通常使用更加可靠的DDS协议。
另外,由于车端的应用程序的特殊要求,如实时性、可靠性要求高,硬件资源(算力、存储、网络带宽)有限,需解决调用链产生的埋点数据量大及对应用程序本身的性能影响问题。
发明内容
本发明的目的在于解决现有技术的问题,提供一种基于OpenTelemetry的车端SOA服务调用链追踪的方法,通过云端掌握车端应用在代码层的调用关系及顺序,帮助应用开发及运维人员快速定位服务出现的问题。
为了实现上述目的,本发明采用的技术方案如下:
一种基于OpenTelemetry的车端SOA服务调用链追踪的方法,包括以下步骤:
S1、编写调用链埋点代码,将调用链埋点代码植入车端的各应用程序,各应用程序配置产生调用链埋点信息的处理器及传输调用链埋点信息的导出器,车端配置收集调用链信息的车端收集器;
S2、各应用程序的处理器分别将调用链埋点数据发送至导出器,导出器将调用链埋点数据进行转换后分别发送至车端收集器,车端收集器根据设定规则将调用链埋点数据进行处理后上传到云端;
S3、云端收到车端的调用链埋点数据后进行存储及分析,并下发配置到车端收集器,车端收集器保存配置信息并发送给各应用程序,各应用程序的处理器根据云端下发的配置信息进行配置更新。
进一步,编写调用链埋点代码,将调用链埋点代码植入车端的各应用程序,包括:
在各应用程序进行Opentelemetry软件开发工具包的初始化;
各应用程序中集成软件开发工具包,并调用埋点应用程序接口;
调用链涉及多个应用进程时,将调用链信息在多个应用进行关联。
进一步,调用埋点应用程序接口时,传入自定义的名称参数,用于标识当前的埋点信息所属方法。
进一步,各应用程序的处理器实现动态启用或停用产生埋点信息功能,处理器默认状态下为停用产生埋点信息功能,当需要开启产生埋点信息功能时,通过云端下发的控制指令实现动态开启埋点信息功能。
进一步,各应用程序的处理器启用产生埋点信息功能时,在达到设定时间间隔或设定埋点信息条数后,批量将调用链埋点数据发送给导出器。
进一步,各应用程序的导出器将处理器发送的Opentelemetry标准规范的调用链埋点数据转换为zipkin格式、jaeger格式、otlp格式后发送至车端收集器。
进一步,车端收集器根据设定规则将调用链埋点数据进行处理后上传到云端,设定规则为:
车端收集器按需采集各应用程序的调用链埋点数据,在调用链环节出现错误或链路耗时超过阈值时,车端收集器才将该调用链路的调用链埋点数据上传至云端。
进一步,各应用程序的导出器与车端收集器之间通过DDS进行数据传输,车端收集器与云端之间通过MQTT协议进行数据传输。
进一步,车端收集器设置于车端的一个控制器中。
进一步,云端收到车端的调用链埋点数据后,将调用链埋点数据存储到消息队列中,通过云端收集器消费消息队列中的调用链埋点数据,将调用链埋点数据转换格式后存储并通过调用链分析平台进行分析。
与现有技术相比,本发明的车端SOA服务调用链追踪的方法,能通过云端清楚的掌握每一个车端应用在代码层的调用关系及顺序,帮助应用开发及运维人员快速定位服务出现的问题,有效降低调用链埋点对应用程序本身的性能影响,同时,降低对车端与云端网络带宽及云端存储的需求,使得企业的投入成本降低。
附图说明
图1为车端SOA服务调用链追踪的方法的流程示意图。
图2为车端SOA服务调用链追踪的方法的部署架构图。
具体实施方式
下面结合附图和具体实施例对本发明基于OpenTelemetry的车端SOA服务调用链追踪的方法作进一步说明。
请参阅图1和图2,本发明公开了一种基于OpenTelemetry的车端SOA服务调用链追踪的方法,包括以下步骤:
S1、编写调用链埋点代码,将调用链埋点代码植入车端的各应用程序,各应用程序配置产生调用链埋点信息的处理器及传输调用链埋点信息的导出器,车端配置收集调用链信息的车端收集器。
S2、各应用程序的处理器分别将调用链埋点数据发送至导出器,导出器将调用链埋点数据进行转换后分别发送至车端收集器,车端收集器根据设定规则将调用链埋点数据进行处理后上传到云端。
S3、云端收到车端的调用链埋点数据后进行存储及分析,并下发配置到车端收集器,车端收集器保存配置信息并发送给各应用程序,各应用程序的处理器根据云端下发的配置信息进行配置更新。
具体地,编写调用链埋点代码时,由于C++本身的机制特性,需在一开始的业务程序开发时,就需要将相关的调用链埋点代码植入到车端应用程序中。在应用程序的启动入口处进行Opentelemetry标准的软件开发工具包(sdk)的初始化工作。在初始化时,需要配置当前应用程序的名称,用于标识后续产生的埋点信息所属的应用。各应用程序种配置产生调用链埋点信息的处理器SpanProcessor和传输调用链埋点信息的导出器SpanExporter。车端配置收集调用链信息的车端收集器Collector。
在车端并不是所有的应用程序都能链接到云端,所以需在车端的某一个控制器中部署一个埋点信息的车端收集器Collector。各个应用程序通过导出器SpanExporter将调用链埋点数据简单的转换后发送到埋点信息的车端收集器Collector,由车端收集器Collector按照设置的采集策略进行数据采集,将数据进行采样、压缩、格式转换后进行上传至云端。各应用程序的导出器SpanExporter与车端收集器Collector之间通过DDS进行数据的传输,车端收集器Collector与云端之间通过MQTT协议进行数据传输。导出器SpanExporter将Opentelemetry标准规范的埋点信息转换为zipkin格式、jaeger格式、otlp格式进行输出。
由于车端服务调用的实时性要求,在处理器SpanProcessor中需实现动态启用或停用产生埋点信息功能。处理器SpanProcessor中产生埋点信息功能默认情况下为停用状态,此时对应用程序本身的性能几乎无影响。当需要开启时,通过云端下发相应的控制指令来实现动态开启埋点信息功能,车端收集器Collector接收到云端的配置后将配置保存到本地,后续重新启动时则读取本地的配置,车端收集器Collector以一定的频率将当前的配置信息通过DDS传输给各应用程序。各个应用程序中的处理器SpanProcessor接收到DDS中的数据后改变本地的配置信息。
在处理器SpanProcessor中实现动态开启或停用产生埋点信息功能,可在处理器SpanProcessor中定义一个变量EnableTrace=False,当EnableTrace为False时,则表示不产生调用链埋点数据,当EnableTrace为True时表示产生调用链埋点数据,在处理器SpanProcessor中通过订阅DDS中约定的内容来实现对EnableTrace值的修改,其中约定的内容由车端收集器Collector发布,其值最终可通过云端来动态修改。
在处理器SpanProcessor中实现批量提交埋点信息功能。为了降低调用链埋点对原有应用程序的影响,可在处理器SpanProcessor中定义一个本地队列来临时保存产生的埋点数据,通过设置一个数量条件N及一个时间条件T,当两个条件中的任意一个满足时,则将本地队列中的数据通过导出器SpanExporter批量提交到车端收集器Collector,由此可大大减少应用程序与车端收集器Collector的通信次数,从而降低对应用程序的性能影响。
在车端的每个应用中集成软件开发工具包,并在每个需要埋点的方法中调用软件工具开发包提供的埋点应用程序接口。调用埋点应用程序接口时需传入一个自定义的名称参数,该参数用于标识当前的埋点信息是由哪一个方法产生的,在C++程序中可采用类名加方法名,如:“ClassA:MethodA”,在每个方法执行完成后,就会产生一条调用链信息的数据,当本方法中出现异常时,可通过添加自定义标签的方法,添加一个Key=Error,Value=True的标签,用于后续Collector中采集使用。
当服务调用链涉及多个进程时,需要将调用链的上下文(SpanContext)信息从当前进程传递到被调用的进程中,因此需要提前设计好传输数据的组成格式。使用DDS进行远程服务调用时,其数据格式由Header与Playload组成,其中header中包含了请求的全局唯一标识符(GUID,Globally Unique Identifier)信息与产品序列号(Serial Number,SN)信息,而Playload中传输了实际的业务数据,为了实现调用链信息的传递,需将Playload部分拆分成两部分,第一部分为上下文(SpanContext),第二部分为原本的业务数据信息。以此,将调用链的信息在多个应用中进行关联。
在开启调用链追踪后,可能会由于服务的调用量过大而产生大量的埋点数据,而应用开发人员或运维人员只关心其中出现异常的数据或者调用总时长超过某个阈值的数据。如果将产生的调用链信息全部上传的话,势必会造成车端与云端之间网络带宽压力及云端存储成本增加,所以需在埋点信息的车端收集器Collector中实现按需采样功能,在调用链中的任何一个环节出现错误或者整个链路耗时超过某个阈值时才将此链路的所有信息上报。调用链埋点数据的采集策略可通过云端动态下发到车端收集器Collector上,车端收集器Collector收到策略更新后及时改变本地的采集机制。
在车端收集器Collector中为每个调用链设置一个本地的临时缓存队列,每当接收调用链埋点数据后分配到其各自的队列中。由于在车端收集器Collector中无法知晓某一个调用链的整个链是否完成,所以需设置一个时间阈值T1,并在每个队列第一条埋点数据入队时记录当前时间点T2,后续数据上传线程,通过计算当前时间T3与T2之间的差值是否大于T1来判断该队列中的数据是否为待处理队列,再通过分析待处理队列中的每一条埋点数据,判断其数据中是否包含自定义的错误标签信息(key=Error,Value=True),整个链路中任意一处包含该标签值,则将整个队列中的埋点信息上传到云端。
车端的调用链信息上传到云端后,云端进行调用链埋点数据接收及配置下发,先将数据发送到消息队列中,再通过云端收集器消费消息队列中数据将调用链埋点数据进行存储,根据需要将车端上传的埋点数据转换为行业中其他成熟的调用链分析平台(如zipkin、jaeger、pinpoint、skywalking)需要的格式数据,在通过其对应的分析工具可对调用链埋点数据进行查询、分析、可视化展示。
综上所述,本发明的车端SOA服务调用链追踪的方法,能通过云端清楚的掌握每一个车端应用在代码层的调用关系及顺序,帮助应用开发及运维人员快速定位服务出现的问题,有效降低调用链埋点对应用程序本身的性能影响,同时,降低对车端与云端网络带宽及云端存储的需求,使得企业的投入成本降低。
上述说明是针对本发明较佳可行实施例的详细说明,但实施例并非用以限定本发明的专利申请范围,凡本发明所揭示的技术精神下所完成的同等变化或修饰变更,均应属于本发明所涵盖专利范围。
Claims (10)
1.一种基于OpenTelemetry的车端SOA服务调用链追踪的方法,其特征在于,包括以下步骤:
S1、编写调用链埋点代码,将调用链埋点代码植入车端的各应用程序,各应用程序配置产生调用链埋点信息的处理器及传输调用链埋点信息的导出器,车端配置收集调用链信息的车端收集器;
S2、各应用程序的处理器分别将调用链埋点数据发送至导出器,导出器将调用链埋点数据进行转换后分别发送至车端收集器,车端收集器根据设定规则将调用链埋点数据进行处理后上传到云端;
S3、云端收到车端的调用链埋点数据后进行存储及分析,并下发配置到车端收集器,车端收集器保存配置信息并发送给各应用程序,各应用程序的处理器根据云端下发的配置信息进行配置更新。
2.根据权利要求1的基于OpenTelemetry的车端SOA服务调用链追踪的方法,其特征在于:编写调用链埋点代码,将调用链埋点代码植入车端的各应用程序,包括:
在各应用程序进行Opentelemetry软件开发工具包的初始化;
各应用程序中集成软件开发工具包,并调用埋点应用程序接口;
调用链涉及多个应用进程时,将调用链信息在多个应用进行关联。
3.根据权利要求2的基于OpenTelemetry的车端SOA服务调用链追踪的方法,其特征在于:调用埋点应用程序接口时,传入自定义的名称参数,用于标识当前的埋点信息所属方法。
4.根据权利要求1的基于OpenTelemetry的车端SOA服务调用链追踪的方法,其特征在于:各应用程序的处理器实现动态启用或停用产生埋点信息功能,处理器默认状态下为停用产生埋点信息功能,当需要开启产生埋点信息功能时,通过云端下发的控制指令实现动态开启埋点信息功能。
5.根据权利要求4的基于OpenTelemetry的车端SOA服务调用链追踪的方法,其特征在于,各应用程序的处理器启用产生埋点信息功能时,在达到设定时间间隔或设定埋点信息条数后,批量将调用链埋点数据发送给导出器。
6.根据权利要求5的基于OpenTelemetry的车端SOA服务调用链追踪的方法,其特征在于,各应用程序的导出器将处理器发送的Opentelemetry标准规范的调用链埋点数据转换为zipkin格式、jaeger格式、otlp格式后发送至车端收集器。
7.根据权利要求1的基于OpenTelemetry的车端SOA服务调用链追踪的方法,其特征在于,车端收集器根据设定规则将调用链埋点数据进行处理后上传到云端,设定规则为:
车端收集器按需采集各应用程序的调用链埋点数据,在调用链环节出现错误或链路耗时超过阈值时,车端收集器才将该调用链路的调用链埋点数据上传至云端。
8.根据权利要求1的基于OpenTelemetry的车端SOA服务调用链追踪的方法,其特征在于:各应用程序的导出器与车端收集器之间通过DDS进行数据传输,车端收集器与云端之间通过MQTT协议进行数据传输。
9.根据权利要求1的基于OpenTelemetry的车端SOA服务调用链追踪的方法,其特征在于:车端收集器设置于车端的一个控制器中。
10.根据权利要求1的基于OpenTelemetry的车端SOA服务调用链追踪的方法,其特征在于:云端收到车端的调用链埋点数据后,将调用链埋点数据存储到消息队列中,通过云端收集器消费消息队列中的调用链埋点数据,将调用链埋点数据转换格式后存储并通过调用链分析平台进行分析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210910883.4A CN115422036A (zh) | 2022-07-29 | 2022-07-29 | 基于OpenTelemetry的车端SOA服务调用链追踪的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210910883.4A CN115422036A (zh) | 2022-07-29 | 2022-07-29 | 基于OpenTelemetry的车端SOA服务调用链追踪的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115422036A true CN115422036A (zh) | 2022-12-02 |
Family
ID=84196614
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210910883.4A Pending CN115422036A (zh) | 2022-07-29 | 2022-07-29 | 基于OpenTelemetry的车端SOA服务调用链追踪的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115422036A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116471213A (zh) * | 2023-06-09 | 2023-07-21 | 北京随信云链科技有限公司 | 链路追踪方法、链路追踪系统及介质 |
CN116881089A (zh) * | 2023-09-07 | 2023-10-13 | 浙江保融科技股份有限公司 | 一种用于调用链状态回传状态下埋点及埋点管理的方法 |
-
2022
- 2022-07-29 CN CN202210910883.4A patent/CN115422036A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116471213A (zh) * | 2023-06-09 | 2023-07-21 | 北京随信云链科技有限公司 | 链路追踪方法、链路追踪系统及介质 |
CN116471213B (zh) * | 2023-06-09 | 2023-09-15 | 北京随信云链科技有限公司 | 链路追踪方法、链路追踪系统及介质 |
CN116881089A (zh) * | 2023-09-07 | 2023-10-13 | 浙江保融科技股份有限公司 | 一种用于调用链状态回传状态下埋点及埋点管理的方法 |
CN116881089B (zh) * | 2023-09-07 | 2023-12-05 | 浙江保融科技股份有限公司 | 一种用于调用链状态回传状态下埋点及埋点管理的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115422036A (zh) | 基于OpenTelemetry的车端SOA服务调用链追踪的方法 | |
CN107645562B (zh) | 数据传输处理方法、装置、设备及系统 | |
CN114375069B (zh) | 一种通信方法和网络设备 | |
CN110888662A (zh) | 一种车辆远程静默升级方法、装置、车辆和存储介质 | |
CN115277409A (zh) | 埋点数据实时采集和上报方法及装置、获取系统和终端 | |
CN112910835B (zh) | 基于区块链的配置管理方法、装置、系统、设备和介质 | |
CN112925648A (zh) | 业务策略的发布方法和装置 | |
CN117170822A (zh) | 使用分布式网络中间件的系统模型和代码联合仿真系统 | |
CN115390897B (zh) | 微前端管理的方法、装置、电子设备及存储介质 | |
CN114900558B (zh) | 一种通用的设备管理协议控制方法及装置 | |
CN114265638B (zh) | 基于插件兼容的通信方法、装置、设备及存储介质 | |
CN113806195B (zh) | 数据处理方法、装置、设备、系统及存储介质 | |
CN114679472A (zh) | 通信系统、方法、装置、存储介质及电子设备 | |
CN112491614B (zh) | 一种用于嵌入式设备的配置信息在线自动生效方法及系统 | |
CN114461425A (zh) | 数据处理方法、装置、设备及计算机可读存储介质 | |
CN117082477A (zh) | 任务处理方法和装置、系统、存储介质及电子设备 | |
CN113608768A (zh) | 基于gRPC微服务的服务接口更新方法及系统 | |
CN113835904A (zh) | 一种远程过程调用控制方法、装置、设备及存储介质 | |
CN113127032A (zh) | 一种列车控制器的系统更新方法 | |
CN118200140B (zh) | 数据处理方法、管理系统及相关设备 | |
CN110750369B (zh) | 一种分布式节点管理方法及系统 | |
CN117201577B (zh) | 基于pisa的跨平台api和spi的通讯方法和系统 | |
CN118170566B (zh) | 面向边缘设备的消息处理方法及相关设备 | |
CN111324341A (zh) | 一种his系统的对接方法 | |
CN114495924A (zh) | 智慧随访语音唤醒方法及装置、电子设备 |
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 |