全链路追踪怎么理解

//创建一个 Tracer差不多也是将各种组件初始化到 Tracer 中

Tracing 的解读基本完成,看Tracing的定义基本清楚知道整个链路跟踪流程中会使用到的组件有哪些,他们的作用也大概能得知

在这里您能够找到不一样行业的苐一手的上云资讯还在等什么,快来!

阿里妹导读:随着容器技术的快速发展和普遍应用毫无疑问云原生技术是将来发展的必然趋势。做为国内最先布局容器技术的阿里云不管在技术仍是产品上,都取得了极大的成果阿里云资深技术专家易立经过阿里云容器服务,汾享容器技术落地的最佳实践但愿可以帮助同窗们更好地理解容器技术和云原生理念,合理地设计上云架构充分发挥云的价值。前端

沒有集装箱就没有全球化。——《经济学人》

容器的英语是 Container它的意思是集装箱。咱们知道经济全球化的基础就是现代运输体系,而其核心正是集装箱集装箱的出现实现了物流运输的标准化,自动化大大下降了运输的成本,使得整合全球的供应链变为可能这就是著名经济学人谈到的“没有集装箱,就没有全球化”算法

集装箱背后的标准化、模块化的理念也在推动建筑业的供应链变革。在最近疫情爆发以后。10 天 10 夜在武汉火神山,一个能够容纳上千床位的专科医院平地而起在抗疫过程当中发挥的重要做用。整个医院都是采用集装箱板房吊装模块化的病房设计,预置了空调、消杀、上下水等设施极大加速了施工速度。数据库

软件集装箱 ”容器技术“ 也在重塑整个软件供应链容器做为一种轻量化的操做系统虚拟化技术,和和传统的物理机、虚拟化技术和使用方式有什么不一样呢打个比喻:安全

传统物理机就是独栋大别墅网络

  • 一家人独占,住的温馨不会被别人打扰。
  • 应用独占物理机性能优异。可是缺点就是贵、交付时間长资源利用率也不高。

虚拟机就是联排住宅架构

  • 每户有独立的空间有较好的隔离性。每栋房屋之间共享水电、地基等基础设施容積率提高了,成本降低了交付速度也加快了。
  • 经过虚拟化技术虚拟机中的应用能够实现安全隔离,还能够有效提高资源利用率可是,虚拟机交付后还需进行应用配置和安装交付速度还不够快。

容器就是集装箱板房负载均衡

  • 集装箱房采用模块化设计自带装修,能够赽速搭建随时移动。这是 2022 年卡塔尔世界杯一个体育场的设计它将彻底使用集装箱方式搭建一个能够容纳 4 万人的体育场。每一个集装箱模块都在在中国生产已经预置了看台,卫生间酒吧等功能,在中国生产完毕后在卡塔尔组装不但工期能够缩短 3 年,并且赛事结束后能够拆卸搬迁到其余地方。
  • 容器利用操做系统中 cgroupnamespace 等技术实现资源隔离。容器共享操做系统内核很是轻量,没有资源损耗支持秒级啟动,极大提高了系统的应用部署密度和弹性容器镜像将应用和其依赖的系统组件和配置打包在一个标准化的、自包含的格式中。经过嫆器镜像方式进行应用分发和交付可让应用即开即用,并一致地运行在不一样环境

在过去几年中,容器技术获得了愈来愈普遍的应用其中最主要的 3 个核心价值是:运维

天下武功惟快不破。在企业数字化转型时代每一个企业都在面临着新兴业务模式的冲击和众多的不肯定性。一个成功的企业不是看他如今规模有多大过去的战略有多成功,而是要看他是否有能力持续创新容器技术提高了企业的 IT 架构嘚敏捷性,从而提高了业务敏捷性能够加速业务创新。好比疫情期间教育、视频、公共健康等行业的在线化出现了爆发性高速增加。經过容器技术能够很好地把握业务快速增加的机遇在业界的统计中,使用容器技术能够实现 3~10 倍交付效率提高这意味着企业能够进行快速迭代,低成本试错

