微服务架构的链路追踪和故障快速排查zipkin(微服务治理)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

Zipkin分布式任务追踪


zipkin简介

Zipkin 是一款开源的分布式实时数据追踪系统,由基于 Google Dapper 的论文设计而来,由 Twitter 公司提供开源实现,主要功能是聚集来自各个异构系统的实时监控数据,和微服务架构下的接口直接的调用链路和系统延时问题。

Zipkin 提供了自己的UI,应用将自己的监控数据报告给zipkin,由Zipkin 汇集并提供关联图展示,Zipkin可以追踪请求调用链路。Zipkin 以 Trace 的结构表示一次请求的追踪,又把每个Trace拆分为若干个有依赖关系的 Span,在微服务架构中,一次用户的请求可能会被后台的若干个服务处理,这完整的一次用户请求可以一条调用链路Trace,每个调用处理请求的服务可以理解为一个Span(如API服务),这个服务也可能继续调用其他的服务,因此形成一个Span的树形结构,以体现服务间的调用关系。

Zipkin 的用户界面除了可以查看 Span 的依赖关系之外,还以瀑布图的形式显示了每个 Span 的耗时情况,可以一目了然的看到各个服务的性能状况。打开每个 Span,还有更详细的数据以键值对的形式呈现,而且这些数据可以在装备应用的时候自行添加。

Spring Cloud Sleuth是对Zipkin的一个封装,对于Span、Trace等信息的生成、接入HTTP Request,以及向Zipkin Server发送采集信息等全部自动完成。

Spring Cloud Sleuth的简介

以下是Spring Cloud Sleuth的概念图

在Spring Cloud Sleuth的封装中,Zipkin分为两端,一个是Zipkin服务端,一个是Zipkin客户端,客户端也就是微服务的应用, 
客户端会配置服务端的url地址,一旦发生服务间的调用的时候,会被配置在微服务里面的Sleuth的监听器监听,并生成相应的 Trace 和 Span 信息写进http报文头里面,并同时向Zipkin服务端上传这些信息,如图所示。

主要方式有两种,一种是消息总线的方式如RabbitMq发送,还有一种是http报文的方式发送,向 Zipkin 服务端发送gzip的数据包,服务端接收到gzip的数据包进行解析,根据每个调用链路汇总成调用链路的信息,这里注意,每个 Zipkin Client 里面如果设置了登录验证,并不会影响Zipkin Server的信息收集,因为 Client 端会自动上传gzip的数据包给 Server 端,而无需 Server 端去调用 Client 端的接口去统计信息,Client 端在生成 Trace 统计信息的同时,如果配置了 MDC 或者在 logback 日志中集成了日志收集工具 logstash,则可以在 Client 端的控制台读到这些 Trace 和 Span 的信息,对每个 Span 的信息都会有对应的 Annotation 进行声明。

Span 的 Annotation 信息

这些 Annotation 分为四种类型:

  1. cs : Client Sent,这个标识着 Span的开始。

  2. sr : Server Received,这个标识着服务端接收到客户端发送请求的信息。Sleuth还可以根据 cs 和 sr 的时间戳来计算服务调用的延时。

  3. ss : Server Sent,这个标识表示服务端接收到客户端后要返回 response 信息。

  4. cr : Client Received,这个标识表示客户端收到服务端返回的 response 信息。

这几个注解反应了一次完整的服务间调用的信息,这些注解结合 Span id 信息可以从不同的应用汇总成调用链路的 Trace 信息,也就是说一次 Trace 的信息如果经过了 A 应用、B 应用,那么 Sleuth 会从 A 应用汇总对B应用调用产生的注解信息 Client Sent 和 Client Received,再从 B 应用汇总对 A 应用调用产生的 Server Received 和 Server Sent,A 应用根据自己调用信息组装成 Span 和携带相应的 Annotation 以gzip包的方式通过http发送给 Zipkin Server,B 应用像 A 应用一样也会组装这些信息给 Zipkin Server,Zipkin Server会根据 A 应用和 B 应用的信息汇总成统计信息展示在 Zipkin UI上。

Span的生命周期

  1. start:开始对Span命名和记录开始时间戳

  2. close:结束时记录结束时间戳并检查属性 exportable 然后汇总给 Zipkin,然后移除出当前的线程。

  3. continue:为 Span 新建实例并拷贝继续进行的 Span

  4. detach:Span 没有 stop 或者 close,仅仅是移出当前的线程。

  5. create with explicit parent:在另外的一个线程重新创建一个 Span 并且明确它的 parent。

Span 的存储方式

在 Zipkin Server里面有很多种存储方式,但是比较主流的有这两种:

  1. 放在内存中存储。

  2. 放在mysql中存储。 
    放在内存中的随着服务端的启动会出清空历史数据,如果想持久化保留这些数据,可以选择 mysql 的方式存储。 
    mysql配置方式参考:Stack Overflow 网友提供的参考方案 
    mysql 配置后有两个表,如图














本文转自wks9751CTO博客,原文链接:http://blog.51cto.com/wks97/2074615 ,如需转载请自行联系原作者



