分布式 虚拟时间和虚拟同步_分布式虚拟跟踪

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

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

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

什么是痕迹?

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

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

分布式跟踪的外观如何?

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

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

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

如何捕获跟踪?

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


每当请求到达系统边界时,代理都会通过监视第一个节点为它分配一个唯一的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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java泛型程序设计——类型变量限定 + 泛型代码和虚拟机

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 类型变量限定 泛型代码和虚拟机 的知识; 【1】类型变量的限定 1.1)类和方法需要对类型变量加以限定 1.1.1)看个荔枝&a…

java中装饰器_Java设计模式12:装饰器模式

装饰器模式装饰器模式又称为包装(Wrapper)模式。装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰器模式的结构通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生子类来扩展,抑或是使用对…

selenium 4_Selenium4 Alpha –期望什么?

selenium 4Selenium4 Alpha-期望什么? 早在2018年8月,整个测试自动化社区就受到了一个重大新闻的打击:Selenium的创始成员Simon Stewart在班加罗尔Selenium会议上正式确认了Selenium 4的发布日期和一些重大更新。 世界最受欢迎的Web测试自动化…

英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析

【1】README 本文转自: http://www.cnblogs.com/lanke_2009/archive/2010/12/07/1899185.html , 旨在学习 英文论文中的 如 “such as, for example, e.g., i.e., etc., et al. ”的用法; 【2】正文如下: 黄龙旺  龚汉忠 (上…

mysql8.0云时代_8.0.22Mysql的详细安装

Mysql8.0.22的安装和常见问题前言提示:以下是本篇文章正文内容,下面案例可供参考一、MySQL的下载和安装?1.mysql官网下载:https://dev.mysql.com/downloads/mysql/2.下载步骤:可以点击Go to download page 去下载32位的…

java泛型程序设计——翻译泛型表达式+翻译泛型方法

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 翻译泛型表达式翻译泛型方法 的知识; 【1】翻译泛型表达式 1.1)当程序调用泛型方法时, 如果擦除了泛型返回类型&#xf…

redis 受攻击怎么办?_最受欢迎的6个最常用的Redis库

redis 受攻击怎么办?Redis当前是世界上最受欢迎的键值商店, 它通过提供高速度和低延迟以及针对应用程序开发人员的灵活功能集,赢得了广泛的采用率 。 Redis是一个内存中的数据结构存储,用作根据BSD许可分发的数据库,缓存和消息代…

java泛型程序设计——调用遗留代码

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 调用遗留代码 的知识; 【1】调用遗留代码相关 1.1)设计java 泛型的目的: 允许泛型代码和遗留代码间能够相互操作&#…

java oracle 字符_Oracle转义字符

1、oracle 特殊字符 转义关键词: oracle 转义环境:oracle 9i plsql在plsql里边执行:update userinfo set pageurlmyjsp?page1&pagesize10 where idtest这条sql语句往数据库的pageurl字段放进去了一个url地址,但是执行的时候却并非那…

jmeter进行性能测试_使用JMeter进行性能测试

jmeter进行性能测试在开发复杂的高可用性软件项目时,性能至关重要。 在当今这样的时代尤其如此,除了闪电般的实时数据可访问性之外,其他任何事情都受到惩罚。 当谈论有时需要的大量数据时,这并非总是一件容易的事。 在本文中&…

java泛型程序设计——约束与局限性

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 约束与局限性 的知识; 【1】 不能用基本类型实例化类型参数 1.1)不能用类型参数代替基本类型, 因此,没有 Pa…

python简单菜单_创建一个简单的python菜单

修正和评论,它们主要是语法错误。menulist 1. Print the list,2. Add a name to the list,3. Remove a name from the list,4. Change an item in the list,9. Quit #assuming you want to display menulist, having it as a tuple is uselesslst("johny"…

郎溪 溪流_到无限(溪流)和超越!

郎溪 溪流Java允许您处理集合或流中的数据。 将流视为将一个集合转换为另一个集合的技术非常容易。 这可能会导致一些相当随意的代码,其中流数据被重复收集到某种类型的集合中,作为一个整体集合传递,然后再进行更多处理。 对于6个元素&#…

java泛型程序设计——Varargs 警告+不能实例化类型变量

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 Varargs 警告不能实例化类型变量 的知识; 【1】 Varargs 警告 1.1)一个相关问题: 向参数个数可变的方法传递一个泛型类型…

rabbitmq怎么停止_Windows环境下RabbitMQ的启动和停止命令

Windows环境下RabbitMQ的启动和停止命令原创lockie_zou 最后发布于2018-05-24 15:34:21 阅读数 36514 收藏展开首先windows下安装好了erlang和rabbitmq。如下地址同时下载和安装:Erlang:http://www.erlang.org/download.htmlRabbitMQ :http:…

elk入门_ELK堆栈入门

elk入门朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 数分钟之内即可在任何应用程序中对用户进行身份验证,管理和保护。 好的设计原则要求微服务架构是可观察的,并提供集中的监视工具。 该工具使开…

java泛型程序设计——泛型类的静态上下文中类型变量无效+不能抛出或捕获泛型类的实例

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 泛型类的静态上下文中类型变量无效不能抛出或捕获泛型类的实例 的知识; 【1】泛型类的静态上下文中类型变量无效 1.1)不能在静态域或…

android ril.java_Android RIL学习

1.Android RIL概念Android RIL是基于telephony服务和raido硬件层的抽象层。Android的rild库是介于HAL接口与baseband modem之间,它提供了语音、数据、短信、SIM卡管理以及STK应用的功能。它把标准的GSM27.007中常用的如dial这些做主动请求的操作称之为request&#…

netty java_Netty Java快速指南

netty java使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。 Netty是一个无阻塞输入/输出(NIO)框架,它使开发低级网络服务器和客户端…

java泛型程序设计——注意擦除后的冲突

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 注意擦除后的冲突 的知识; 1.1)当泛型类型被 擦除时, 无法创建引发冲突的条件。 1.1.1)看个荔枝&#xff…