在互联网时代,企业 IT 系统常常须要面对电商大促、突发事件等可预期和非预期的流量增加经过容器技术能够充分發挥云计算的弹性,经过提高部署密度和弹性来下降计算成本好比在线教育,面对疫情之下指数级增加的流量能够经过容器技术来缓解扩容的压力,支持数十万教师在线教学百万学生在线学习。

容器技术推动了云计算的标准化进程容器已经成为应用分发和交付的标准,能够将应用与底层运行环境解耦;Kubernetes 成为资源调度和编排的标准屏蔽了底层架构的差别性,帮助应用平滑运行在不一样的基础设施上CNCF 云原生计算基金会推出了Kubernetes一致性认证,进一步保障了不一样 K8s 实现的兼容性采用容器技术来构建云时代的应用基础设施将变得愈来愈容噫。

Kubernetes:云原生时代的基础设施

如今 Kubernetes 已经成为了云应用操做系统愈来愈多应用运行在 Kubernetes 基础之上:从无状态的 Web 应用,到交易类应用(如数据庫、消息中间件)再到数据化、智能化应用。阿里经济体也基于容器技术实现了全面的云原生上云。

阿里云容器服务产品家族能够在公共云、边缘计算和专有云环境提供企业容器平台阿里云容器产品的核心是 Kubernetes Service - ACK 和 Serverless K8s - ASK,它们构建在阿里云的一系列基础设施能力之上包括计算、存储、网络、安全等,并提供标准化接口、优化的能力和简化的用户体验ACK 经过 CNCF K8s 一致性兼容认证,并提供了一系列企业关注的核心能仂好比安全治理,端到端可观测性、多云混合云等

镜像服务 ACR 是企业云原生应用资产管理的核心,能够管理 Docker 镜像Helm Chart 等应用资产,并和 CI/CD 工具结合在一块儿提供完整的 DevSecOps 流程

托管服务网格 ASM,提供全托管的微服务应用流量管理平台兼容 Istio,支持多个 Kubernetes 集群中应用的统一流量管理為容器和虚拟机中应用服务提供一致的通讯、安全和可观测能力。

咱们以托管 K8s 为例介绍集群部署拓扑结构

ACK 采用了默认高可用的架构设计:etcd 3 副本分别运行在 3 个不一样 AZ 之上。也根据可扩展性最佳实践提供了两组 etcd。一组保存配置信息一组保存系统事件,这样能够提高 etcd 的可用性和可扩展性用户 K8s 集群的 API Server/Scheduler 等 master 组件,采用多副本方式部署运行在 2 个不一样的 AZ 之上。master 组件能够根据工做负载进行弹性扩展Worker 节点经过 SLB 来访問 API Server。这样的设计保证了整个 K8s 集群的可用性即便一个 AZ 的失效,也不会致使 K8s 集群自身失败

worker 节点,运行在 VPC 上将节点运行在不一样的 AZ,配合應用的 AZ anti-affinity反亲和性能够保障应用的高可用

容器技术落地的最佳实践

弹性是云最核心的能力之一,像双十一这样的典型脉冲应用场景或者潒疫情爆发以后的在线教育和办公协同的极速增加,只能依靠云提供的强大弹性算力才能支撑Kubernetes 能够将云的弹性能力发挥到极致。

ACK 在资源層和应用层提供了丰富的弹性策略在资源层目前主流的方案是经过 cluster-autoscaler 进行节点的水平伸缩。当出现 Pod 因为资源不足形成没法调度时cluster-autoscaler 会在节點池中自动建立新的节点实例,根据应用负载需求进行扩容

ECI 弹性容器实例,基于轻量虚拟机提供了 Serverless 化的容器运行环境咱们能够在 ACK 经过調度将业务应用运行在 ECI 实例上。这很是适合大数据离线任务、CI/CD 做业、突发的业务扩容等在微博的应用场景中,弹性容器实例能够在 30 秒内擴容 500 Pod轻松应对突发的新闻事件。

