链路追踪(Tracing)其实很简单——分布式链路追踪的起源

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
简介: 作者:夏明(涯海) 创作日期:2022-07-14 专栏地址:【稳定大于一切】【稳定大于一切】冬日的周末,你躺在温暖的被窝里,点了一份可口的外卖;双11的零点,看着满满的购物车,你在疯狂提交订单;假期约上小伙伴,一起激情开黑,五杀超神……在这个精彩纷呈的互联网世界里,你的屏幕背后又隐藏着什么?你的每...
作者:夏明(涯海) 创作日期:2022-07-14 专栏地址: 【稳定大于一切】

冬日的周末,你躺在温暖的被窝里,点了一份可口的外卖;双11的零点,看着满满的购物车,你在疯狂提交订单;假期约上小伙伴,一起激情开黑,五杀超神……在这个精彩纷呈的互联网世界里,你的屏幕背后又隐藏着什么?你的每一次点击行为,在 IT 的世界里会流经哪些节点,调用哪些服务,带来哪些变化?这一切仿佛自然天成,细细思索却又庞杂精密,超出了人力探索的边界。而分布式链路追踪就是追溯请求在 IT 系统间流转路径与状态的一门技术,接下来,让我们通过对分布式链路追踪的学习,一起来揭秘这个神奇的 IT 世界吧!

说到分布式链路追踪,就绕不开分布式系统与微服务的兴起。早期的 IT 系统非常的简单,几乎所有程序都运行在同一个节点,互相之间也没有什么依赖。但是随着硬件技术突飞猛进,硬件成本大幅下降,软件的复杂度却越来越高。单一系统的性能已经无法满足复杂的数据计算任务,而软件逻辑的复杂性也导致维护成本大幅上升。另外,单节点的可靠性也难以保障,不可避免的会偶尔出现宕机等行为,影响软件的可用性。“性能、可维护性和可用性”这三大因素促使了分布式系统与微服务的诞生。

为了解决上述问题,人们很自然的想到,既然一个硬件节点无法很好的运行软件,那么,能不能够通过多个节点来共同完成?并且为不同的节点分派不同的任务,提高效率。这就好比一个人很难造出一辆汽车,但是通过不同角色的分工协同就可以流水线的量产汽车,分布式系统与微服务的理念亦是如此,如下图所示。

分布式系统与微服务自诞生之日起,就被予以广泛的应用,主要得益于以下几点优势:

  • 扩展性: 分布式系统天然具备“按需扩展”的能力,比如双11大促前通过添加机器实现快速水平扩容,大促结束后释放机器,充分利用云计算的分时复用能力,节约成本。利用微服务,还可以实现按需精准扩容,比如登录服务扩容10倍,下单服务扩容3倍,最大化的节省资源。

  • 可靠性: 分布式系统可以有效抵抗“单点风险”,不会因为某一个节点的故障,影响整体的服务可用性。结合流量调度、离群实例摘除和弹性扩容等技术,甚至可以实现故障自愈。

  • 可维护性: 分布式系统的可维护性更强,一方面我们将一个复杂服务拆分成多个简单的微服务,每一个微服务的逻辑都更加清晰、更易理解。就好比我们写代码,将一个几百行的复杂函数重构成若干个简单函数,代码可读性就会直线上升。另一方面,一些通用的微服务可以被高度复用,无需重复开发和维护,比如你在开发一个电商 APP,可以直接调用第三方提供的支付、物流等服务接口,整体开发和维护效率将大幅提升。

