.. _preface:

====
前言
====

从一次线上排查说起
====================

做过后端开发的人，大概都有过类似的经历：线上出了问题，日志里没有明显的错误，
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 这匹烈马，你需要三大护法：

.. list-table::
   :header-rows: 1
   :widths: 15 25 25 35

   * - 护法
     - 核心问题
     - 实现方法
     - AI 时代的价值
   * - **可验证性**
     - AI 写对了吗？
     - TDD（测试驱动开发）
     - 让 AI 先写测试，再写实现
   * - **可观测性**
     - 代码跑得怎样？
     - MDD（度量驱动开发）
     - 代码上线即自带监控能力
   * - **可理解性**
     - 人能看懂吗？
     - 活文档（Living Documentation）
     - 架构图、注释、运维手册

三者不是孤立的，它们相互支撑：

.. code-block:: text

              可验证性（TDD）
             "确保写对了"
                   ▲
                  / \
                 /   \
                /     \
               /  质量  \
              /   保障   \
             ▼           ▼
     可观测性（MDD）    可理解性（活文档）
    "确保跑得好"       "确保看得懂"

.. warning::

   缺少任何一个护法的后果：

   - 缺可验证性：不知道对不对，线上出问题才发现
   - 缺可观测性：出了问题定位不了，只能瞪眼
   - 缺可理解性：改不动，越改越乱，最后只能重写


谁应该读这本书
==============

本书适合以下读者：

- **后端开发工程师** (3-8 年经验)：正在或即将负责系统可观测性建设
- **SRE / DevOps 工程师**：需要构建和维护度量体系
- **AI 应用开发者**：需要监控 LLM、RAG、Agent 的性能和质量
- **技术管理者**：需要通过度量数据做出技术决策

**前置知识**：熟悉至少一种编程语言（Go/Python/Java/C++ 均可），
了解微服务基本概念，有一定的 Linux 和 Docker 使用经验。


如何阅读本书
============

本书分为五个部分，你可以根据自己的背景选择阅读路径：

.. code-block:: text

   第一部分：基础篇（第 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 面板模板
  均放在 https://github.com/walterfan/mdd 中，以供下载参考。


致谢
====

感谢合著者傅健在初版中的贡献，他的实战经验为本书奠定了坚实的基础。

感谢朋友和同事们，在日常工作中对度量驱动开发的实践和反馈，
让本书的内容不断得到验证和完善。

感谢每一位读者。如果这本书能帮助你在下一次线上故障时更快地定位问题，
少走一些弯路，那它就实现了自己的价值。

.. note::

   **关于作者**

   Walter Fan，资深软件工程师，从事音视频,中间件等服务的开发和度量体系建设工作。
   拥有十余年分布式系统开发经验，专注于微服务架构、可观测性工程和 AI 应用开发。
   技术博客：https://www.fanyamin.com