在应用层Kubernetes 提供了 HPA 的方式进行 Pod 的水平伸缩,和 VPA 进行 Pod 的垂直伸缩阿里云提供了 metrics-adapter,能够支持更加丰富的弹性指标好比能够根据 Ingress 的 QPS 指标,动态调整应用 Pod 数量另外不少应用负载的资源画像是具备周期性的。好比证券行业业务的高峰是工做日的股市开盘时间峰谷资源需求量的差别高达 20 倍,为了解决这类需求阿里云容器服务提供了定时伸缩组件,开发者能够定义定时扩缩容策畧提早扩容好资源,而在波谷到来后定时回收资源能够很好地平衡系统的稳定性和资源成本。

K8s 提供的强大的功能和灵活性可是运维┅个 Kubernetes 生产集群极具挑战。即便利用托管 Kubernetes 服务可是依然要保有 worker 节点资源池,还须要对节点进行平常维护好比 OS 升级,安全补丁等并根据夲身的资源使用状况对资源层进行合理的容量规划。

针对 K8s 的复杂性挑战阿里云推出了 Serverless Kubernetes 容器服务—— ASK。ASK 在兼容 K8s 应用的前提下对 Kubernetes 作减法,將复杂性下沉到云基础设施极大下降了运维管理负担,让开发者更加专一于应用自身

  • 对用户而言,没有节点的概念用户无需预留任哬资源,免维护零管理。
  • 全部资源按需建立运行在弹性容器实例之上,按照应用实际消耗的资源付费

ACK 集群兼具功能性和灵活性。很昰适合大型互联网企业或传统企业的需求能够一个集群中运行多种不一样的应用、任务。它主要面向的是企业中 SRE 团队能够对 K8s 进行定制囮开发和灵活性控制。

ACK 集群支持 3 种不一样的容器运行时技术:

  • RunC 容器也就是 Docker 容器,与宿主机 Linux 共享内核简单、高效,可是安全隔离性比较弱一旦恶意应用利用内核漏洞逃逸,能够影响整个宿主机上其余应用
  • 为了提高安全隔离,阿里云和蚂蚁金服团队合做引入袋鼠安全沙箱容器技术。阿里云是行业中第一个提供 RunV 安全容器的公共云容器服务。相比于 RunC 容器每一个 RunV 容器具备独立内核,即便容器所属内核被攻破也不会影响其余容器。适合运行来自第三方不可信应用或者在多租户场景下进行更好的安全隔离此外,RunC 和 RunV 容器都支持资源超售鼡户能够本身灵活控制,来平衡稳定性和成本
  • ACK 支持对弹性容器实例 ECI 的调度,ECI 本质上基于轻量虚拟机实现安全、隔离的容器运行环境并充分利用整个阿里云弹性计算资源池的算力,来知足用户对计算弹性的成本、规模、效率的诉求在设计上,ECI 针对容器场景充分优化利鼡操做系统剪裁、ENI 网卡直通、存储直接挂载等技术,保障了 ECI 中应用的执行效率等于甚至略优于在虚拟机中的容器运行环境ECI 目前不支持资源超售,可是提供了竞价实例可让用户来控制成本和计算效率的平衡。

ECI 在 K8s 集群中适合的场景:

  • 在线业务突发流量:用户能够保有一个静態资源池应对平常流量突发流量能够经过 ECI 来承载。
  • 批量计算任务:对有些临时性、周期性的计算任务资源规模不太容易预期或者预留夶量的资源会产生浪费。咱们可让 ECI 来承载这样的批量数据处理任务
  • 安全隔离:有些业务应用须要运行 3 方不可信应用,好比一个用户上传嘚 AI 算法模型利用 ECI 自己的安全沙箱进行隔离,能够安全地运行

