分布式链路追踪总结

分布式链路追踪总结

在分布式微服开发过程中,随着系统设计变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、分布式数据库、分布式缓存等,使得后台服务构成了一种复杂的分布式网络。往往前端的一个请求需要经过多个微服务、跨越多个数据中心才能最终获取到结果,如下图

 

分布式链路追踪总结_第1张图片

并且随着业务的不断扩张,服务之间互相调用会越来越复杂,这个庞大的分布式系统调用网络可能会变的如下图所示:

分布式链路追踪总结_第2张图片

那随之而来的就是我们将会面临的诸多困扰:

  • 问题定位:当某一个服务节点出现问题导致整个调用失败,无法快速清晰地定位问题服务。
  • 性能分析:服务存在相互依赖调用的关系,当某一个服务接口耗时过长,会导致整个接口调用变的很慢,我们无法明确每一个接口的耗时。
  • 服务拓扑图:随着需求迭代,系统之间调用关系变化频繁,靠人工很难梳理清楚系统之间的调用关系。
  • 服务告警:当服务出现问题,我们无法做到由系统自动通知相关人员。

为了解决这些问题,分布式链路追踪应运而生。它会将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态、生成服务调用拓扑图等等。也就是说我们要设计并开发一些分布式追踪系统来帮助我们解决这些问题

 

使用skyWalking解决庞大的微服务链路追踪问题。

 

首先申明两个技术的作用

  1. skyWalking技术:该是一个微服务数据性能分析平台,简单说就是用于收集微服务在对外提供服务的时 候,产生的状态数据。这个转态就是一些微服务请求响应等产生的性能数据。
  2. javaagent探针技术是在嵌套在微服务下的一个探针,用于获取微服务执行完毕之后的状态数据。

 

SkyWalking系统架构图

分布式链路追踪总结_第3张图片

 

分布式链路追踪流程

  1. 首先我们使用java的javaagen探针技术,嵌入到某一个微服务下面,javaagent探针技术的有一个作用是在          jvm执行之后在做一些事情,这里我们嵌入到微服之后目的是在微服执行之后。收集该服务执行过程中的发生成的性能指标相关数据,比如:某一个接口从接受请求到响应这个过程中执行了多长时间,服务当前是一个什么样的状态收集这些数据。
  2. 使用javaagen探针技术收集微服状态相关数据之后,将数据发送到SkyWalking(OAP性能分析平台),OAP(性能分析平台)进行微服务的数据汇总分析
  3. 然后将微服务的状态数据保存到ES中,这里我用了ES作为数据库。
  4. 将收集到的数据通过SkywalkingUi展示出来,方便开发者查看性能

 

流程概括

  1. 收集微服务性能数据
  2. 数据发送给oap,进行数踞汇总分析
  3. 将数据存到数据中
  4. 将数据库通过ui展示

 

举例说明分布式链路追踪:

  • 举例,微服务是一个人,如何判断这个人健康不健康,就可以通过这个人的一些数据判定,比如体重是 200斤,这些数据。javaagent探针例如是一个称体重的称,在这个人称重完毕之后就能获取到这个人的数据。然后这个人体重的数据就会记录到一台性能分析的机器上,这台机器就是skyWalking,机器收集这个人的这些数据。进行数据分析把数据保存到一个数据库中。同时把数据通过展示到显示屏就是 skywalkingui,监控人员通过查看显示的数据,判断这个人的健康状况,如果有问题,根据数据作出解决方案,对症下药让这个人健康起来。
  • 还有一点,微服务不只有一个,有很多很多,所以通过这种方式可以监控追踪很多微服务的健康状况

 

你可能感兴趣的:(SpringCloud,java)