「微服务系列 12」调用链的原理和选型

微服务是一个分布式非常复杂系统,如果没有一套调用链监控,如果服务之间依赖出现问题就很难进行调位

下图是ali在鹰眼系统给出的微服务之“熵”

目前个大主流互联网公司中,ali有非常出现的鹰眼系统,点评也有一套很出名的调用链监控系统CAT。调用链监控其实最早是google提出来的,2010年google发表了一篇调用链的论文,论文以它内部的调用链系统dapper命名,这个论文中讲解调用链在google使用的经验和原理,大致的原理如下图:

假使我们的微服务有一个web服务提供给前端进行请求,它自己又调用了svc1的一个服务,然后又调用了一个cache的服务,svc1中又调用了一个DB还有svc2的服务,这个看上去应该还比较简单,这里google提出了一个概念,叫span,当我们调用链监控启动了,在外界对微服务进行一个请求开始进入我们的微服务体系时,会生成一个Root Span,当web服务去调用后面的服务svc1时又会生成一个span,调用DB也会生成一个span,每一个应用调度都会生成一个新的span,这个是span是整个调用链形成的关键,span中有一些关键的信息,有traceId,spanId。RootSpan是比较特殊的,在启动的时候会生成spanId还会生成TraceId,其他的span会生成自己的spanId,为了维护好调用链上下文的调用关系,span会去记录调用它的链路,以parent spanId记录下来,这样的话父子之间的关系就可以记录下来,每个调用都会把第一个链路traceId也记录下来,这样,当我们把这些span都存在起来,就可以通过分析手段,把整个调用链的关系还原出来。

这里可以采用ELK的方式去记录和展示调用链监控日志,当我们一条调用为一行记录存储下来

通过traceId 和 parentSpanId 就可以串联起来为一个整体的链路,并可以从这个链路去分析错误或者调用延时和调用次数等等

目前市面主流的调用链选型有 zipkin,pinpoint,cat,skywalking,他们之间各有一些偏重点,值得一说的是skywalking国人出品的一款新的调用链工具,采用开源的基于字节码注入的调用链分析,接入段无代码入侵,而且开源支持多种插件,UI在几款工具来说比较功能比较强大,而且ui也比较赏心悦目,目前已经加入了apache孵化器。

在我们公司也采用了skywalking作为调用链工具

为何会采用skywaling,在低层原理的实现,这几款产品都差不多,但在实现和使用的细节相别还是很大。

  • 首先在实现方式上,skywalking基本对于代码做到了无入侵,采用java探针和字节码增强的方式,而在cat还采用了代码埋点,而zipkin采用了拦截请求,pinpoint也是使用java探针和字节码增强。
  • 其次在分析的颗粒度上,skywaling是方法级,而zipkin是接口级,其他两款也是方法级。
  • 在数据存储上,skywalking可以采用日志体系中比较出名的ES,其他几款,zipkin也可以使用ES,pinpoint使用Hbase,cat使用mysql或HDFS,相对复杂,由于目前公司对ES熟悉的人才比较有保证,选择熟悉存储方案也是考虑技术选型的重点。
  • 还有就是性能影响,根据网上的一些性能报告,虽然未必百分百准备,但也具备参考价值,skywalking的探针对吞吐量的影响在4者中间是最效的,经过对skywalking的一些压测也大致证明。

下面是网上摘录的几款调用链选型对比:

基本原理
类别ZipkinPinpointSkyWalking CAT
实现方式拦截请求,发送(HTTP,mq)数据至zipkin服务java探针,字节码增强java探针,字节码增强
接入
类别ZipkinPinpointSkyWalkingCAT
接入方式」基于linkerd或者sleuth方式,引入配置即可javaagent字节码」javaagent字节码代码侵入
agent到collector的协议http,MQthriftgRPChttp/tcp
OpenTracing××
分析
类别ZipkinPinpointSkyWalkingCAT
颗粒度接口级方法级方法级代码级
全局调用统计×
traceid查询××
报警×
JVM监控××
页面UI展示
类别ZipkinPinpointSkyWalkingCAT
健壮度****************
数据存储
类别ZipkinPinpointSkyWalkingCAT
数据存储ES,mysql,Cassandra,内存HbaseES,H2mysql,hdfs

博客地址:「微服务系列 12」调用链的原理和选型

转载于:https://juejin.im/post/5cde874e6fb9a07f091b713c

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值