胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四维口袋KVP最具价值技术专家,技术领域专家团成员,2021电子工业出版社年度优秀作者,获得2023电子工业出版技术成长领路人称号,荣获2024年电子工业出版社博文视点20周年荣誉专家称号,2024电子工业出版社年度优秀作者。
目录
2.5 OpenTracing和OpenCensus/OpenTelemetry
分布式链路追踪架构设计及核心技术原理涉及多个方面,以下是关于这一主题的详细阐述。
1.概要分析
1.1 分布式链路追踪的架构设计
分布式链路追踪系统是一种用于监控和分析在微服务架构中的服务请求流通过程的工具。随着现代企业转向微服务架构,一个业务请求往往会涉及多个微服务的调用。这些调用在不同的服务器、不同的服务实例上可能以复杂的链式或网状模式相互作用,当出现性能问题或错误时,很难快速定位问题的根源。分布式链路追踪系统通过收集、存储并分析服务间的调用信息,帮助开发者和运维人员理解服务请求的流转过程。
分布式链路追踪系统的一般架构通常包括以下几个关键组件:
(1)Tracing SDK:在应用端通过侵入或者非侵入的方式注入,用于跟踪、生成、传播和上报请求调用链路数据。
(2)Collect Agent:通常部署在靠近应用侧的一个边缘计算层,用于提高Tracing SDK的写性能,并减少后端的计算压力。
(3)Gateway:对采集的链路跟踪数据进行鉴权。
(4)消息队列(如Kafka):用于消息的缓冲存储。
(5)数据清洗和分析模块:在数据写入存储层之前,对消息队列中的数据进行清洗和分析,以规范和适配不同的数据源上报的数据,并支持更高级的业务功能(如流量统计、错误分析等)。
(6)存储层:用于存储链路追踪数据,通常需要考虑数据量级和查询场景的特点来设计选型,常用的开源产品包括Elasticsearch、Cassandra、Clickhouse等。
(7)告警系统:对流处理分析后的结果进行监控,当发现异常(如错误率超过指定阈值)时,主动发出告警通知。
1.2 分布式链路追踪的核心技术原理
分布式链路追踪技术的核心思想是在用户一次分布式请求服务的调用过程中,将请求在所有子系统间的调用过程和时空关系追踪记录下来,还原成调用链路集中展示。这包括各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等信息。
在分布式链路追踪系统中,最核心的概念是链路追踪的数据模型定义,主要包括Trace和Span。(1)Trace:是一个逻辑概念,表示一次(分布式)请求经过的所有局部操作(Span)构成的一条完整的有向无环图(DAG)。其中,所有的Span的TraceId相同。
(2)Span:是真实的数据实体模型,表示一次(分布式)请求过程的一个步骤或操作,代表系统中一个逻辑运行单元。Span之间通过嵌套或者顺序排列建立因果关系。Span包含以下关键属性:
- Name:操作名称,如一个RPC方法的名称、一个函数名。
- StartTime/EndTime:起始时间和结束时间,表示操作的生命周期。
- ParentSpanId:父级Span的ID。
- Attributes:属性,一组键值对构成的集合。
- Event:操作期间发生的事件。
- SpanContext:Span上下文内容,通常用于在Span间传播,其核心字段包括TraceId、SpanId。
分布式链路追踪系统的核心任务是围绕Span的生成、传播、采集、处理、存储、可视化、分析来构建整个系统。这涉及到在服务之间传递Trace ID和Span ID等上下文信息,记录请求的开始和结束时间戳以及可能发生的各种事件或错误信息,然后将这些信息存储起来供后续查询和分析。
1.3 分布式链路追踪的应用场景
分布式链路追踪技术广泛应用于微服务架构、云原生应用等复杂系统中,是现代监控和性能优化的重要工具。它可以帮助开发者和运维人员实现以下目标:
(1)性能优化:通过跟踪请求并分析延迟,找出系统中的性能瓶颈。
(2)故障诊断:当系统出现错误时,可以追踪到出现问题的服务或组件,快速诊断和修复问题。
(3)依赖分析:可视化请求流通过程,帮助开发人员了解服务之间的依赖关系。
(4)用户体验分析:跟踪用户请求,评估用户体验相关的性能指标。
(5)容量规划:根据跟踪数据分析系统的负载,指导资源的合理分配。
分布式链路追踪架构设计及核心技术原理涉及多个方面,包括架构设计、核心技术原理以及应用场景等。通过构建完整的请求追踪系统,开发人员和运维人员可以更好地理解系统的工作方式,找出性能问题,并提供更好的用户体验。随着技术的不断发展,分布式链路追踪系统将在更多领域发挥重要作用。
2.分布式链路追踪技术选型
分布式链路追踪技术是微服务架构和云原生应用中的重要组成部分,用于监控和分析服务间的调用链路。在选择分布式链路追踪技术时,需要考虑多个因素,如性能、可扩展性、易用性、社区支持等。以下是一些主流的分布式链路追踪技术的选型建议。
2.1 Jaeger
概述:Jaeger是由Uber开源的分布式追踪系统,支持OpenTracing标准,易于与各种编程语言和框架集成。
特点:
- 高性能:专为大规模分布式系统设计,适合高并发、大规模系统。
- 丰富的功能:支持多种存储后端(如Elasticsearch、Cassandra),具备查询、可视化、错误诊断等多种强大功能。
- 扩展性:支持多种采样策略和链路追踪数据的丰富查询。
适用场景:适合大型分布式系统,尤其是在高性能、高并发的场景下表现优异。同时,也适合需要与其他平台或语言进行互操作,且希望遵循OpenTracing标准的场景。
2.2 Zipkin
概述:Zipkin是由Twitter开源的分布式链路追踪系统,最早集成在Spring Cloud Sleuth中。
特点:
- 轻量级:架构相对简单,容易部署,尤其适合中小规模系统。
- 集成度高:Spring Cloud Sleuth对Zipkin的支持非常完善,集成简单,提供了现成的解决方案。
- 查询功能:支持可视化链路展示,方便查看微服务调用的延时、失败等信息。
适用场景:适合中小型项目(规模不大),且已使用Spring Cloud生态技术的场景。
2.3 SkyWalking
概述:SkyWalking是由华为开源的分布式链路追踪和APM(应用性能管理)工具。
特点:
- 开箱即用:从数据收集到可视化仪表盘都有现成的功能,尤其适合希望快速搭建一整套APM解决方案的团队。
- 多种监控手段:支持多种插件,UI功能较强,接入端无代码侵入。
- 性能和扩展性:支持大规模分布式系统的监控,具备强大的可扩展性,支持高并发的链路追踪数据采集和处理。
适用场景:适合需要全方位监控和性能分析的大型分布式系统,尤其是那些希望利用SkyWalking的丰富功能和强大扩展性的场景。
2.4 Pinpoint
概述:Pinpoint是一款开源的APM工具,最初由韩国的Naver公司开发。
特点:
- 分布式跟踪:支持跟踪分布式系统中不同服务之间的调用关系,提供详细的调用链分析。
- 实时监控:通过仪表盘实时查看应用的状态,如响应时间、吞吐量、硬件资源使用情况等。
- 非侵入式安装:不需要修改现有代码即可集成Pinpoint,可以通过字节码注入的方式收集数据。
适用场景:适合微服务架构或者大型分布式系统的性能监控,可以追踪多个服务间的调用关系,帮助开发者快速定位系统的性能瓶颈。
2.5 OpenTracing和OpenCensus/OpenTelemetry
概述:OpenTracing和OpenCensus(后合并为OpenTelemetry)是由不同组织发起的开源项目,旨在为分布式追踪系统提供统一的接口规范。
特点:
- OpenTracing:提供了跨语言的标准API来记录分布式系统中的Trace和Span,使得开发者能够通过标准接口与各种追踪实现集成。
- OpenTelemetry:结合了OpenTracing的标准化API和OpenCensus的实现,提供了一个统一的库,支持分布式追踪、度量和日志的收集和导出。
适用场景:适合那些希望使用统一标准进行分布式追踪和度量收集的场景,OpenTelemetry逐渐成为行业标准,并被广泛应用于云原生应用程序中。
在选择分布式链路追踪技术时,需要根据具体的业务需求、系统规模和技术栈等因素进行综合考虑。以上提到的技术选型各有特点,可以根据实际情况选择最适合的技术方案。
3.Pinpoint核心架构设计及技术原理分析
Pinpoint是一款开源的APM(Application Performance Management/应用性能管理)工具,用于监控大型分布式系统的性能。它提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。以下是对Pinpoint核心架构设计及技术原理的详细分析。
3.1 核心架构设计
Pinpoint的核心架构设计主要包括以下几个部分。
3.1.1 Pinpoint Agent
(1)作用:用于收集应用端监控数据,无侵入式,即不需要修改应用程序代码即可进行监控。它向Pinpoint Collector发送跟踪数据。
(2)工作原理:在应用程序启动时,Pinpoint Agent通过字节码增强技术(或称为动态探针技术)拦截和修改应用程序的字节码,从而在方法调用前后插入链路采集逻辑。
3.1.2 Pinpoint Collector
(1)作用:作为数据收集模块,接收Agent发送过来的监控数据,并存储到HBase或其他存储系统中。
(2)部署方式:通常部署在Web容器上,如Tomcat。
3.1.3 Pinpoint Web
(1)作用:作为监控展示模块,将收集到的数据显示成WEB网页形式,方便用户查看系统调用关系、调用详情、应用状态等,并支持报警等功能。
(2)部署方式:同样部署在Web容器上,如Tomcat。
3.1.4 HBase Storage
作用:用于保存监控数据。采用HBase进行存储,可以支持大规模的数据存储和查询。
3.2 技术原理分析
3.2.1 分布式事务追踪
(1)基础:Pinpoint基于Google的Dapper论文进行实现,通过跟踪分布式应用之间的调用来提供解决方案。
(2)工作原理:在服务各节点彼此调用的时候,记录并传递一个应用级别的标记(TraceId),这个标记可以用来关联各个服务节点之间的关系。例如,在HTTP请求中,这个标记会被加入到HTTP头中,各应用的Agent在进行上报的时候,将该标记以及对应的上下级应用上报到Pinpoint Collector中,从而构建出完整的调用链路。
3.2.2 字节码增强技术
(1)作用:Pinpoint使用字节码增强技术来实现无侵入式的调用链采集。
(2)工作原理:在应用程序启动时,Pinpoint Agent通过字节码增强技术拦截和修改应用程序的字节码,从而在方法调用前后插入链路采集逻辑。这种方式不需要修改应用程序代码,对代码无侵入性。
3.2.3 数据结构与处理
(1)Span:RPC(远程过程调用)追踪的基本单元,代表了远程调用到达时处理的工作并且包含了追踪数据。每个Span都包含一个TraceId、一个SpanId和一个ParentSpanId。
(2)Trace:Span的集合,由关联的RPC调用组成。在分布式系统中,每个应用代表一个Span,不同应用的一次全链路的请求表示一个Trace。
(3)数据处理:Pinpoint Collector负责接收Agent发送的监控数据,并进行分析和存储。Pinpoint Web则从存储系统中读取数据并展示给用户。
3.2.4 插件机制
(1)作用:为了适应不同行业及应用场景的需求,Pinpoint设计了一套开放且可扩展的插件架构。
(2)工作原理:用户可以根据自身业务特点定制化开发监控插件,通过实现特定接口或继承抽象类的方式创建自定义插件,从而实现对特定指标或行为的精准捕捉。这些插件以jar文件的形式部署在Pinpoint Agent的plugin目录下。
3.2.5 采样原理
(1)作用:为了提高性能并减少存储压力,Pinpoint支持对请求的采样。
(2)工作原理:某条请求是否被采样取决于整个链路开始的机器。该机器使用特定的采样算法来决定是否对该请求进行采样。采样的标志会一直在链路中透传。例如,在HTTP请求中,会在header里面增加Pinpoint-Sampled字段来表示是否采样。
Pinpoint的核心架构设计和技术原理体现了其作为一款高性能、可扩展的APM工具的优势。通过分布式事务追踪、字节码增强技术、灵活的数据结构与处理机制、开放的插件机制以及智能的采样原理,Pinpoint能够为用户提供全面的分布式系统监控和性能优化解决方案。
4.SkyWalking核心架构设计及技术原理分析
SkyWalking是一款专为云原生、微服务架构设计的链路追踪工具,通过其独特的架构和设计,帮助开发者有效监控和管理分布式系统的性能。以下是对SkyWalking核心架构设计及技术原理的详细分析。
4.1 核心架构设计
SkyWalking的架构逻辑上可以分为以下几个核心部分 。
4.1.1 探针(Agent)
(1)负责在应用程序中收集追踪数据和指标数据。探针通过字节码增强技术,在运行时动态注入追踪代码,实现对业务代码的无侵入性监控。
(2)探针在应用程序启动时会自动加载并初始化。通过字节码增强技术,探针会在关键方法入口和出口处插入追踪代码,记录方法的调用时间、执行时长、参数等信息,并生成追踪上下文。采集到的数据会定期上报到收集器。
(3)探针采用插件化设计,支持多种协议和中间件的监控。用户可以通过编写插件来扩展探针的功能,满足不同的监控需求。
4.1.2 收集器(Collector)
(1)数据处理中心,负责接收探针上报的数据,并进行聚合、分析和存储。
(2)接收模块(Receiver)负责接收探针上报的数据,支持多种协议,如gRPC、HTTP等。分析模块(Analyzer)对接收到的数据进行解析和聚合,生成各种监控指标和追踪链路。存储模块(Storage)将处理后的数据存储到后端存储系统中,如Elasticsearch、H2、MySQL等。
(3)收集器还支持多种数据导出方式,如gRPC、HTTP等,方便与其他系统进行集成。
4.1.3 存储层(Storage)
(1)负责持久化收集器处理后的数据。支持多种存储方案,不同存储方案在读写性能上有所差异,需根据实际需求选择。
(2)分布式存储方案更适合大规模监控系统。存储层还提供了丰富的插件和工具,便于数据分析和可视化。
4.1.4 查询服务(Query Service)
(1)负责响应用户的查询请求,从存储层中检索数据,并返回给可视化界面。
(2)查询服务会根据用户查询条件从存储层中检索数据,对频繁查询的数据进行缓存以提高查询效率。同时,还会将检索结果转换为可视化界面所需的格式。
4.1.5 可视化界面(UI)
(1)用户交互层,提供了丰富的监控数据和追踪链路的可视化展示。
(2)通过服务拓扑图展示服务之间的调用关系和依赖关系;通过追踪链路展示单个请求的完整调用链路;通过指标监控展示服务的各项性能指标,如响应时间、吞吐量等。还提供了告警管理功能,支持自定义告警规则。
4.2 技术原理分析
SkyWalking的核心技术原理主要围绕分布式追踪、性能监测和数据可视化展开。
4.2.1 分布式追踪
(1)SkyWalking能够追踪分布式系统中的请求流,并记录请求在各个组件之间的传递过程。这有助于识别潜在的性能瓶颈和优化机会。
(2)分布式追踪的核心概念包括Trace(表示一个完整的请求调用链路)、Segment(表示一个服务实例在处理请求时生成的追踪片段)和Span(表示一个具体的操作或方法调用)。
4.2.2 性能监测
(1)通过监测关键性能指标,如响应时间、吞吐量等,SkyWalking帮助开发人员了解系统的整体性能表现,并及时发现性能下降或异常。
(2)性能监测的数据来源于探针收集的性能指标数据,包括CPU使用率、内存使用率等。收集器会对这些数据进行聚合和分析,生成全局的监控指标。
4.2.3 数据可视化
(1)SkyWalking提供了丰富的可视化界面,帮助开发人员直观地查看和分析监控数据。
(2)数据可视化界面展示了服务拓扑图、追踪链路、性能指标图表等,使开发人员更容易理解系统的运行状况。通过可视化界面,开发人员可以快速定位问题、优化系统性能。
综上所述,SkyWalking通过其独特的架构设计和核心技术原理,为开发人员提供了一种高效、灵活、可扩展的分布式系统跟踪和性能监测工具。
标签:架构设计,调用,Pinpoint,链路,追踪,分布式 From: https://blog.csdn.net/huxian1234/article/details/144491829