完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
摘要: 分布式系统的运维挑战 容器、Serverless 编程方式的诞生极大提升了软件交付与部署的效率。在架构的演化过程中,可以看到两个变化: 应用架构开始从单体系统逐步转变为微服务,其中的业务逻辑随之而来就会变成微服务之间的调用与请求。
点此查看原文:http://click.aliyun.com/m/43347/ 分布式系统的运维挑战 容器、Serverless 编程方式的诞生极大提升了软件交付与部署的效率。在架构的演化过程中,可以看到两个变化:
Logging,Metrics 和 Tracing Logging,Metrics 和 Tracing 有各自专注的部分。
这三者也有相互重叠的部分,如下图所示。 通过上述信息,我们可以对已有系统进行分类。例如,Zipkin 专注于 tracing 领域;Prometheus 开始专注于 metrics,随着时间推移可能会集成更多的 tracing 功能,但不太可能深入 logging 领域; ELK,阿里云日志服务这样的系统开始专注于 logging 领域,但同时也不断地集成其他领域的特性到系统中来,正向上图中的圆心靠近。 关于三者关系的更详细信息可参考 Metrics, tracing, and logging。下面我们重点介绍下 tracing。 Tracing 的诞生 Tracing 是在90年代就已出现的技术。但真正让该领域流行起来的还是源于 Google 的一篇论文"Dapper, a Large-Scale Distributed Systems Tracing Infrastructure",而另一篇论文"Uncertainty in Aggregate Estimates from Sampled Distributed Traces"中则包含关于采样的更详细分析。论文发表后一批优秀的 Tracing 软件孕育而生,比较流行的有:
下图是一个分布式调用的例子,客户端发起请求,请求首先到达负载均衡器,接着经过认证服务,计费服务,然后请求资源,最后返回结果。 数据被采集存储后,分布式追踪系统一般会选择使用包含时间轴的时序图来呈现这个 Trace。 但在数据采集过程中,由于需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果您希望切换追踪系统,往往会带来较大改动。 OpenTracing 为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。 OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。 +-------------+ +---------+ +----------+ +------------+| Application | | Library | | OSS | | RPC/IPC || Code | | Code | | Services | | Frameworks |+-------------+ +---------+ +----------+ +------------+ | | | | | | | | v v v v +------------------------------------------------------+ | OpenTracing | +------------------------------------------------------+ | | | | | | | | v v v v+-----------+ +-------------+ +-------------+ +-----------+| Tracing | | Logging | | Metrics | | Tracing || System A | | Framework B | | Framework C | | System D |+-----------+ +-------------+ +-------------+ +-----------+ OpenTracing 的优势
OpenTracing 数据模型 OpenTracing 中的 Trace(调用链)通过归属于此调用链的 Span 来隐性的定义。 特别说明,一条 Trace(调用链)可以被认为是一个由多个 Span 组成的有向无环图(DAG图),Span 与 Span 的关系被命名为 References。 例如:下面的示例 Trace 就是由8个 Span 组成: 单个 Trace 中,span 间的因果关系 [Span A] ←←←(the root span) | +------+------+ | | [Span B] [Span C] ←←←(Span C 是 Span A 的孩子节点, ChildOf) | | [Span D] +---+-------+ | | [Span E] [Span F] >>> [Span G] >>> [Span H] ↑ ↑ ↑ (Span G 在 Span F 后被调用, FollowsFrom) 有些时候,使用下面这种,基于时间轴的时序图可以更好的展现 Trace(调用链): 单个 Trace 中,span 间的时间关系––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–> time [Span A···················································] [Span B··············································] [Span D··········································] [Span C········································] [Span E·······] [Span F··] [Span G··] [Span H··] 每个 Span 包含以下的状态:(译者注:由于这些状态会反映在 OpenTracing API 中,所以会保留部分英文说明)
每次 log 操作包含一个键值对,以及一个时间戳。 键值对中,键必须为 string,值可以是任意类型。 但是需要注意,不是所有的支持 OpenTracing 的 Tracer,都需要支持所有的值类型。
每一个 SpanContext 包含以下状态:
更多关于 OpenTracing 数据模型的知识,请参考 OpenTracing语义标准。 OpenTracing 实现 这篇文档列出了所有 OpenTracing 实现。在这些实现中,比较流行的为 Jaeger 和 Zipkin。 Jaeger Jaeger 是 Uber 推出的一款开源分布式追踪系统,兼容 OpenTracing API。 Jaeger 架构 如上图所示,Jaeger 主要由以下几部分组成。
Jaeger 存在的问题
Jaeger on Aliyun Log Service Jaeger on Aliyun Log Service 是基于 Jeager 开发的分布式追踪系统,支持将采集到的追踪数据持久化到日志服务中,并通过 Jaeger 的原生接口进行查询和展示。 优势
配置步骤 参阅:https://github.com/aliyun/jaeger/blob/master/README_CN.md 使用实例 HotROD 是由多个微服务组成的应用程序,它使用了 OpenTracing API 记录 trace 信息。 下面通过一段视频向您展示如何使用 Jaeger on Aliyun Log Service 诊断 HotROD 出现的问题。视频包含以下内容:
参考资料
特别感谢 Jaeger on Aliyun Log Service 是基于阿里云MVP @WPH95 在业余时间工作整理而成,感谢 MVP 的杰出贡献! 识别以下二维码,阅读更多干货 |
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 23:23 , Processed in 0.616693 second(s), Total 69, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号