分布式链路追踪-skywalking
分布式链路追踪-skywalkingskywalking分布式链路追踪-skywalking前言一、skywalking特点1.接入方式2.性能高二、架构设计1.架构图2.实现原理前言目前市面上常见的调用链产品有EagleEye、zipkin、pinpoint、skywalking以及cat,本文以skywalking为主介绍,一个专为云原生结构、微服务和k8s容器和设计的软件。一、skywalk
分布式链路追踪-skywalking
前言
目前市面上常见的调用链产品有EagleEye、zipkin、pinpoint、skywalking以及cat,本文以skywalking为主介绍,一个专为云原生结构、微服务和k8s容器和设计的软件。
一、skywalking特点
1.接入方式
采用插件化(拦截器的方式)和java探针的方式,进行字节码增强,实现对接入端无代码入侵。不仅支持多语言探针,还可以采用自动(Java支持的中间件)或者手动探针(OpenTrackingApi、@Trace注解、traceid集成到日志)。
2.性能高
在下图中几种模拟请求场景下skywalking对于性能造成的影响都是最小的。
图片来源
二、架构设计
1.架构图
skywalking支持多种数据存储方式,默认使用h2内存数据库,这里推荐采用ES方式
2.实现原理
根据Dapper论文进行简单描述
每一个请求都会设置一个唯一表示trace_id,而在一个调用中会有一个span结构,记录着trace_id,name名字,当前的span_id,上层调用的span_id即parent_id和时间。通过trace_id可以在日志中找到一个请求的全部过程,而span体现了这个过程中每个服务之间的依赖调用关系。
三、使用事项
1.采样率
采样率标记着多少个请求里面记录其中的百分比请求数量,采样率可以设置成动态的,在低吞吐的情况下,发生的事件是比较难重复的,如果此时采样率低则有可能丢失部分关键的事件;而在吞吐量较高的情况下,一个事件会重复的出现,这时候再重复记录就没有那个必要了。默认情况下三秒内采样前三次,不是每个请求都采样,不然数据量太大了,如果上游采样了,下游强制采样,保证链路的完整性。采样可以进行分组采样,如对dubbo、redis等调用分开各自三秒内采样前三次,更细粒度。
2.日志收集
可以采用ELK对日志进行收集,并进行一个慢查询分析和流量分析。
3.id生成
采用雪花算法生成,每生成一个 id,都会记录一下生成 id 的时间(lastTimestamp),如果发现当前时间比上一次生成 id 的时间(lastTimestamp)还小,那说明发生了时间回拨,此时会生成一个随机数来作为 traceId。
更多推荐
所有评论(0)