分布式 虚拟时间和虚拟同步

跟踪提供了对系统的可见性,使开发人员和操作人员可以在运行时观察应用程序。 当系统不断增长并与更多微服务进行交互时,跟踪变得非常有价值。 在这样的环境中,这些痕迹非常棒,可以定位导致性能下降的故障和瓶颈。

在这篇文章中,我们将帮助您详细了解跟踪。 我们将通过示例跟踪事件和问题管理过程中如何使用跟踪。

什么是痕迹?

在检查如何捕获跟踪及其组成之前,让我们看一下跟踪的正式定义:


这样,您可以将跟踪视为一棵树,其根节点是用户进行的交互,并且这些节点代表所有参与处理请求和准备响应的微服务。

分布式跟踪的外观如何?


上面的示例说明了一个由七个跨度组成的迹线。 要了解跨度和轨迹,请看一下定义:

  • 跟踪公开了通过分布式系统的执行路径。 迹线由一个或多个跨度组成。
  • 跟踪中的跨度表示执行路径中的一项微服务。 例如,信用评分检查可能是贷款申请处理过程中的跨度。 跨度可以创建多个子跨度,而一个子跨度恰好具有一个父跨度。

因此,将跨度组合到跟踪中可以揭示整个分布式系统中请求处理的流程。 可视化跟踪使用父子表示法来显示跨度之间的依赖性以及每个跨度执行所需的时间。

如何捕获跟踪?

所有跟踪解决方案都要求参与处理入站请求的微服务由代理库进行检测。 每个这样的代理库都捕获跟踪的一部分,并将其发送到组成跟踪的中央服务器。 要了解它是如何工作的,让我们看一个示例电子商店,该例子说明了跟踪捕获:



每当请求到达系统边界时,代理都会通过监视第一个节点为它分配一个唯一的ID。 该标识符称为跟踪ID。


E-shop前端节点处理入站请求,并决定调用下游的SubmitOrder微服务。 这样做时,它通常使用自定义HTTP标头将跟踪ID传递到下游。


SubmitOrder微服务会在HTTP标头中发现跟踪ID。 这使SubmitOrder可以将其跨度与E-shop父级链接。

处理请求时, submitOrder微服务发现它需要调用checkInventory微服务。 再次通过向下游传递跟踪ID来实现。 checkInventory微服务现在是该树中的终端节点,没有子依赖项。 因此,它仅处理请求并将响应发送回父级。 完成此操作后, checkInventory微服务中的整个范围就准备好了。


在SubmitOrder中间节点和E-shop父节点中也是如此。 跨度组成,配备有开始和结束时间戳记,并使用跟踪ID进行链接。


代理库捕获跨度后,它们会将跨度发送到集中式服务器。 在此服务器中,节点被组成跟踪并存储以进行查询。


该过程的结果是组成了完整的痕迹。 在上面的示例中,组合的跟踪看起来类似于以下内容:


代理商如何工作?

可以使用两种不同的方法来构建从单个微服务捕获跨度的代理:

诸如Zipkin , OpenTracing和Jaeger之类的Tracer库使应用程序开发人员能够检测代码并将跨度发送到集中式服务器。 它们提供了最常用的语言和框架的库,并在缺少支持的情况下使用户能够构建自己的库

举例说明如何使用Zipkin来检测PHP微服务的示例可能会给您一个想法:

SubmitOrder微服务会在HTTP标头中发现跟踪ID。这使SubmitOrder可以将其跨度与E-shop父级链接。 

 处理请求时, submitOrder微服务发现它需要调用checkInventory微服务。 再次通过向下游传递跟踪ID来实现。 checkInventory微服务现在是该树中的终端节点,没有子依赖项。 因此,它仅处理请求并将响应发送回父级。 完成此操作后, checkInventory微服务中的整个范围就准备好了。 

这种方法有其缺点-从将跟踪库引入微服务的示例可以看出,需要更改代码才能捕获所需的信息。 要在大型组织中实现这一目标,而由不同团队开发和维护数十甚至数百个微服务,可能是一个艰巨的挑战。

基于代理的解决方案(例如NewRelic或DataDog或我们自己的Plumbr)使用应用程序运行时中的低级挂钩来对微服务进行检测。 代理已附加在应用程序配置中,不需要更改代码。

例如,使用Plumbr Java代理进行跟踪等效于仅更改JVM启动参数,类似于:

SubmitOrder微服务会在HTTP标头中发现跟踪ID。这使SubmitOrder可以将其跨度与E-shop父级链接。 

 处理请求时, submitOrder微服务发现它需要调用checkInventory微服务。 再次通过向下游传递跟踪ID来实现。 checkInventory微服务现在是该树中的终端节点,没有子依赖项。 因此,它仅处理请求并将响应发送回父级。 完成此操作后, checkInventory微服务中的整个范围就准备好了。 

因此,推出基于代理的解决方案更加简单,尤其是在管理更大的部署时。 但是,大多数基于代理的解决方案都是商业的, 而不是开放源代码的跟踪程序库,因此涉及一些成本。

标记轨迹和跨度

迹线和跨度往往会被标记以支持多维查询以分析迹线。 常用标签的一些示例:

  • 用户身份
  • serverId
  • clusterId
  • API端点
  • HTTP响应码

使用标签,可以轻松回答不同的问题:

  • 此微服务中的哪个API端点已损坏?
  • 该前端中哪些API端点最慢?
  • 哪些用户遇到了错误?
  • 罪魁祸首是哪个微服务?

