OpenTracing:开放式分布式追踪规范
前言
想实现一个简单的追踪系统似乎是容易的,需要必要的调用链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):命名的定时操作,表示该跟踪中的连续工作段。

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

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

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

这种类型的可视化添加了时间上下文,所涉及服务的层次结构以及进程/任务执行的串行或并行特性。此视图有助于突出显示系统的关键路径。通过关注关键路径,注意力可以集中在可以进行最有价值改进的代码区域。例如,您可能希望将API请求中的资源分配范围跟踪到底层阻塞调用。
内容来自官网,详情查看opentracing
OpenTracing语言支持
- Go - opentracing-go
- Python - opentracing-python
- Javascript - opentracing-javascript
- Java - opentracing-java
- C# - opentracing-csharp
- Objective-C - opentracing-objc
- C++ - opentracing-cpp
- Ruby - opentracing-ruby
- PHP - opentracing-php
我们重点关注下opentracing-csharp
opentracing-csharp
适用于.NET的OpenTracing API
必读
为了理解.NET平台API,首先必须更熟悉 OpenTracing项目和 术语。
OpenTracing:开放式分布式追踪规范的更多相关文章
- [业界方案] 用SOFATracer学习分布式追踪系统Opentracing
[业界方案] 用SOFATracer学习分布式追踪系统Opentracing 目录 [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 0x00 摘要 0x01 缘由 &am ...
- [业界方案]用Jaeger来学习分布式追踪系统Opentracing
[业界方案]用Jaeger来学习分布式追踪系统Opentracing 目录 [业界方案]用Jaeger来学习分布式追踪系统Opentracing 0x00 摘要 0x01 缘由 & 问题 1. ...
- .NET Core微服务之基于Ocelot+Butterfly实现分布式追踪
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.什么是Tracing? 微服务的特点决定了功能模块的部署是分布式的,以往在单应用环境下,所有的业务都在同一个服务器上,如果服务器出现错 ...
- Uber分布式追踪系统Jaeger使用介绍和案例
原文:Uber分布式追踪系统Jaeger使用介绍和案例[PHP Hprose Go] 前言 随着公司的发展,业务不断增加,模块不断拆分,系统间业务调用变得越复杂,对定位线上故障带来很大困难.整个调 ...
- 开源分布式追踪系统 — Jaeger介绍
目录 一.Jaeger是什么 二.Jaeger架构 1. 术语 2. 架构图 三.关于采样率 四.部署与实践 一.Jaeger是什么 Uber开发的一个受Dapper和Zipkin启发的分布式跟踪系统 ...
- ASP.NET Core使用Jaeger实现分布式追踪
前言 最近我们公司的部分.NET Core的项目接入了Jaeger,也算是稍微完善了一下.NET团队的技术栈. 至于为什么选择Jaeger而不是Skywalking,这个问题我只能回答,大佬们说了算. ...
- 【学习笔记】分布式追踪Tracing
在软件工程中,Tracing指使用特定的日志记录程序的执行信息,与之相近的还有两个概念,它们分别是Logging和Metrics. Logging:用于记录离散的事件,包含程序执行到某一点或某一阶段的 ...
- 让你的Nginx支持分布式追踪
Background NGINX 是一个通用且流行的应用程序.也是最流行的 Web 服务器,它可用于提供静态文件内容,但也通常与其他服务一起用作分布式系统中的组件,在其中它用作反向代理.负载均衡 或 ...
- 分布式追踪系统dapper
http://www.cnblogs.com/LBSer/p/3390852.html 最近单位需要做自己的分布式监控系统,因此看了一些资料,其中就有google的分布式追踪系统dapper的论文:h ...
随机推荐
- [Android] 设置AlertDialog中按钮的可用(Enable)状态
弹出一个保存文件的对话框,要控制输入内容限制,同时内容为空时保存按钮不可用. 原文地址请保留http://www.cnblogs.com/rossoneri/p/4140184.html 直接上代码: ...
- Fiddler抓包使用教程-基本功能介绍
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72932886 本文出自[赵彦军的博客] Fiddler 基本页面 会话列表功能介绍 ...
- python爬虫之pyquery学习
相关内容: pyquery的介绍 pyquery的使用 安装模块 导入模块 解析对象初始化 css选择器 在选定元素之后的元素再选取 元素的文本.属性等内容的获取 pyquery执行DOM操作.css ...
- sql 查询表格中多列重复的数据并显示该表的其他列
我们一般情况下通过分组函数group by来查询重复的列 ) R 但是查询出的结果不能显示该表的其他列 想要查询一张表中有多个列重复的数据且也要显示该表的其他列 SELECT M.* FROM [db ...
- Mac命令行使用tree查看目录结构
默认tree命令是无法使用的,可以使用homebrew install tree安装. 如果直接使用tree,查看的目录里面含有中文字符的目录或文件时会出现汉字不能显示的问题,可以使用tree -N查 ...
- 【PAT】B1072 开学寄语(20 分)
代码注释应该很清晰 先存下违禁品,放到数组中,未使用map #include<cstdio> #include<string.h> int wupin[10],N,M; boo ...
- python之列表的常用操作
Python list 常用方法总结 一,创建列表 只要把逗号分隔的不同的数据项使用方括号([ ])括起来即可 下标(角标,索引)从0开始,最后一个元素的下标可以写-1 list = ['1 ...
- 初识SpringCloud微服务
微服务是一种架构方式,最终肯定需要技术架构去实施. 微服务的实现方式很多,但是最火的莫过于Spring Cloud了.为什么? 后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十 ...
- Python3.6安装及引入Requests库
本博客可能没有那么规范,环境之类的配置.只是让你直接开始编程写python. 至于各种配置网络上有多种方法. 本文仅代表我的观点的一种方法. 电脑环境:win10 64位 第一步:下载python. ...
- C++添加热键和捕获组合键
一.热键注册 步骤一:声明一个全局量int hotkeyId=1: 步骤二:窗体创建的时候注册: int result= RegisterHotKey(this->GetHWND(), hotk ...