前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式服务链路追踪技术分析及对比

分布式服务链路追踪技术分析及对比

作者头像
IT大咖说
发布2020-02-21 18:26:32
4.1K0
发布2020-02-21 18:26:32
举报
文章被收录于专栏:IT大咖说IT大咖说

1、概述

在分布式服务时代,服务之间的请求域调用不再是简单的直连方式,注册中心的出现,让服务治理更加便利,也对服务之间的链路追踪提出了更高的要求。

分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等

理论支撑。目前比较主流的链路追踪产品都是启发于google发表的Dapper,Dapper阐述了分布式系统,特别是微服务架构中链路追踪的概念、数据表示、埋点、传递、收集、存储与展示等技术细节。

标准化。OpenTracing(http://opentracing.io/)是一个分布式跟踪框架。OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。目前OpenTracing正在为全球的分布式追踪,提供统一的概念和数据标准。

2、追踪理论 - Dapper

为了实现链路追踪,dapper提出了trace,span,annotation的概念。

Trace的含义比较直观,就是链路,指一个请求经过后端所有服务的路径,每一条链路都用一个全局唯一的traceid来标识。

span之间存在着父子关系,上游的span是下游的父span,每个span由spanid和parentid来标识,spanid在一条链路中唯一。

一个span一般由client和server两个部分的信息组成。按照时间顺序来解释,client节点(或者是调用方)首先发出请求,产生”client send”(cs)事件,紧接着server节点(或者是提供方)收到请求,产生”server receive”(sr)事件,server处理完成之后回复给client,产生”server send”事件,最后client收到回复,产生”client receive”事件。Client与server两个节点的span信息合并成一次完整的调用,即一个完整的span。

Dapper中还定义了annotation的概念,用于用户自定义事件。

3、通用架构分析

主流的链路追踪产品架构包含以下四大模块:采样、收集、存储与展示。

通用架构图

3.1 采样

采样包含采集埋点、链路信息的传递以及链路信息上报,目前主流的埋点方式有三种,分别是应用拦截埋点,探针(java agent)埋点,服务器拦截埋点。其中应用拦截埋点有代码侵入,需要二次开发,其他二者与服务的耦合度较低,无需侵入。

由于每一个请求就会生成一个链路,为了减少性能消耗,避免存储资源的浪费,dapper并不会上报所有的span数据,而是使用采样的方式。通过采集端自适应地调整采样率,控制span上报的数量,可以在发现性能瓶颈的同时,有效减少性能损耗。

3.2 收集

收集端服务接收采集到的链路信息并进行分析,链路信息的传递有两种方,分别是http和grpc,其中http方式简单易用、维护成本低,使用率较高,grpc性能突出,但需要客户端代码,维护成本较高。

3.3 存储

分布式链路追踪系统支持海量的数据库存储。Mysql、Hbase、ElasticSearch等关系型数据库和非关系型数据库均能存储链路信息,主流的存储选择是ElasticSearch,ElasticSearch可以提供高效的数据检索,为数据的应用提供可靠的性能支持。

3.4 展示

目前主流的分布式链路追踪框架大多有自己的链路展示UI,内容主要有服务拓扑、调用链时序图和检索等。

4、主流的实现方式

目前比较典型的分布式链路追踪框架主要有skywalking、istio和zipkin

,三者主要的区别体现在埋点方式的差异上。

4.1 skywalking

SkyWalking 是观察性分析平台和应用性能管理系统。

提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

Skywalking采用探针的方式进行埋点。以java为例,Skywalking只需要在java程序启动时指定其为java agent即可,以这种二进制注入的方式,拦截应用程序的流量,截取其中的链路流转信息。Skywalking支持多语言探针,提供了Java,.NET Core和Node.JS等主流开发语言的探针插件。

探针埋点示意图

4.1 istio

Istio提供了 Service Mesh 方式服务治理的完整的解决方案,服务运行的监控数据可以动态获取和输出,提供了强大的调用链、监控和调用日志收集输出的能力,通过非侵入的方式提供了服务的连接、控制、保护和观测能力。

Envoy代理埋点。在 Istio 中,所有的治理逻辑的执行体都是和业务容器一起部署的 Envoy 这个 Sidecar,拦截所有的流入和流出业务程序的流量,根据收到的规则执行执行各种动作。

Iptables 脚本通过 Iptables 规则拦截 pod 中流量,并发送到 Envoy 上。Envoy 拦截到 Inbound 和 Outbound 的流量会分别作不同操作,执行上面配置的操作,另外再把请求往下发,对于 Outbound 就是根据服务发现找到对应的目标服务后端上,对于 Inbound 流量则直接发到本地的服务实例上,Envoy在此进行埋点,截取Inbound和Outbound的链路信息,参照OpenTracing标准生成标准的调用链数据。

Envoy埋点示意图

4.1 zipkin

Zipkin分为client端和server端,client端需要应用系统代码引入,并可以进行灵活的二次开发,client端实现数据采集,server端负责链路数据的分析入库等。

框架埋点。应用系统引入client端代码,应用请求会被Trace框架拦截,将调用链信息添加到Header中,并传递到后续的服务调用中,每次跳转都会传递调用信息,上报trace信息(时间戳、耗时等),server端的Collecter会汇总所有的跳转信息,合并成一条完整的调用链信息。

框架埋点示意图

4.4 综合对比

综合对比图

5、参考文献

1. java agent 详细介绍

https://segmentfault.com/a/1190000015977174

2. Skywalking分析

https://blog.csdn.net/Saphulot/article/details/81739411

3. zipkin的工作原理浅析

https://blog.csdn.net/shida_hu/article/details/89450177

4. Istio 调用链埋点原理剖析—是否真的“零修改”?

https://mp.weixin.qq.com/s?src=11×tamp=1581385567&ver=2151&signature=msOWkdym*Cm-1XIXl6VFAlsjQlTOFmXZB4NjcMuXVnTw1iV*SE3Nbew4rGsKhPCQdxg6vfKZ18jeVA2JoqrFNOnscHI21R3JCcNYK-2jub5DMYeDoW43iM4*Xx5PDBEX&new=1

5. google dapper论文 中文

https://blog.csdn.net/yangzishiw/article/details/79402084

来源:https://www.toutiao.com/a6792401294427423235/

来都来了,走啥走,留个言呗~

IT大咖说 | 关于版权

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、概述
  • 2、追踪理论 - Dapper
  • 3、通用架构分析
    • 3.1 采样
      • 3.2 收集
        • 3.3 存储
          • 3.4 展示
          • 4、主流的实现方式
            • 4.1 skywalking
              • 4.1 istio
                • 4.1 zipkin
                  • 4.4 综合对比
                  • 5、参考文献
                  相关产品与服务
                  Elasticsearch Service
                  腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档