良好的跟踪提供程序将不同的维度无缝地集成到产品UI和警报设置中,因此您可以避免使用数百万条单独的跟踪,而是立即而及时地获得宝贵的见解。


带走

跟踪是一种非常强大的诊断工具,尤其是在应用于分布式环境时。 由于可以在整个执行路径中观察每个单独的请求,因此问题得以解决。 借助标签,可以公开分析查询,从而使影响估算变得微不足道。

翻译自: https://www.javacodegeeks.com/2020/02/distributed-tracing-for-dummies.html

分布式 虚拟时间和虚拟同步

分布式 虚拟时间和虚拟同步_分布式虚拟跟踪相关推荐

  1. mysql分布式事务wcf_[转载]WCF系列_分布式事务(下)

    浏览到chnking的WCF的分布式事务处理不错,转载过来分享一下.1. WCF分布式事务例子这里也用转账的例子说事. 用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B ...

  2. 分布式 集群 系统组件架构_分布式跟踪系统的四个组件如何一起工作

    分布式 集群 系统组件架构 十年前,基本上只有认真思考分布式跟踪的人是学者和少数大型互联网公司. 如今,对于任何采用微服务的组织来说,它已经变成了赌注. 基本原理是公认的:微服务以令人惊讶且通常是惊人 ...

  3. 虚拟大师怎么修改手机_手机虚拟大师,打造一个属于你的专属手机平台

    点击蓝字关注我哦! 注:更多软件下载请关注:www.pcpojie.com 手机虚拟大师是手机版虚拟机的一种软件,自带自定义root虚拟空间,独立的虚拟系统,从此将不再受真实系统的限制,真正意义上的实 ...

  4. 虚拟同步发电机_泛在电力物联网之“虚拟电厂”分布式电源的虛拟同步发电机...

    2019年3月电网公司提出泛在电力物联网以来,相关概念不断的发酵中,其实细细琢磨,很多专业分支业已研究中,如"虚拟电厂""能源互联网"专业,今天虚拟电厂来分享一 ...

  5. 虚拟同步发电机_测量虚拟同步发电机惯量与阻尼系数的新方法

    征稿通知 第四届轨道交通电气与信息技术国际学术会议 阅读征文通知,请戳上面标题  ▲ 联合主办 中国电工技术学会 北京交通大学轨道交通控制与安全国家重点实验室 联合承办 中国电工技术学会轨道交通电气设 ...

  6. java如何保证redis设置过期时间的原子性_分布式锁用 Redis 还是 Zookeeper

    在讨论这个问题之前,我们先来看一个业务场景: 系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单. 由于系统有 ...

  7. tcp out of order解决_分布式集群解决方案 学习笔记

    回到目录: OrangeZh:拉勾教育:JAVA高薪训练营 学习技术篇​zhuanlan.zhihu.com 介绍 文章内容输出来源:拉勾教育 Java高薪训练营 分布式集群解决方案相关 什么是分布式 ...

  8. mysql cluster 缩容_分布式常见问题分析及解决方案

    1.分布式和集群概念 分布式:可以简单理解成将一个独立的系统拆分成很多个子系统,每个子系统可以单独的运行(比如用户登录.订单支付),这个称之为分布式系统. 集群:可以简单理解就是对于任何一个系统至少部 ...

  9. hbase 二进制数据写入_分布式数据库HBase的架构设计详解(有彩蛋)

    原标题:分布式数据库HBase的架构设计详解(有彩蛋) 本文根据DBAplus社群第99期线上分享整理而成,文末还有好书送哦~ 讲师介绍 陈鸿威 云财经大数据CTO 曾任百度高级工程师,现主持设计开发 ...

最新文章

  1. Linux下Tomcat的安装配置
  2. python ggplot画等值线图,是否可以在Python ggplot上绘制多折线图?
  3. 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,
  4. 网络协议入门(OSI七层和TCP/IC四层协议)
  5. nodejs解析apk
  6. 【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积
  7. MySQL数据库中的Date,DateTime,int,TimeStamp和Time类型的对比
  8. 计算机组成原理测试题
  9. virtualenv之python虚拟环境
  10. centos 7安装zabbix 3.0
  11. Linux设备模型(总线、设备、驱动程序和类)
  12. Hinton的GLOM模型与千脑理论有何本质不同?
  13. Android天天飞车游戏辅助系统
  14. 老九学堂C++实现小游戏之小公主养成记
  15. 启动定时器t0的工作指令是_启动定时器 0 工作的指令是使 TCON 的 ( )_学小易找答案...
  16. 自定义可自由移动的浮窗
  17. CASAIM自动化精密尺寸测量设备全尺寸检测铸件自动化检测铸件
  18. win10电脑连接蓝牙请检查PIN并重新连接
  19. Zotero文献管理工具使用指南
  20. 计算机人民币货币符号是什么,人民币货币符号-人民币符号究竟是什么?yen;;还是¥? 爱问知识人...

热门文章

  1. Keiichi Tsuchiya the Drift King
  2. P3834 【模板】可持久化线段树 2(整体二分做法)
  3. 一起开心寒假训练总复习
  4. 牛客题霸 [数组中未出现的最小正整数] C++题解/答案
  5. 不止代码 洛谷P1006 传纸条(dp)
  6. 震惊!递推与递归竟然可以这么编!%99的程序员都不知道!
  7. P3648-[APIO2014]序列分割【斜率优化】
  8. Ch3101-阶乘分解【数论,质因数分解】
  9. P1352-没有上司的舞会【树形dp】
  10. M. Monster Hunter(树形dp)