前言#
从一次线上排查说起#
做过后端开发的人,大概都有过类似的经历:线上出了问题,日志里没有明显的错误, CPU 和内存看起来都正常,但用户就是在抱怨。你在各个服务之间来回跳转, 翻日志、加临时打印、重启服务碰运气……折腾半天,才发现问题出在一个不起眼的地方—— 也许是连接池耗尽,也许是某个下游服务的 P99 延迟悄悄翻了倍。
这种排查过程,本质上是在为缺失的度量买单。
在日常工作中,我们维护着大量的微服务,处理音视频通信中的各种复杂场景。 这些年的实践让我越来越确信一件事:代码写得再好,如果没有度量,你就是在盲人摸象。 一个完善的度量体系,能让你在问题发生的第一时间看到异常, 而不是等用户投诉了才开始排查。
度量驱动开发(Metrics Driven Development, MDD)就是这个理念的系统化实践: 每一个新服务上线前,度量代码和业务代码同等重要;每一次故障复盘, 第一个问题永远是"我们的度量为什么没有提前发现这个问题?"
这本书,就是这些年实践经验的总结。
为什么要写这本书#
2020 年,我和好朋友傅健合著了初版《微服务之道:度量驱动开发》,以 Java(Spring Boot) 为主要技术栈,聚焦微服务场景。六年过去了,技术格局发生了翻天覆地的变化:
多语言并行: Go、Python、C++、Rust 各有其生态中的度量方案
云原生崛起: Kubernetes、Service Mesh、Serverless 改变了部署和运维方式
可观测性统一: OpenTelemetry 成为 CNCF 的统一标准
AI 辅助编程: Claude、Copilot、ChatGPT 让代码生成速度提升了 10 倍
AI 应用爆发: LLM、RAG、AI Agent 带来了全新的度量挑战
尤其是最后两点。AI 能让你写代码快 10 倍,但如果没有度量护法加持, 你可能在以 10 倍速度制造技术债。而 AI 应用本身——你的 RAG 系统回答了 1000 个问题, 但你知道其中多少个答案是对的吗?你的 Agent 完成了一个任务, 但你知道它花了多少 Token、走了多少弯路吗?
这些问题,传统的 HTTP 状态码和响应时间已经无法回答。 我们需要一套全新的度量体系。
这就是本书修订的初衷:在保留 MDD 核心理念的基础上, 全面拥抱多语言、云原生和 AI 时代的度量实践。
AI 时代的三大护法#
在 AI 辅助编程时代,要驯服 AI 这匹烈马,你需要三大护法:
护法 |
核心问题 |
实现方法 |
AI 时代的价值 |
|---|---|---|---|
可验证性 |
AI 写对了吗? |
TDD(测试驱动开发) |
让 AI 先写测试,再写实现 |
可观测性 |
代码跑得怎样? |
MDD(度量驱动开发) |
代码上线即自带监控能力 |
可理解性 |
人能看懂吗? |
活文档(Living Documentation) |
架构图、注释、运维手册 |
三者不是孤立的,它们相互支撑:
可验证性(TDD)
"确保写对了"
▲
/ \
/ \
/ \
/ 质量 \
/ 保障 \
▼ ▼
可观测性(MDD) 可理解性(活文档)
"确保跑得好" "确保看得懂"
警告
缺少任何一个护法的后果:
缺可验证性:不知道对不对,线上出问题才发现
缺可观测性:出了问题定位不了,只能瞪眼
缺可理解性:改不动,越改越乱,最后只能重写
谁应该读这本书#
本书适合以下读者:
后端开发工程师 (3-8 年经验):正在或即将负责系统可观测性建设
SRE / DevOps 工程师:需要构建和维护度量体系
AI 应用开发者:需要监控 LLM、RAG、Agent 的性能和质量
技术管理者:需要通过度量数据做出技术决策
前置知识:熟悉至少一种编程语言(Go/Python/Java/C++ 均可), 了解微服务基本概念,有一定的 Linux 和 Docker 使用经验。
如何阅读本书#
本书分为五个部分,你可以根据自己的背景选择阅读路径:
第一部分:基础篇(第 1-3 章)
"为什么需要度量,度量什么,怎么设计"
→ 所有读者建议阅读
第二部分:实现篇(第 4-6 章)
"如何用代码实现度量、聚合、展示和告警"
→ 开发者重点阅读
第三部分:运维篇(第 7-8 章)
"度量驱动的运维和全程可观测性"
→ SRE/DevOps 重点阅读
第四部分:AI 篇(第 9-11 章)
"LLM、RAG、Agent 的度量体系和评估驱动开发"
→ AI 应用开发者必读
第五部分:实践篇(第 12 章)
"最佳实践、检查清单和未来趋势"
→ 所有读者建议阅读
快速路径:如果你时间有限,建议至少阅读第 1、2、8、9、12 章, 这五章涵盖了 MDD 的核心理念和 AI 时代的新实践。
本书约定#
代码示例:本书代码涵盖 Go、Python、Java、C++ 四种语言, 每章会标注代码所用语言。完整代码请访问 GitHub 仓库。
专栏标记:
💡 "避坑指南":常见错误和解决方案
🔬 "动手实验":可以在 15 分钟内完成的小实验
📝 "思考题":章末的开放性问题
配套资源:所有源代码、Docker Compose 配置、Grafana 面板模板 均放在 walterfan/mdd 中,以供下载参考。
致谢#
感谢合著者傅健在初版中的贡献,他的实战经验为本书奠定了坚实的基础。
感谢朋友和同事们,在日常工作中对度量驱动开发的实践和反馈, 让本书的内容不断得到验证和完善。
感谢每一位读者。如果这本书能帮助你在下一次线上故障时更快地定位问题, 少走一些弯路,那它就实现了自己的价值。
备注
关于作者
Walter Fan,资深软件工程师,从事音视频,中间件等服务的开发和度量体系建设工作。 拥有十余年分布式系统开发经验,专注于微服务架构、可观测性工程和 AI 应用开发。 技术博客:https://www.fanyamin.com