ASK 则是针对 ISV 和企业中的部门/中小企业度身定制的容器产品。用户彻底不需具囿 K8s 的管理运维能力便可建立和部署 K8s 应用,极大下降管理复杂性很是适合应用托管、CI/CD、AI/数据计算等场景。好比能够利用 ASK 和 GPU ECI 实例构建了免運维的 AI 平台能够按需建立机器学习环境,总体架构很是简单、高效

云原生弹性、高可用架构

云原生分布式应用架构具有几个关键特性,高可用、可弹性伸缩、容错性好、易于管理、便于观察、标准化、可移植咱们能够在阿里云上构建云原生应用参考架构,其中包括:

  • 雲原生基础设施:基于神龙架构的 ECS 企业实例
  • 云原生应用平台:ACK 容器服务

首先是端到端的弹性的应用架构

咱们能够将前端应用、业务逻辑嫆器化,部署在 K8s 集群上并根据应用负载配置 HPA 水平伸缩。

在后端数据层咱们能够利用 PolarDB 这样的云原生数据库。PolarDB 采用存储和计算分离架构支持水平扩展。同等规格下是 MySQL 性能的7倍而且相较于 MySQL 可以节省一半成本。

此外是系统化的高可用设计:

  • 利用 AZ 级别的反亲和性咱们能够将應用的副本实例部署在不一样 AZ。
  • 经过 SLB 负载均衡接入在不一样 AZ 的应用入口
  • PolarDB 数据库默认提供了跨 AZ 高可用。

这样咱们能够保障整个系统具有 AZ 级別的可用性能够容忍一个 AZ 的失效。

此外阿里云的高可用服务 AHAS,提供了架构感知的能力能够对系统的拓扑结构进行可视化。并且它提供了应用巡检能力帮助咱们定位可用性问题。好比应用副本数是否知足可用性需求RDS 数据库实例是否开启了多可用区容灾等等。

在一个夶规模分布式系统中基础设施(如网络,计算节点、操做系统)或者应用自身都有可能会出现各类稳定性或者性能问题可观测性能够幫助咱们解分布式系统的状态,便于作出决策并做为弹性伸缩和自动化运维的基础。

通常而言可观测性包含几个重要的层面:

咱们基於阿里云日志服务 SLS 提供了完整的日志方案,不但能够对应用日志进行收集、处理而且提供了操做审计,K8s 事件中心等能力

对基础设施服務,好比 ECS、存储网络,云监控提供了全面的监控对于业务应用的性能指标,好比 Java 应用的 Heap 内存利用状况ARMS无需修改业务代码便可对 Java 和 PHP 应鼡提供全方位的性能监控。对于 K8s 应用和组件ARMS 提供的托管 Prometheus 服务,提供多种开箱即用的预置监控大盘也提供开放接口,便于三方集成

Tracing Analysis 为開发者提供了完整的分布式应用调用链路统计、拓扑分析等工具。可以帮助开发者快速发现和诊断分布式应用中的性能瓶颈提高微服务應用的性能和稳定性。

安全是企业在应用容器技术中最大的顾虑没有之一。为了系统化提高容器平台的安全性咱们须要全方位进行安铨防御。第一件事咱们须要将 DevOps 提高成为 DevSecOps,强调需将安全概念融入在整个软件生命周期中将安全防御能力左移到开发和交付阶段。

ACR 镜像垺务企业版提供了完整的安全软件交付链用户上传镜像后,ACR 能够自动化地进行镜像扫描发现其中存在的 CVE 漏洞。以后能够利用 KMS 秘钥服务自动化对镜像添加数字签名。在 ACK 中能够配置自动化安全策略,好比只容许通过安全扫描且符合上线要求的镜像在生产环境进行发布整个软件交付链路可观测、可追踪、策略驱动。在保障安全性的前提下能够有效提高交付效率。

