当前位置: 首页 > news >正文

链路追踪详解(二):链路追踪技术的演进

目录

早期的链路追踪

分布式系统的挑战

链路追踪技术的诞生

链路追踪系统的开源和标准化

微服务架构对链路追踪技术的促进

云原生时代下的链路追踪技术

链路追踪技术未来的趋势

小结


链路追踪的发展历程可以追溯到几十年前,随着互联网技术的不断发展,链路追踪技术也在不断演进。

早期的链路追踪

在最早的计算机系统中,软件通常运行在单一的大型机或个人电脑上,系统的复杂性相对较低。那时,开发人员通常通过日志文件来追踪程序的执行流程。这种方法在小型和中等规模的系统中效果良好,但随着系统规模的扩大和分布式计算的兴起,就产生了严重的局限性。

分布式系统的挑战

20世纪90年代,随着互联网的兴起,分布式系统开始普及。在分布式系统中,一个请求可能需要经过多个服务的处理,这些服务分布在不同的服务器上,甚至分布在不同的数据中心。在某一个服务中记录的日志文件就记录不了请求的整个链路信息了,因为每个服务产生的日志只记录了服务自身的情况。

链路追踪技术的诞生

为了应对分布式系统的挑战,链路追踪技术应运而生。Google 在2010年发表了一篇关于其内部链路追踪系统 Dapper 的论文,这篇论文极大地推动了链路追踪技术的发展。Dapper 的设计理念和架构成为了链路追踪系统的标准和相关工具的基础。最初的链路追踪系统主要是由大型互联网公司内部开发的。如 Google 的 Dapper、Twitter 的 Zipkin 和 Uber 的 Jaeger 等,这些系统可以跨服务追踪请求,并将追踪数据集中存储、分析和可视化。

链路追踪系统的开源和标准化

随着 Dapper 论文的公开,社区开始基于这些理念开发开源的链路追踪系统。Zipkin 和 Jaeger 等工具受到社区的广泛欢迎,并逐渐成为业界的标准实践。

OpenTracing 和 OpenCensus 项目的出现,进一步推动了链路追踪技术的标准化。这些项目提供了一套标准的 API 和协议,使得不同的追踪工具和系统可以互相兼容。

OpenTracing 和 OpenCensus 于2019年5月合并为 OpenTelemetry(简称 Otel),使得链路追踪技术的标准进一步统一,目前主流的链路追踪系统都适配了这个标准,例如上文提到的 Zipkin 和 Jaeger。

微服务架构对链路追踪技术的促进

随着微服务架构的逐渐普及,使得链路追踪技术变得更加重要。在微服务架构中,一个业务流程可能涉及数十个甚至上百个微服务。在这种情况下,链路追踪成为了理解系统行为、诊断问题和优化性能的关键工具。

云原生时代下的链路追踪技术

在云原生时代,链路追踪技术成为了理解、监控和优化微服务架构的关键技术。随着云原生计算的兴起,服务网格(如 Istio 和 Linkerd)开始流行。服务网格提供了一种新的方式来处理服务间的通信,内置了链路追踪功能,使得在云环境中实现链路追踪变得更加容易。服务网格可以自动收集追踪数据,无需在每个服务中单独实现。

链路追踪技术未来的趋势

随着人工智能和机器学习技术的发展,未来的链路追踪系统可以减轻开发人员的负担,使他们不需要手动插入追踪代码,并且会提供更加深入的分析和洞见。智能化的链路追踪将能够自动识别系统中的问题,甚至在问题发生前预测和防范,帮助开发人员优化系统性能和资源分配。

小结

链路追踪技术的发展过程是不断适应新兴技术挑战、满足日益增长的系统复杂性需求的过程。从简单的日志文件到复杂的分布式追踪系统,链路追踪技术已经成为现代软件开发不可或缺的一部分,将继续随着技术的进步而进化。

相关文章:

  • 【Linux】coredump 文件的例子分析
  • c++day1
  • C#线程 ConcurrentQueue安全队列介绍
  • 前端技术探秘-Nodejs的CommonJS规范实现原理 | 京东物流技术团队
  • 【TIDB】TiDB认证考试PTCA 练习题 题库
  • 【javaWeb】HTTP协议
  • Spring事件注解@EventListener【观察】
  • 【面试HOT200】滑动窗口篇
  • Centos8部署LNMP架构
  • php使用Session实现简单购物车功能
  • git commmit type格式
  • 小程序静默授权获取unionid
  • Jenkins 配置节点交换内存
  • java:简单入门定时任务的几种方式Timer、Quartz、Spring Task
  • 隐式类型转化
  • 【comparator, comparable】小总结
  • 【Linux系统编程】快速查找errno错误码信息
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 2017-09-12 前端日报
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • egg(89)--egg之redis的发布和订阅
  • iOS | NSProxy
  • Java教程_软件开发基础
  • MYSQL 的 IF 函数
  • node和express搭建代理服务器(源码)
  • Promise初体验
  • STAR法则
  • V4L2视频输入框架概述
  • Vue学习第二天
  • 产品三维模型在线预览
  • 代理模式
  • 给第三方使用接口的 URL 签名实现
  • 前端技术周刊 2019-01-14:客户端存储
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 深入 Nginx 之配置篇
  • 算法-插入排序
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #define,static,const,三种常量的区别
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (02)Hive SQL编译成MapReduce任务的过程
  • (02)vite环境变量配置
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)winform之ListView
  • **CI中自动类加载的用法总结
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 设计一套高性能的弱事件机制
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET框架设计—常被忽视的C#设计技巧
  • @AliasFor注解