很多团队在项目初期投入大量时间做”架构设计”,画出精美的架构图,然后期望它能支撑未来三到五年的业务发展。这种做法的问题在于,它假设我们能准确预测未来的需求——而这几乎是不可能的。需求在变,技术在变,团队在变,任何静态的架构设计都会在时间的冲刷下逐渐失效。
演进式架构的核心理念是:与其试图设计一个”完美”的架构,不如设计一个”能持续演进”的架构。这意味着架构决策应该是可逆的、模块间的耦合应该是松散的、系统的关键质量属性应该是可度量的。
Neal Ford 在《演进式架构》中提出的”适应度函数”概念非常实用。简单来说,适应度函数就是一组自动化的检查,用于验证架构是否仍然满足关键的质量属性。比如:模块间的循环依赖数量为零、API 响应时间 P99 低于 200ms、核心链路的代码覆盖率不低于 80%。
这些检查应该集成到 CI/CD 流水线中,每次代码提交都自动验证。当适应度函数失败时,意味着某次变更破坏了架构约束,需要在合入前修复。这比事后的架构评审有效得多——问题在产生的当下就被发现了。
架构演进的另一个关键实践是 ADR(Architecture Decision Records)。每一个重要的技术决策都应该被记录下来,包括背景、可选方案、最终选择和理由。这些记录不是为了”甩锅”,而是为了让后来者理解”为什么当时这样选择”。
我们的 ADR 模板很简单:标题、日期、状态(提议/接受/废弃/取代)、背景、决策、后果。关键是”后果”部分要诚实地写明已知的缺点和风险。当业务环境发生变化时,团队可以回顾这些记录,判断当初的决策是否仍然成立,从而有依据地推动架构演进。