前言

想实现一个简单的追踪系统似乎是容易的,需要必要的调用链id,时间戳等;想实现一款易用不侵入代码的追踪系统就很麻烦了,需要接触CLR和IL相关知识;即使你费劲心力做出了那些,如果性能不够好,也没有人使用的。
追踪系统主要可以分两部分实现,客户端和服务端。大软件厂商基于各自的需求已经开发了APM,从头迈入这个圈子的个人拿什么去竞争?最后的结果基本都是凉凉了。合作共赢才是最好的。

从我学习分布式调用链开始,就打算了解客户端和服务端的通信规范,我选择了zipkin入门,基本了解了一些zipkin的模型。我打算多接触几个其他调用链,看看其他的通信模型有什么区别,然后写一个能适应不同模型的第三方规范。这只是最开始的想法,生态繁杂,如果写的东西不能共用,那费力写的东西并没有意义。

当我进一步学习,看到了OpenTracing的介绍,我仿佛找到了道友,云开得见月明。

当我看到了支持opentracing的追踪系统包含SkyWalking时,更坚定了我的信心。

OpenTracing介绍[译]

为什么追踪?

当代分布式跟踪系统(例如,Zipkin,Dapper,HTrace,X-Trace等)旨在解决这些问题,但它们通过使用不兼容API的应用程序级检测来实现。开发人员对将其多语言系统与任何特定的分布式跟踪实现紧密耦合感到不安,但这些许多不同跟踪系统的应用程序级检测API具有非常相似的语义。

为什么选择OpenTracing?

进入OpenTracing:通过为流行的平台提供一致的,富有表现力的,供应商中立的API,OpenTracing使开发人员可以轻松地通过O(1)配置更改添加(或切换)跟踪实现。OpenTracing还为OSS检测和特定于平台的跟踪帮助程序库提供了通用语言。请参阅语义规范。

什么是追踪?

在最高级别,跟踪讲述了事务或工作流在通过(可能分布式)系统传播时的故事。在OpenTracing中,跟踪是“跨度”的有向非循环图(DAG):命名的定时操作,表示该跟踪中的连续工作段。

image

分布式跟踪中的每个组件都将贡献自己的跨度或跨度。例如,在简单的RPC的情况下,OpenTracing要求客户端和服务器将它们各自在工作流中的角色表示为至少一个跨度。

image

父跨度可以显式地以串行或并行方式启动其他跨度。在OpenTracing中,甚至可以用多个父模型建模子跨度(例如,缓冲区刷新可以从填充所述缓冲区的多个写入中下降)。

一个基本的痕迹

image

通过分布式系统跟踪工作流或事务通常看起来如上所述。虽然这种类型的可视化对于查看各种组件如何组合在一起是有用的,但是它不传达任何持续时间,不能很好地扩展,并且在涉及并行性时是麻烦的。另一个限制是无法轻易显示延迟或时序的其他方面。甚至基本跟踪可视化的更有用的方法通常如下所示:

image

这种类型的可视化添加了时间上下文,所涉及服务的层次结构以及进程/任务执行的串行或并行特性。此视图有助于突出显示系统的关键路径。通过关注关键路径,注意力可以集中在可以进行最有价值改进的代码区域。例如,您可能希望将API请求中的资源分配范围跟踪到底层阻塞调用。

内容来自官网,详情查看opentracing

OpenTracing语言支持

opentracing-csharp

适用于.NET的OpenTracing API

必读

为了理解.NET平台API,首先必须更熟悉 OpenTracing项目和 

F2F2F;font-family:'PingFang SC';font-size:18px;">
F2F2F;font-family:'PingFang SC';">
F2F2F;font-family:'PingFang SC';">
0

 

