40张图看懂分布式追踪系统原理及实践
前言
分布式追踪系统原理及作用
SkyWalking的原理及架构设计
我司在分布式调用链上的实践
分布式追踪系统的原理及作用
接口的 RT 你怎么知道?
是否有异常响应?
主要慢在哪里?
单体架构
微服务架构
排查问题难度大,周期长
特定场景难复现
系统性能瓶颈分析较难
自动采取数据
分析数据产生完整调用链:有了请求的完整调用链,问题有很大概率可复现
数据可视化:每个组件的性能可视化,能帮助我们很好地定位系统的瓶颈,及时找出问题所在
分布式调用链标准 - OpenTracing
Trace:一个完整请求链路
Span:一次调用过程(需要有开始时间和结束时间)
SpanContext:Trace 的全局上下文信息, 如里面有traceId
全局 trace_id:这是显然的,这样才能把每一个子调用与最初的请求关联起来
span_id: 图中的 0,1,1.1,2,这样就能标识是哪一个调用
parent_span_id:比如 b 调用 d 的 span_id 是 1.1,那么它的 parent_span_id 即为 a 调用 b 的 span_id 即 1,这样才能把两个紧邻的调用关联起来。
怎么自动采集 span 数据:自动采集,对业务代码无侵入
如何跨进程传递 context
traceId 如何保证全局唯一
请求量这么多采集会不会影响性能
SkyWalking的原理及架构设计
怎么自动采集 span 数据
如何跨进程传递 context
traceId 如何保证全局唯一
请求量这么多,全部采集会不会影响性能?
SkyWalking 的基础架构
SkyWalking 的性能如何
对多语言的支持,组件丰富:目前其支持 Java, .Net Core, PHP, NodeJS, Golang, LUA 语言,组件上也支持dubbo, mysql 等常见组件,大部分能满足我们的需求。 扩展性:对于不满足的插件,我们按照 SkyWalking 的规则手动写一个即可,新实现的插件对代码无入侵。
我司在分布式调用链上的实践
SkyWalking 在我司的应用架构
我司对 SkyWalking 作了哪些改造和实践
预发环境由于调试需要强制采样 实现更细粒度的采样? 日志中嵌入traceId 自研实现了 SkyWalking 插件
预发环境由于调试需要强制采样
实现更细粒度的采样?
日志中如何嵌入traceId?
我司自研了哪些 skywalking 插件
插件定义类: 指定插件的定义类,最终会根据这里的定义类打包生成 plugin Instrumentation: 指定切面,切点,要对哪个类的哪个方法进行增强 Interceptor,指定步骤 2 中要在方法的前置,后置还是异常中写增强逻辑
// skywalking-plugin.def 文件
dubbo=org.apache.skywalking.apm.plugin.asf.dubbo.DubboInstrumentation
这样打包出来的插件就会对 MonitorFilter 的 invoke 方法进行增强,在 invoke 方法执行前对期 attachment 作注入全局 traceId 等操作,这一切都是静默的,对代码无侵入的。
总结
评论