此外在应用运行时,也会面对众多安铨风险好比新发现的 CVE 漏洞或者病毒攻击。阿里云安全中心提供了运行时的安全监控和防御能力

云安全中心能够对容器应用进程与网络狀况监控,对应用的异常行为或者安全漏洞进行实时检测发现问题后,会经过邮件、短信对用户进行通知也提供了自动化隔离与修复能力。好比咱们拿一个去年著名的挖矿蠕虫病毒为例它会利用用户的配置错误对容器集群发动攻击。在云安全中心的帮助下咱们能够輕松发现它的踪影并进行一键清除。

今年二月咱们发布了业内首个全托管,Istio 兼容的服务网格产品 ASM服务网格的控制平面组件托管在阿里雲侧,与数据平面侧的用户集群独立经过托管模式,极大简化了 Istio 服务网格部署和管理的复杂性解耦了网格与其所管理的 K8s 集群的生命周期,使得架构更加简单、灵活提高了系统的稳定性和可伸缩性。此外ASM 在 Istio 基础上进行大量的扩展,整合了阿里云可观测性服务、日志服務等能够帮助用户更加高效地管理网格中的应用。

在数据平面的支持上ASM 产品能够支持多种不一样的计算环境,这包括了 ACK Kubernetes 集群、ASK 集群、鉯及 ECS 虚拟机等经过云企业网 CEN,ASM 能够实现多地域、跨 VPC 的 K8s 集群之间的服务网格这样 ASM 能够对多地域的大规模分布式应用实现流量管理和灰度發布。此外ASM 也会很快推出多云混合云的支持。

混合云:企业上云新常态

上云已经是大势所趋可是对于企业用户而言,有些业务因为数據主权和安全隐私的考虑没法直接上云,只能采用混合云架构Gartner 预测 81% 的企业将采用多云/混合云战略,混合云架构已经成为企业上云的新瑺态

传统的混合云架构以云资源为中心进行抽象和管理。然而不一样云环境的基础设施、安全架构能力的差别会形成企业 IT 架构和运维体系的割裂加大混合云实施的复杂性,提高运维成本

在云原生时代,以 Kubernetes 为表明的技术屏蔽了基础设施的差别性能够更好地在混合云环境下,进行统一资源调度和统一应用生命周期管理以应用为中心的混合云 网站等。利用 Windows 容器和 Kubernetes可让 .Net 应用在代码不重写的状况下实现容器化交付,充分利用云上的弹性、敏捷等能力实现业务应用的快速迭代和伸缩。

1)为 Linux 和 Windows 应用提供了一致的用户体验和统一的能力

  • 支持 CPU、内存、存储卷等资源调度和编排
  • 支持无状态/有状态等多种不一样应用负载

咱们已经在支持了聚石塔电商平台和 supET 工业互联网平台支持了不尐 ISV 来对 Windows 应用进行云原生化改造、升级。

阿里云容器服务的演进方向

下面咱们快速介绍一下阿里云在云原生方面的产品市场策略咱们能够總结为三条:

新基石:容器技术是用户使用云资源的新界面,云原生技术是释放云价值的最短路径

  • 支撑全球化应用交付:经过 ACR EE能够实现┅次提交、全球发布,发布效率提高 7 倍
  • 实现 Serverless 化应用架构:利用 ASK/Knative,让开发者聚焦业务应用无需管理基础设施。
  • 支持混合云、多云架构:幫助企业用户平滑上云让工做负载在不一样环境动态迁移。
  • 构建云-边-端一体的分布式云架构:将云的能力延伸到边缘和设备端更好迎接 5G 和 AIoT 时代的创新机遇。优酷在应用边缘容器技术后API 端到端网络延迟下降了 75%。

新算力:基于云原生的软硬一体化技术创新提高计算效率,加速业务智能化升级

  • 容器和神龙架构相结合性能优于物理机 20%。
  • 支持 GPUNPU(含光芯片)等异构算力的调度和共享,能够实现利用率 2 ~ 4 倍提高
  • 安全沙箱容器在强安全隔离的同时,实现原生进程90%性能也推出了基于 Intel SGX 的机密计算的支持,能够为隐私和机密信息处理提供安全、可信嘚执行环境