OpenTracing:开放式分布式追踪规范的更多相关文章

  1. [业界方案] 用SOFATracer学习分布式追踪系统Opentracing

    [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 目录 [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 0x00 摘要 0x01 缘由 &am ...

  2. [业界方案]用Jaeger来学习分布式追踪系统Opentracing

    [业界方案]用Jaeger来学习分布式追踪系统Opentracing 目录 [业界方案]用Jaeger来学习分布式追踪系统Opentracing 0x00 摘要 0x01 缘由 & 问题 1. ...

  3. .NET Core微服务之基于Ocelot+Butterfly实现分布式追踪

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.什么是Tracing? 微服务的特点决定了功能模块的部署是分布式的,以往在单应用环境下,所有的业务都在同一个服务器上,如果服务器出现错 ...

  4. Uber分布式追踪系统Jaeger使用介绍和案例

    原文:Uber分布式追踪系统Jaeger使用介绍和案例[PHP Hprose Go] 前言   随着公司的发展,业务不断增加,模块不断拆分,系统间业务调用变得越复杂,对定位线上故障带来很大困难.整个调 ...

  5. 开源分布式追踪系统 — Jaeger介绍

    目录 一.Jaeger是什么 二.Jaeger架构 1. 术语 2. 架构图 三.关于采样率 四.部署与实践 一.Jaeger是什么 Uber开发的一个受Dapper和Zipkin启发的分布式跟踪系统 ...

  6. ASP.NET Core使用Jaeger实现分布式追踪

    前言 最近我们公司的部分.NET Core的项目接入了Jaeger,也算是稍微完善了一下.NET团队的技术栈. 至于为什么选择Jaeger而不是Skywalking,这个问题我只能回答,大佬们说了算. ...

  7. 【学习笔记】分布式追踪Tracing

    在软件工程中,Tracing指使用特定的日志记录程序的执行信息,与之相近的还有两个概念,它们分别是Logging和Metrics. Logging:用于记录离散的事件,包含程序执行到某一点或某一阶段的 ...

  8. 让你的Nginx支持分布式追踪

    Background NGINX 是一个通用且流行的应用程序.也是最流行的 Web 服务器,它可用于提供静态文件内容,但也通常与其他服务一起用作分布式系统中的组件,在其中它用作反向代理.负载均衡 或 ...

  9. 分布式追踪系统dapper

    http://www.cnblogs.com/LBSer/p/3390852.html 最近单位需要做自己的分布式监控系统,因此看了一些资料,其中就有google的分布式追踪系统dapper的论文:h ...

随机推荐

  1. go 排序sort的使用

    已知一个的struct组成的数组,现在要按照数组中的一个字段排序.python有sort方法,那golang要怎么实现呢?其实golang也有sort方法,并且使用简单,功能强大. 我们先看一下sor ...

  2. 手动将经典 VM 从 VHD 迁移到新的 ARM 托管磁盘 VM

    本部分有助于将现有 Azure VM 从经典部署模型迁移到资源管理器部署模型中的托管磁盘. 计划迁移到托管磁盘 本部分可帮助你针对 VM 和磁盘类型做出最佳决策. 位置 选取 Azure 托管磁盘可用 ...

  3. 用Python实现数据结构之树

    树 树是由根结点和若干颗子树构成的.树是由一个集合以及在该集合上定义的一种关系构成的.集合中的元素称为树的结点,所定义的关系称为父子关系.父子关系在树的结点之间建立了一个层次结构.在这种层次结构中有一 ...

  4. CRM 各种类型字段的 赋值 取值

    //lookupRecordEntity["new_lead"] = new EntityReference(entity.LogicalName, entity.Id); 获取时 ...

  5. Java中常用的字节流和字符流

    IO流(输入流.输出流) 字节流.字符流 1.字节流: InputStream.OutputStream InputStream抽象了应用程序读取数据的方式: OutputStream抽象了应用程序写 ...

  6. 最后一个单词的长度的golang实现

    给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但不包含任何空格的字符串. 输入: "He ...

  7. PDO 对 mysql的基本操作

    PDO扩展操作 <?php $dsn = 'mysql:dbname=yii2;host=localhost'; $user = 'root'; $password = '123456'; tr ...

  8. [USACO09JAN]安全出行Safe Travel

    题目 什么神仙题啊,我怎么只会\(dsu\)啊 我们考虑一个非常暴力的操作,我们利用\(dsu\ on \ tree\)把一棵子树内部的非树边都搞出来,用一个堆来存储 我们从堆顶开始暴力所有的边,如果 ...

  9. PHP数组转为树的算法

    一.使用引用 function listToTree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0) { $tree = ...

  10. 【转】一个域名是用哪里的DNS来解析的,电脑怎么知道找哪一个DNS呢? 我注册域名的时候会在服务商那里配置DNS解析,一般需要24小时后才能访问,我想知道,解析后的这个数据是不是会同步到世界上所有的DNS服务器呢!如果不是,当我访问我的这个域名的时候,电脑怎么知道去找到我注册的这一家的DNS服务器呢,谁告诉他的呢?

    看看DNS一些基础知识,你就了解了.1.DNS就是域名服务器,他的任务就是确定域名的解析,比如A记录MX记录等等. 2.任何域名都至少有一个DNS,一般是2个.为什么要2个以上呢?因为DNS可以轮回处 ...