相关实践学习
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
1天前
|
运维 监控 Docker
使用Docker进行微服务架构的部署
【5月更文挑战第18天】本文探讨了如何使用Docker进行微服务架构部署,介绍了Docker的基本概念,如容器化平台和核心组件,以及它与微服务的关系。通过Docker,每个微服务可独立运行在容器中,便于构建、测试和部署。文章详细阐述了使用Docker部署微服务的步骤,包括定义服务、编写Dockerfile、构建镜像、运行容器、配置服务通信、监控和日志管理以及扩展和更新。Docker为微服务提供了可移植、可扩展的解决方案,是现代微服务架构的理想选择。
|
1天前
|
敏捷开发 监控 API
构建高效微服务架构:从理论到实践
【5月更文挑战第18天】 在当今快速发展的软件开发领域,微服务架构已经成为一种流行的设计模式,它通过将大型应用程序分解为一系列小型、独立的服务来提高系统的可伸缩性、弹性和维护性。本文旨在探讨如何从理论走向实践,构建一个高效的微服务架构。文章首先介绍微服务的基本概念和优势,然后详细讨论了在设计和部署微服务时需要考虑的关键因素,包括服务划分、通信机制、数据一致性、容错处理和监控策略。最后,结合具体案例分析,展示如何在现实世界中应用这些原则,确保微服务架构的高效运行。
|
1天前
|
存储 弹性计算 运维
探索微服务架构下的服务治理
【5月更文挑战第18天】 在当今软件工程领域,微服务架构因其灵活性、可扩展性以及促进团队协作等优势而受到广泛青睐。然而,随着系统规模的增长和服务数量的膨胀,服务治理成为确保系统稳定性和高效性的关键因素。本文将深入探讨微服务环境下的服务治理实践,包括服务发现、配置管理、负载均衡、故障处理等关键方面,旨在为开发者提供一套行之有效的服务治理策略。
|
1天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新范式
【5月更文挑战第18天】 随着现代软件开发的复杂性日益增长,传统的单体应用架构已难以满足快速迭代和灵活部署的需求。本文聚焦于一种新兴的解决方案——微服务架构,探讨其如何为后端开发带来革命性的改变。我们将深入分析微服务的核心概念、优势与挑战,并通过具体案例来阐述如何在实际项目中实施微服务架构。文章旨在为开发者提供一种系统化的方法,帮助他们理解并应用微服务架构,以提升系统的可维护性、扩展性和技术敏捷性。
9 2
|
1天前
|
测试技术 持续交付 API
构建高效的微服务架构:后端开发的现代实践
【5月更文挑战第18天】在数字化转型的浪潮中,微服务架构已成为企业追求敏捷、可扩展和容错能力的关键解决方案。本文将深入探讨微服务的核心概念,包括其设计原则、技术栈选择以及实施过程中的挑战与对策。通过对微服务架构实践的详细剖析,旨在为后端开发人员提供一套构建和维护高效微服务系统的实用指南。
|
4天前
|
SpringCloudAlibaba Dubbo 应用服务中间件
【微服务】微服务初步认识 - 微服务技术如何学习 · 认识微服务架构
【微服务】微服务初步认识 - 微服务技术如何学习 · 认识微服务架构
12 0
|
1天前
|
缓存 算法 Apache
微服务架构下的服务发现与注册机制
【5月更文挑战第18天】 随着现代软件系统向着分布式和微服务架构演进,服务发现与注册成为确保系统弹性和可伸缩性的关键因素。本文将探讨在微服务环境下实现服务发现与注册的模式,分析其必要性,并深入讨论常见的解决方案以及面临的挑战。文中不仅介绍了服务发现的基本原理和流程,还对流行的服务发现工具如Consul、Etcd和Zookeeper进行了比较,最后提出了一套优化策略以增强系统的鲁棒性和性能。
|
1天前
|
运维 负载均衡 监控
探索微服务架构下的服务网格
【5月更文挑战第17天】 在当代软件开发领域,微服务架构已成为构建可扩展、灵活且容错的系统的首选模式。然而,随之而来的复杂性问题也日益凸显,特别是在服务间的通信管理上。服务网格(Service Mesh)作为一种新兴的解决方案,专门处理服务到服务的通信问题,旨在提供一种更加智能和动态的方式来管理微服务环境中的流量和服务依赖。本文将深入探讨服务网格的概念、优势以及如何在微服务架构中实现高效通信。
|
2天前
|
Kubernetes API 数据库
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第17天】 随着云计算的普及和容器化技术的成熟,微服务架构已成为企业软件开发的首选模式。该架构通过将大型应用程序拆分为一系列小型、自治的服务来提供灵活性和可扩展性。本文将探讨微服务架构的关键概念,包括服务的细粒度划分、独立部署、以及如何通过容器编排实现高可用性。同时,我们将讨论微服务实施的最佳实践和面临的挑战,为后端开发者提供构建和维护微服务系统的实用指南。
|
2天前
|
消息中间件 安全 数据库
构建高性能微服务架构的实践指南
【5月更文挑战第17天】 随着现代软件开发的复杂性增加,微服务架构已成为众多企业和开发团队的首选模式。本文旨在探讨如何构建一个高性能的微服务系统,涵盖从设计原则、技术选型到性能优化的关键步骤。我们将通过实际案例和最佳实践,展示如何在保证系统可扩展性、灵活性的同时,确保系统的响应速度和稳定性。