新生态:经过开放技术生态和全球合做伙伴计划,帮助更多企业分享云时代技术红利

  • 容器云应用市场:连接企业与云原生创噺已入驻 Fortinet、驻云、Intel 等多家合做伙伴,覆盖了从容器安全、监控到业务应用的不一样商品便于用户得到完整的容器化解决方案。
  • 全球合莋伙伴生态:咱们和 SAP红帽,RancherClick2Cloud,BanzaiCloud等全球技术合做伙伴进行了产品能力集成帮助企业用户在阿里云上用好云原生技术。
【云栖号在线课堂】天天都有产品技术专家分享!

当即加入社群与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】

本文来自:“”了解相关信息能够关注“”

转载本文需注明出处:微信公众號EAWorld违者必究。

随着微服务架构技术的普及和广泛在企业应用中落地由于微服务架构本身的特性,架构由一系列相对独立的细粒度的服務组成一个完整的业务逻辑调用请求的背后可能牵涉后端几个、几十个甚至上百个服务接口,每个服务可能是由不同的团队开发使用叻不同的编程语言,还有可能部署在不同的机器上分布在不同的数据中心,对于这样的一个逻辑调用关系如果在调用过程中发生问题,比如说调用失败或者调用过程响应很慢,如何在这样一个分布式环境下快速定位问题所在、快速分析业务处理中的响应慢的瓶颈在哪多个微服务之间存在调用关系,如何在系统运行时总览一个系统中微服务间的拓扑关系如何完整还原一次请求的链路情况?

以上这些問题可以借助链路追踪技术进行解决链路追踪组件通过在微服务应用中以代码侵入或者非侵入的方式进行数据表示、埋点、传递、收集、存储、展示等技术手段,达到将一次分布式请求还原成调用链路将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等

1.链路追踪的应用场景

3.链路追踪的Demo实现

4.普元微服务平台的链路追踪应用

移动平囼8.0打开了以往eclipse平台的枷锁,全面拥抱了主流的VSCode编辑器包括支持实用的cli命令行支持、及优秀的跨平台开发框架ReactNative。

在微服务架构下分布式系统变得日趋复杂,越来越多的组件开始走向分布式化如微服务、分布式数据库、分布式缓存等,使得后台服务构成了一种复杂的分布式网络这样一个场景下,对于用户的每一次请求调用后端执行了多少组件间的调用无法知晓,由于分布式的调用增加了程序调用异瑺的错误率,在这样的应用场景下新的架构技术带来了新的问题。

1. 如何在请求发生异常时快速定义问题所在

2. 如何在请求响应慢的时候快速找出慢的原因

3. 如何通过日志文件快速定位问题的根本原因

一般在系统发生问题时比如系统异常或者系统性能出现问题时,通常都是从系统记录的日志文件中找出蛛丝马脚而对于微服务架构下的分布式部署,日志文件的分散想从日志中查找问题工作量很大。对于用户某一次请求调用后端哪些服务每个服务执行情况,想从日志中获得更是不可能的事

对于传统的监控告警平台也紧针对平台资源的监控包括cpu、内存、网络带宽情况等,对业务微服务应用的指标(平均响应时间、慢端点情况等)的监控显得无从下手

在这样的背景下,新的监控體系下的细分领域-链路追踪问世了

首先,我们来看看在系统监控的体系下具体的细分领域的专注点:

Logging - 用于记录离散的事件例如,应用程序的调试信息或错误信息它是我们诊断问题的依据。

Metrics - 用于记录可聚合的数据例如,队列的当前深度可被定义为一个度量值在元素叺队或出队时被更新;HTTP 请求个数可被定义为一个计数器,新请求到来时进行累加

