![]()
编辑推荐 "谷歌(Google)和亚马逊(Amazon)等互联网巨头的崛起,开启了分布式系统在多个数据中心的数千个节点上运行的新时代。微服务则常常以指数级的规模增加了这种复杂性。调试这些系统、跟踪故障、检测瓶颈,甚至仅仅了解正在发生的事情都会变得更加困难。分布式跟踪专注于解决复杂分布式系统的这些问题。如今,分布式跟踪标准已经建立起来,我们有了更快的系统,使埋点变得不那么具有侵入性,数据变得更有价值。 Jaeger是一个流行的开源分布式跟踪系统,其创始人Yuri Shkuro在《掌握分布式跟踪:微服务和复杂系统性能分析》这本书中对其进行了全方位的讲述,包括回顾分布式跟踪的历史和理论基础;通过使用OpenTracing、W3C Trace Context和OpenCensus等开放标准提供的代码埋点技术,解决数据收集问题,并讨论了分布式跟踪基础设施的应用及其对理解和分析复杂系统带来的好处。 你将学到的东西: ■ 如何开始使用分布式跟踪系统 ■ 如何从端到端跟踪中获得优选价值 ■ 了解该领域的开放标准 ■ 了解代码埋点和操作跟踪基础设施 ■ 了解分布式跟踪在何处适合作为微服务的核心功能" 内容推荐 本书是作者基于其在Uber跟踪团队担任技术主管时的个人经历而写的。本书分4部分共14章,内容包括:为什么需要分布式跟踪、跟踪一次HotROD之旅、分布式跟踪基础、OpenTracing的埋点基础、异步应用程序埋点、跟踪标准与生态系统、使用服务网格进行跟踪、关于采样、跟踪的价值、分布式上下文传播、集成指标与日志、通过数据挖掘提炼洞见、在大型组织中实施跟踪、分布式跟踪系统的底层架构。希望读者能通过本书了解分布式跟踪及其相关应用的基本原则和设计思路,从而找到将其应用到自己的项目和系统中的有效方法。本书的目标读者包括应用程序开发人员、SRE工程师、DevOps工程师、框架和基础设施开发人员、技术经理和管理人员、跟踪团队等。 目录 I引言1 1为什么需要分布式跟踪2 微服务与云原生应用程序3 什么是可观测性5 微服务的可观测性挑战7 传统的监控工具9 指标10 日志11 分布式跟踪12 我在跟踪领域的经历14 为何编写本书17 总结18 参考资料19 2跟踪一次HotROD之旅20 先决条件21 从预打包的二进制文件运行21 从Docker镜像运行22 从源代码运行22 启动Jaeger24 初识HotROD26 架构29 数据流30 上下文日志32 span标记与日志35 确定延迟的来源37 资源使用属性50 总结53 参考资料54 3分布式跟踪基础55 想法56 请求相关性56 黑盒推理57 特定于域的模式57 元数据传播57 剖析分布式跟踪59 采样60 保留因果关系60 请求间因果关系62 跟踪模型63 事件模型63 span模型65 时钟偏差调整67 跟踪分析69 总结70 参考资料70 Ⅱ数据收集问题73 4OpenTracing的埋点基础74 先决条件76 项目源代码76 Go开发环境77 Java开发环境78 Python开发环境78 MySQL数据库78 查询工具(curl或wget)79 跟踪后端(Jaeger)79 OpenTracing80 练习1:Hello应用程序83 用Go语言实现Hello应用程序84 用Java语言实现Hello应用程序88 用Python语言实现Hello应用程序92 练习总结94 练习2:第一个跟踪94 步骤1:创建跟踪器实例94 步骤2:启动span99 步骤3:注释span102 练习总结107 练习3:跟踪函数和传递上下文108 步骤1:跟踪单个函数109 步骤2:将多个span合并为一个跟踪111 步骤3:传播进程内上下文115 练习总结123 练习4:跟踪RPC请求124 步骤1:拆解单体124 步骤2:在进程之间传递上下文127 步骤3:应用OpenTracing推荐的标记136 练习总结141 练习5:使用baggage141 在Go中使用baggage142 在Java中使用baggage142 在Python中使用baggage143 练习总结143 练习6:自动埋点143 Go中的开源埋点144 Java中的自动埋点146 Python中的自动埋点148 练习7:额外练习151 总结151 参考资料152 5异步应用程序埋点153 先决条件154 项目源代码154 Java开发环境155 Kafka、ZooKeeper、Redis与Jaeger155 TracingTalk聊天应用程序156 实现158 运行应用程序162 观察跟踪163 使用OpenTracing埋点166 Spring埋点167 tracerresolver167 Redis埋点168 Kafka埋点170 埋点异步代码178 总结183 参考资料183 6跟踪标准与生态系统184 埋点形式185 分析跟踪部署和互操作性188 跟踪的五种含义190 了解受众192 生态系统193 跟踪系统193 X-Ray、Stackdriver等194 标准项目194 总结200 参考资料201 7使用服务网格进行跟踪202 服务网格203 服务网格的可观测性206 先决条件207 项目源代码207 Java开发环境208 Kubernetes208 Istio208 Hello应用程序210 使用Istio进行分布式跟踪213 使用Istio生成服务图223 分布式上下文和路由225 总结228 参考资料228 8关于采样230 基于头部的一致性采样231 概率采样231 速率采样232 保证吞吐量的概率采样234 自适应采样235 上下文敏感的采样244 实时采样或调试采样244 如何处理过采样247 基于尾部的一致性采样249 部分采样253 总结253 参考资料253 Ⅲ从跟踪中获取价值255 9跟踪的价值256 作为知识库的跟踪257 服务图257 深度,路径感知服务图259 检测架构问题262 性能分析263 关键路径分析263 识别跟踪模式265 范例269 延迟直方图271 长期性能分析273 总结273 参考资料274 10分布式上下文传播275 布朗跟踪平面276 PivotTracing280 混沌工程283 流量标记285 生产环境测试286 生产环境调试287 在生产环境中进行开发288 总结289 参考资料289 11集成指标与日志291 可观测性的三大支柱292 先决条件294 项目源代码294 Java开发环境295 在Docker中运行服务器295 在Kibana中声明索引模式296 运行客户端297 Hello应用程序298 与指标集成299 通过跟踪埋点实现标准指标299 向标准指标中添加上下文303 上下文感知的指标API308 与日志集成309 结构化日志记录309 将日志与跟踪上下文关联起来311 上下文感知的日志API316 在跟踪系统中捕获日志316 是否需要单独的日志记录和跟踪后端318 总结319 参考资料320 12通过数据挖掘提炼洞见321 特征提取322 数据挖掘管道的组件323 跟踪后端324 跟踪完成触发器324 特征提取器325 聚合器326 特征提取练习326 先决条件328 项目源代码328 在Docker中运行服务器329 在Elasticsearch中定义索引映射330 Java开发环境331 微服务模拟器331 在Kibana中定义索引模式334 span计数作业336 跟踪完成触发器338 特征提取器340 观测趋势341 谨防推断349 历史分析350 实时分析350 总结353 参考资料353 Ⅳ部署和维护跟踪基础设施355 13在大型组织中实施跟踪356 为什么很难部署跟踪埋点357 减少采用障碍358 标准框架359 内部适配器库360 默认启用跟踪361 monorepo361 与现有的基础设施集成362 从哪里开始362 构建文化364 解释价值364 与开发人员工作流集成365 跟踪质量指标366 故障排除指南369 跳出关键路径369 总结369 参考资料370 14分布式跟踪系统的底层架构371 为什么需要自己“造轮子”372 定制和集成372 带宽成本372 把控数据373 押注新兴标准373 架构和部署模式374 基本架构:代理+收集器+查询服务374 流式架构377 多租户378 安全381 在多个数据中心运行382 监控和故障诊断384 弹性386 过采样386 调试跟踪387 数据中心故障转移导致的流量峰值387 无休止的跟踪387 长跟踪388 总结388 参考资料388 后记390 参考资料393 书评(媒体评论) "《掌握分布式跟踪:微服务和复杂系统性能分析》将使你能够上手操作和改善属于自己的分布式跟踪基础设施。通过实践练习和代码示例,你将了解如何将端到端跟踪用作强大的应用程序性能管理和分析工具。 ——谷歌SRE团队负责人" |