虽然分布式系统与微服务具有非常显著的优势,但凡事有利必有弊,它们在有效解决原有问题的基础上,也为系统开发和运维带来了新的挑战,主要包括以下几点:

  • 模糊性: 随着系统的分布式程度越来越高,异常表象与根因之间的逻辑联系变得愈加模糊,问题诊断的难度急剧上升。比如 A、B 两个服务共享同一个数据库实例,当 A 服务在压测期间,大量占用数据库的服务端连接和计算资源,会导致 B 服务出现连接超时或响应变慢等问题。如果 B 服务是通过 C 服务间接依赖该数据库实例,问题的定位就会变得更加困难。

  • 不一致: 虽然分布式应用从总体上变的更加可靠,但是每一个独立节点的状态却难以保证。导致这种不一致的原因有很多,比如前文提到的单机故障这种预期外的不一致,或者应用 Owner 执行分批发布或流量灰度时导致的预期内行为不一致。这种不一致性导致我们难以确定一个用户请求在系统内的准确执行路径与行为逻辑,可能引发不可预知的逻辑灾难。

  • 去中心化: 当你的系统拥有上千个微服务镜像运行在数百台机器实例上,你该如何梳理它们之间的依赖关系,又该如何找到核心业务的关键执行路径?特别是在分布式的场景下,你没有一个中心化的节点(Master)来保存每个服务之间的依赖与调度状态,每个独立节点都在自行其是,无法分辨自己在整个系统中的位置,只能“盲人摸象、管中窥豹”,缺乏全局视图。

分布式系统与微服务带来的新挑战无疑让人头痛,但也带来了新技术的发展契机,科技的发展总是这样循环往复,螺旋式上升。它们带来的新问题,促使了分布式链路追踪的诞生,使你能够有效的观察全局,追踪流量。我们将在下个章节了解分布式链路追踪的诞生历程与核心理念。

推荐产品

阿里云 ARMS 可观测

阿里云链路追踪

推荐社区

GitHub 专栏地址:https://github.com/StabilityMan/StabilityGuide

相关实践学习
基于OpenTelemetry构建全链路追踪与监控
本实验将带领您快速上手可观测链路OpenTelemetry版,包括部署并接入多语言应用、体验TraceId自动注入至日志以实现调用链与日志的关联查询、以及切换调用链透传协议以满足全链路打通的需求。
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
运维 测试技术 调度
链路追踪(Tracing)其实很简单——分布式链路追踪的起源
冬日的周末,你躺在温暖的被窝里,点了一份可口的外卖;双11的零点,看着满满的购物车,你在疯狂提交订单;假期约上小伙伴,一起激情开黑,五杀超神……在这个精彩纷呈的互联网世界里,你的屏幕背后又隐藏着什么?你的每一次点击行为,在 IT 的世界里会流经哪些节点,调用哪些服务,带来哪些变化?这一切仿佛自然天成,细细思索却又庞杂精密,超出了人力探索的边界。而分布式链路追踪就是追溯请求在 IT 系统间流转路径与状态的一门技术,接下来,让我们通过对分布式链路追踪的学习,一起来揭秘这个神奇的 IT 世界吧!
402 0
链路追踪(Tracing)其实很简单——分布式链路追踪的起源
|
监控 网络协议 Java
分布式链路追踪- SkyWalking使用手册
分布式链路追踪- SkyWalking使用手册
1263 0
分布式链路追踪- SkyWalking使用手册
|
4月前
|
存储 监控 开发者
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
|
7月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
1038 0
|
存储 监控 数据可视化
Golang链路追踪:实现高效可靠的分布式系统监控
Golang链路追踪:实现高效可靠的分布式系统监控
|
消息中间件 监控 安全
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
164 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
|
消息中间件 Java Kafka
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
162 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
|
消息中间件 Cloud Native Apache
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(1)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
99 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(1)
|
SpringCloudAlibaba 算法 Java
Spring Boot项目如何实现分布式日志链路追踪
作为一名后端开发工程师,排查系统问题用得最多的手段之一就是查看系统日志,在当下主要的分布式集群环境中一般使用ELK(Elasticsearch , Logstash, Kibana)来统一收集日志,以便后续查看日志定位追踪相关问题。但是在并发情况下,大量的系统用户即多线程并发访问后端服务导致同一个请求的日志记录不再是连续相邻的,此时多个请求的日志是一起串行输出到文件中,所以我们筛选出指定请求的全部相关日志还是比较麻烦的,同时当后端异步处理功能逻辑以及微服务的下游服务调用日志追踪也有着相同的问题。
|
消息中间件 数据可视化 JavaScript
什么是链路追踪?分布式系统如何实现链路追踪?
什么是链路追踪?分布式系统如何实现链路追踪?

热门文章

最新文章