天弘基金架构师李鑫 - “静态调用链路发现”在APM
2020-02-27 662浏览
- 1.“静态调用链路发现”在APM 中的应用场景分析及实践探索 李鑫
- 2.大纲 u APM的发展与现状 Ø APM发展历程 Ø 动态调用链路的模式及“优缺点” u 静态调用链路 Ø 原理 Ø 实现技术及手段 Ø 与动态调用链路(及监控)的结合 Ø 应用场景分析 u 总结
- 3.APM的前世今生 企业级 APM1.0 移动互联网 互联网 APM2.0 物联网 人工智能 APM3.0
- 4.APM的核心能力:调用链路监控 服务化拆分是系统发展的必然趋势 服务化后系统运维的新难题 Google Dapper
- 5.动态调用链路监控的典型实现手段 request response T Action T1 T2 T3 T4 S1 S2 S3 S4 T5 T8 S5 Cache T6 S6 T7 统计分析 中心 日志平台 S1-T1-T1’ S2-T2-T2’ S3-T3-T3’ …. DB traceId T T1 T5 T6 T7 缺少埋点 T2 缓存调用 T3 T8 T4 网络延时 数据库调用 调用链A 调用链B 调用链C 调用链D Total DB1 Read/m write/m 28453 4421 544 22 12821 0 9987 2233 51805 6676 DB2 Read/m write/m 19611 43643 500 1022 12821 25642 5521 13276 38453 83582 基于调用链的全链路分析及监控
- 6.“动态调用链路分析”的缺陷 基于埋点、或基于线程堆栈技术,只能发现实际调用的业务逻辑。大量没有埋点或 未被触发的调用逻辑则成了“失落的世界”,无法触碰。 我们看到的,只是冰山的一角
- 7.换个角度看问题的解决之道 业务 产品 架构 需求 设计 设计 软件研发是一项协作性的智力行为,所有的思考、意图、策略最终 都体现在了代码上。因此,一个系统的代码就是一本“书”,读懂 它,我们就能知道系统的“前世今生”。 问题是,我们如何“读懂”这本“书”。
- 8.我们的应对之道 一切源于源代码… 入口 关系 继承 实现 代码关系 链路关系
- 9.“静态调用链路发现”的原理及实现 Eclipse JDT • 引用(import) • 变量 • 方法 • 继承、实现 • 注释 利用JDT获得源代 码的基本结构 Method代码 扫描 • 方法内变量 通过逐行解析获 • 其它类方法调用 取代码块对外部 • 本类方法调用 方法的调用详情 • 方法内Block(IF-END IF、FOR-END FOR、WHILE…) 调用关系 (层级) • 主动调用关系 • 被动调用关系 • 过滤 生成方法调用 矩阵
- 10.“静态调用链路”的基本形态 正向调用关系: 实现关系 代码Block 注释自动提取
- 11.“静态调用链路”的基本形态 逆向调用关系: 实现关系 注释自动提取
- 12.多种日志收集方式并存的采集端架构 u 日志文件拉取 Ø 通过log4j的MDC添加traceID Ø Logstash增量拉取日志数据 u 批量消息推送 Ø 纯内存操作,无磁盘IO Ø 预统计 Ø 批量发送 u 定期采集系统性能日志 Ø CPU、磁盘、内存、SWAP、系统负载 Ø JVM堆栈、线程、GC 调用 Spring Method Interceptor Service Method 调用 Message traceID 方法名 耗时 错误信息 Dao plugin Dao Method 调用 ① 单机每秒12W消息处理效率,资源占用不超过10% ② 内存消息队列采用快速抛弃方式,防止堆积 ③ 单线程消息处理,避免资源锁 内存消息队列 预统计 Cache Sender 系统日志采集
- 13.监控数据接收服务端整体架构 日志消息接收器 日志 内存消息队列 SLA定义 时间片 内存消息队列 时间片管理器 (Thread) 分析器集合 告警分析器 预警分析器 统计分析器 存储分析器 链路分析器 … … … 全内存异步操作(避免磁盘IO、避免资源锁冲突) 代码仓库 扫描 调用关系矩阵 可视化 存储 DB DB RDB ES 查询
- 14.“静态调用链路”与监控数据的结合 与普通监控数据结合(可视化) • 离散监控数据关系化 与调用链监控数据结合(完善) • 调用关系完整化
- 15.应用场景:故障定界定位 比例异常 1.故障现象 定时任务 挤占 业务服务 API 4.原因定位 2.异常分析 多处调用 3.逆向排查
- 16.应用场景:架构优化(冗余链路清理) 1. 多余的业务逻辑链路 2. 异常处理链路 3. 旧版本兼容 无触发逻辑
- 17.静态调用链路的额外应用场景(工程效能) • 设计稿校验 设计稿 设计稿 校验 文档 •接口文档 •调用关系文档 •… 实际链路 接口文档 调用关系文档
- 18.总结 1. 回顾了APM发展的3个阶段; 2. 分析了动态调用链路的实现模式及“优缺点”; 3. 提出了扫描代码库来获取方法级别的调用链路的思路; 4. 介绍了基于Eclipse JDT的代码结构解析及调用关系分析 的技术及手段; 5. 介绍了静态调用链路的两种基本模式(正向调用及逆向 调用); 6. 应用场景介绍(监控、故障定界定位、冗余分析、文 档…)。
- 19.Q/A 联系方式: 李鑫 天弘基金(余额宝)·移动平台·首席架构师E-mail:lixin.storm@foxmail.comQQ:25893288欢迎交流: 专注于大规模分布式应用及治理、中间件云化及服务化 (PaaS)、APM监控、基础开发平台、移动应用平台、企业 架构等技术领域。 个人公众号
- 20.THANK YOU