当前位置: 首页 > news >正文

[单master节点k8s部署]42.全链路监控(一)

微服务架构将应用拆分成多个独立的服务,系统整体变得更加复杂。全链路监控可以帮助开发和运维团队理解和管理这种复杂性,追踪请求在不同服务之间的流转过程。通过全链路监控,可以识别整个调用链中的性能瓶颈。它能够显示每个服务的响应时间,帮助定位那些服务或操作导致了延迟,从而有针对性的进行优化。

同时,全链路监控可以帮助快速定位故障源,并且帮助分析微服务之间的复杂依赖关系。通过监控各个服务的资源使用情况,可以更好地进行容量规划和资源分配,确保系统的高效运行。

全链路监控可以得到用户路径,从而进行分析汇总,优化业务的应用场景。通过zipkin,skywalking 和pinpoint等工具,可以实现微服务调用和服务情况的可视化分析。

Dapper

Dapper是goggle的一个大规模分布式追踪系统的基础设置,google在2010年发布的论文详细解释了这一工具以及其工作原理。现代互联网服务通常是通过复杂的大规模分布式系统实现的,这些系统由不同的团队和不同的编程语言开发的模块组成,可能跨越成千上万台机器。为了更好地理解这些系统的行为,尤其是诊断性能问题,谷歌开发了Dapper。Dapper的目的是为开发人员提供一种低开销、透明、可扩展的方式来追踪和分析系统中各个部分的行为。

以图中的请求为例,最开始用户发起的请求为X,但是X到达微服务A后,又被向后传递,这张图把请求的微服务分为三层,分别是frontend,middle tier和backend。但是在大规模集群中,各个微服务的关系没有这么清晰可见,如何弄懂微服务之间的关系呢,有两种方法。一种叫做black box,就是根据微服务调用次数的统计数据来找到微服务之间的关联关系,但是这种方法需要大量的数据。基于标注的方法(annotation based)是通过应用程序或者中间件的形式 为每一个请求添加一个全局标识符,将这些消息记录链接回原始请求。

虽然黑盒方案比基于标注的方法更具可移植性,但由于依赖统计推断,它们需要更多的数据才能获得足够的准确性。基于注释方法的主要缺点显然是需要对程序进行instrumentation(插桩)。在我k8s的环境中,由于所有应用程序使用相同的线程模型、控制流和RPC系统,我们发现可以将instrumentation限制在一小组通用库中,从而实现对应用程序开发人员实际上透明的监控系统。

 Dapper使用span来描述每一个操作,图中可以看到请求X到达fontend后,首先生成了一个span id为1,他的parent id为0,表示这是根节点。然后backend call的parent id为1,span id为2,请求span的标记依次增加。同时这个请求也有一个trace id,没有在图上标注。

下图可以更好的看清楚span的划分,从上面的图1看到,一个rpc的请求和回复可以看作是一个span,下图也有体现出来。下图有标记trace id。

Span的开始和结束时间,以及任何RPC计时信息都由Dapper的RPC库插桩记录。如果应用程序所有者选择使用自己的注释来增强跟踪,这些注释也会与其他span数据一起记录。以上就是链路追踪的基本原理和做法,后续的链路追踪工具也是遵循这一原理进行开发的。

Span 数据结构:

type Span struct {
TraceID int64 #用于标示一次完整的请求 id
Name string
ID int64 #当前这次调用 span_id
ParentID int64 #上层服务的调用 span_id 最上层服务 parent_id 为 null
Annotation []Annotation #用于标记的时间戳
Debug bool
}

链路追踪工具

zipkin

github:

https://github.com/openzipkin/zipkin

zipkin 是一个分布式的追踪系统,它能够帮助你收集服务架构中解决问题需要的时间数据,功能包括收集和查找这些数据。如果日志文件中有跟踪 ID,可以直接跳转到它。否则,可以根据服务、操作名称、标记和持续时间等属性进行查询。例如在服务中花费的时间百分比,以及哪些环节操作失败。特点是轻量,使用部署简单。

pinpoint
github:
https://github.com/naver/pinpoint
skywalking

github: 
https://github.com/apache/incubator-skywalking
skywalking 是本土开源的调用链追踪系统,包括监控、跟踪、诊断功能,目前已加入 Apache 孵化器, 专门为微服务、云本地和基于容器(Docker、Kubernetes、Mesos)架构设计。


http://www.mrgr.cn/news/55387.html

相关文章:

  • Scrapy | 使用Scrapy进行数据建模和请求
  • 如何将LiDAR坐标系下的3D点投影到相机2D图像上
  • ScrollView 真机微信小程序无法隐藏滚动条
  • 【Linux】【命令】查找(grep/find)与统计(wc)
  • uniapp,获取头部高度
  • qt编译报错大量error C2065: 未声明的标识符
  • 【p2p、分布式,区块链笔记 Blockchain】truffle003 测试网络准备
  • 关于动态规划的一份介绍
  • 【AI大模型】本地部署 Code Llama 大模型
  • ROS 2 Jazzy Jalisco 模型工具 Xacro 总结和习题
  • FineReport 页面设置
  • 【小白学机器学习17】 概率论的认识论和方法论
  • 鲸信私有化即时通信如何平衡安全性与易用性之间的关系?
  • 观察者模式
  • Vue--数据代理
  • 相同的树算法
  • 在做题中学习(63):替换问号
  • vue3学习记录-TransitionGroup
  • 携手并进,智驭教育!和鲸科技与智谱 AI 签署“101 数智领航计划”战略合作协议
  • GB28181协议视频监控平台-鉴权的含义
  • Java 当中使用 “google.zxing ”开源项目 和 “github 的 qrcode-plugin” 开源项目 生成二维码
  • 【04】双样本等方差(t-检验)
  • P3137 [USACO16FEB] Circular Barn S
  • 全面了解 NGINX 的负载均衡算法
  • c语言基础程序——经典100道实例(二)
  • 中电金信重磅发布《金融数据安全治理白皮书》