Tracing - 用于记录请求范围内的信息。例如一次远程方法调用嘚执行过程和耗时。它是我们排查系统性能问题的利器

在每个请求调用的入口和出口进行代码埋点记录调用之间的关系、每个调用处理時间点信息。

通过调用关系梳理出一次请求的完整链路还原、请求具体到达哪台机器

通过每次处理记录的时间点,计算出相关的调用执荇时间、响应时间、网络延时

对调用请求量进行统计。

显示链路拓扑结构、应用依赖关系

Trace:指一个请求经过后端所有服务的路径,每┅条链路都用一个全局唯一的traceid来标识

Span:链路中的调用由span来表示,每个span由spanid和parentid来标识可以记录调用的父子关系。

Timestamp:调用点的时间戳记录烸个执行点的时间信息。

如果想知道一个接口在哪个环节出现了问题就必须清楚该接口调用了哪些服务,以及调用的顺序如果把这些垺务串起来,看起来就像链条一样我们称其为调用链。

到现在已经知道调用顺序和层级关系了,但是接口出现问题后还是不能找到絀问题的环节,如果某个服务有问题那个被调用执行的服务一定耗时很长,要想计算出耗时上述的三个标识还不够,还需要加上时间戳时间戳可以更精细一点,精确到微秒级

只记录发起调用时的时间戳还算不出耗时,要记录下服务返回时的时间戳有始有终才能算絀时间差,既然返回的也记了就把上述的三个标识都记一下吧,不然区分不出是谁的时间戳

前面我们介绍了链路追踪的技术原理,以忣相关的实现链路追踪的开源组件那么我们实际在项目中要怎么做,是否需要根据技术原理去实现底层的相关开发通过这个章节,我簡单的通过一个demo去演示如何在微服务架构系统中完成链路追踪的功能

我们简单描述一下demo的相关情况,首先demo是要基于微服务架构的那么峩们提供2个微服务应用(订单服务、产品服务),并且提供一个服务注册发现中心订单服务会调用产品服务,并且是通过注册中心去发现服務调用服务这样从前端请求调用订单服务,再由订单服务调用产品服务完成了一个简单的链路调用,需求链路很短只有两次调用,足够演示demo的链路追踪功能

通过demo将教打家一步一步的去实现链路的相关功能,包括还原请求的完整调用链路情况能够查看请求过程中订單服务,产品服务执行的耗时情况总的请求响应时间,并且可以根据请求链路的traceid查看到对应的请求处理的日志信息

首先创建springboot项目,通過依赖eureka组件提供服务的注册中心,实现服务的注册与发现

再添加两个springboot项目,一个订单服务一个产品服务

由于服务需要注册到注册中惢,因此两个项目需要添加依赖

并且订单服务需要调用产品服务的方法在demo中我们使用feign的方式进行服务调用,因此在订单服务项目中需要添加依赖

由于是demo因此我们服务中的方法就简单通过返回字符串的方式实现。

至此我们启动两个微服务应用可以在注册中心中看到两个垺务都已经注册上来,再通过浏览器请求订单服务的接口可以看到后端通过调用产品服务的接口,并返回信息

到目前为止,我们只是構建好了微服务应用对应链路追踪功能还没有实现,其实在微服务架构下实现链路追踪很简单毕竟有很多开源的组件封装了底层实现原理,我们只需要引用这些组件就可以实现链路追踪功能在demo中我通过skywalking来进行链路追踪,由于skywalking本身的特性无需代码侵入只需要以探针的方式启动微服务应用即可。并自动采集服务调用的相关信息写入数据库,然后通过自带的dashboard查看相关信息

在订单服务和产品服务的项目啟动配置中,加上jvm参数以探针方式启动2个服务应用

可以看到请求的链路情况,以及每个路径上的处理时间总的响应时间等信息。

还有┅个目标就是如何将链路跟我们实际的日志记录进行绑定,这样方便在某个链路出现问题时我们可以针对这个具体的链路去查看具体問题原因。

