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):命名的定时操作,表示该跟踪中的连续工作段。

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

原文地址:https://www.cnblogs.com/fancunwei/p/9691424.html

时间: 2024-11-02 18:25:20

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

Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控

在大型网站系统设计中,随着分布式架构,特别是微服务架构的流行,我们将系统解耦成更小的单元,通过不断的添加新的.小的模块或者重用已经有的模块来构建复杂的系统.随着模块的不断增多,一次请求可能会涉及到十几个甚至几十个服务的协同处理,那么如何准确快速的定位到线上故障和性能瓶颈,便成为我们不得不面对的棘手问题. 为解决分布式架构中复杂的服务定位和性能问题,Google在论文<Dapper, a Large-Scale Distributed Systems Tracing Infrastructure>

分布式消息规范 OpenMessaging 1.0.0-preview 发布

摘要: OpenMessaging 是由阿里巴巴牵头发起,由 Yahoo.滴滴.Streamlio.微众银行.Datapipeline 等公司共同发起创建的分布式消息规范,其目标在于打造厂商中立,面向 Cloud Native ,同时对流计算以及大数据生态友好的下一代分布式消息标准. OpenMessaging 是由阿里巴巴牵头发起,由 Yahoo.滴滴.Streamlio.微众银行.Datapipeline 等公司共同发起创建的分布式消息规范,其目标在于打造厂商中立,面向 Cloud Nati

jaegeropentracing的Java-client完整分布式追踪链

jaegeropentracing的Java-client完整分布式追踪链,在分布式系统中透传trace信息 之前文章记录了jaegeropentracing的Java-client追踪链在单系统中的调用示例,现在记录下在分布式系统是如何实现一个完整的调用链的. 这篇文章是基于我之前的两篇文章编写了,链接如下: Spring整合CXF webservice restful 实例 jaegeropentracing的Java-client 下面是代码: client端代码如下: public st

小白使用分布式追踪系统

在一个微服务体系中,对于应用之间的通信.接口调用如何做到跟踪和监控,一直是一个比较难的问题. 比如A是做商品服务开发的,而B是做订单服务开发的,B在下单的时候需要调用到商品服务的查询商品库存接 口和查询商品明细接口,才能够完成下单流程.现在出现的问题就是下单很慢,要耗时20s.多么恐怖的耗时, 我一个用户,真金白银买你的东西,你却半天不让我下单成功,不想卖直说好吧. 看到没有,在这个过程中,就算最终能够下单成功,也避免不了用户对商家的抱怨与不满,要是多来几次, 你就永远的失去这个客户了.所以老板

SkyWalking 分布式追踪系统

随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响,所以会深深的感受到 “银弹” 这个词是不存在的,每种架构都有其优缺点 . 目前主要的一些 APM 工具有: Cat.Zipkin.Pinpoint.SkyWalking, SkyWalking 它是一款优秀的国产 APM 工具,包括了分布式追踪.性能指标分析.应用和服务依

SkyWalking+Asp.Net Core 分布式追踪系统

SkyWalking 是一套(APM)分布式追踪系统,SkyWalking提供了很多数据存储列如:Mysql,H2,Elasticsearch7 等,我这里用的是Elasticsearch7 ,SkyWalking默认H2,H2是内存数据库,数据文件一旦损坏oapservice就启动不了,所以我这里用的是Elasticsearch7 . SkyWalking下载地址 Elasticsearch下载地址 SkyWalking 安装的环境要求 CentOS7 JDK8+ Elasticsearch7

分布式项目规范总结

远程调用项目规范总结大致如下,架构不一定与这个架构一样,但基本上是差不多的,有的项目使用maven管理只需要建立两个项目. 远程调用分布式的核心思想:面向接口编程,代码切割 ,负载均衡,服务器缓存. 以下的规范都是为了方便实现其核心精神. 数据实体遵循ORM映射机制. 实体属性命名格式mouldName;不带下划线,可以使用工具generator eclipse插件自动化生成实体类和映射Mapper.xml文件 远程调用分层格式 客户端工程 前端:js  ,  image  , CSS ,Htm

grp/从Zipkin到Jaeger,Uber的分布式追踪之道tchannel--zipkin with mysql in docker-compose

GRPC----http://www.cnblogs.com/ghj1976/p/4587736.html https://blog.csdn.net/fei33423/article/details/79452948 zipkin with mysql in docker-compose https://my.oschina.net/u/3020542/blog/1613016[Docker Compose 搭建基于mysql存储的zipkin环境 ] https://github.com/o

分布式追踪系统sleauth+zipkin

原文地址:https://www.cnblogs.com/fengli9998/p/10382926.html