设计需求
* 基于日志的分布式请求跟踪系统
业务侵入小
将每个系统分散的日志聚合起来,并进行海量日志分析,从而生成有价值的数据
* 核心 -- 调用链
每次请求都生产一个全局唯一的ID(TraceId),通过它讲不同系统生成的日志串在一起,重组成调用链,使其价值达到1+1>2的效果
开发人员通过分布式请求跟踪链排查问题
也可以对多个请求统计和分析
设计目标
* 低侵入性 - 作为非业务组件,尽可能少侵入或者无侵入其它业务系统,对于使用方透明,减少业务开发人员的负担
* 灵活的应用策略 - 使用方可以根据需求,自定义收集数据的范围和粒度(开关和采样)
* 时效性 - 从数据的产生和收集,到数据的分析与处理,再到最终的页面展现,尽可能快
* 决策支持 - 分析数据可以在决策支持层面发挥作用
* 可视化 - 使用场景友好的用户视角,丰富的展现方式,可读性高
使用场景
场景一:调用链跟踪 - 一次请求调用过程的展示,以图形化的方式梳理出各个个微服端集群之间的调用关系,并记录整个调用过程的耗时情况,协助开发人员分析整个系统的瓶颈点和热点,从未优化系统。
场景二:调用链路径分析 - 对多条调用链进行分析,整理出集群间的调用关系,计算出整个调用链路链路的关键节点、直接依赖、简介依赖强度等。
场景三:调用来源分析 - 针对某一特定集群,整理出其它集群对其的调用情况,防止错误调用情况的发生
场景四:调用量统计 - 实时统计各个集群的调用次数、QPS、平均耗时、最大耗时等信息,开发人员可以根据相关信息进行容量规划
场景五:监控请求调用量 - 开发人员通过自定义的正则表达式,对匹配该正则URL的请求进行实时监控,包括调用次数、QPS、平均耗时、最大耗时、最小耗时等等
开源选型
* Apache SkyWalking: https://github.com/apache/skywalking
* Pinpoint : https://github.com/pinpoint-apm/pinpoint
调用追踪 - 采样
1. Dapper表明:在高QPS时,千分之一的抽样率足以发现问题,放在网关层进行采样
2. 采样时机: 无Trace上下文的最早结点
3. 时机采样率: 生产环境 1%,测试环境 100%