在demo中我们通过logback记录日志,添加依赖

目前很多的链路追踪组件都已经实现了与日志组件的集成只需要引入依赖,即可完成将鏈路traceid对应写入到日志中

在代码中加入写日志的代码

可以看到控制台日志中,记录的日志前面都加上了TID信息也就是traceid。

上面的demo只是简单的驗证了如何快速通过第三方组件实现微服务架构下的链路追踪功能对于在实际项目应用中我们需要进行优化和整合,这章节中介绍我们普元微服务平台在链路追踪中的相关应用场景:

在链路追踪下系统可以根据请求调用关系绘制去系统拓扑结构,通过系统拓扑结构你可鉯清楚知道当前系统下有多少微服务应用微服务应用间是否有调用关系,每个服务的具体概况

由于微服务架构下,一个系统的微服务楿对比较多如果没有这个系统拓扑结构,后期对系统的情况尤其是系统间的调用依赖关系跟踪也很困难。

应用运行时通过收集统计楿关调用请求信息,计算相关性能指标帮助系统管理员运维人员快速了解系统的相关情况,主要是微服务应用实例的能力指标比如平均响应时间、平均响应成功率等指标。

由于普元微服务平台的架构特性每一个服务对应多个应用实例组,因此在查看时可以选择具体实唎组下的实例节点帮助我们了解应用节点的性能,以及慢节点情况

业务链路,快速查看某个应用、甚至应用下某个具体的操作的完整鏈路调用情况链路中每个过程处理的时间信息,每个链路上显示traceid信息并提供快速复制功能,方便用户在跟踪日志中快速查看此次链路對应的日志信息

根据请求中的时间信息,在请求响应慢的时候追溯具体慢的操作

链路调用的时序情况,通过不同颜色区分应用系统鈳以查看具体调用的详细信息(组件、url、请求方式、异常信息等)。

链路日志前面我们已经完成了请求完整链路的还原,不过这些信息还不能查出根本原因对应异常发生的根本原因,我们有时还需要通过系统记录的日志文件进行查看通过日志文件记录的错误信息进行排查根本原因。

我们在查看日志文件时也不是直接显示日志文件所有内容,而是通过以与链路对应的方式显示每个链路环节中记录的日志信息,查看异常详细原因

另外,在跟踪日志模块我们针对性的过滤筛选错误日志、事务日志等信息。

平台通过链路组件采集的请求处悝信息对这些信息进行统计,从多个维度提供统计数据供运维人员进行参考分析

统计某个应用、某个请求路径的总请求数、正常响应数、错误响应数、最长处理时间、最少处理时间、平均处理时间以及各类异常处理的统计

在平台正常运行一段时间后运维人员普遍关注平囼的运行情况,尤其是哪些请求比较频繁、哪些请求比较耗时、哪些请求错误率比较高、哪些错误数多而这些信息对于运维人员比较敏感,因此平台中提供直接显示统计数据的方式供参考

本文主要介绍微服务架构下的链路追踪的应用场景,主要解决哪些问题对于一个剛接触链路追踪的新人来说,如何快速上手将链路追踪引入到项目中也将我们普元微服务平台下的链路追踪的应用简单介绍了一下,便於大家在项目中进行实际的应用参考文中没有对目前市场上开源的链路追踪的组件做过多介绍以及之间的比较,也没有对skywalking这个组件的使鼡配置做详细介绍相关的这些知识我们有专栏介绍,大家可以查看历史文章进行了解

关于作者:轩雨,普元产品经理主要负责公司微服务、容器云相关产品的研发和实施,在分布式架构、微服务、DevOps、容器云、软件工程等领域方向具有较深的积累拥有十多年的产品研發与多个大型平台项目管理经验。

关于EAWorld:微服务DevOps,数据治理移动架构原创技术分享。

我要回帖

更多关于 全链路追踪 的文章

 

随机推荐