这不是一本由单一作者撰写的系统性架构教材,而是一本集体智慧的结晶。97位来自不同领域、不同背景的资深软件架构师各自贡献了一篇短文,每篇聚焦一个核心观点。这种"众包"式的写作方式使得这本书呈现出罕见的广度——从技术到管理,从沟通到决策,从团队领导到个人成长,几乎覆盖了软件架构师职业生涯的方方面面。
每一篇文章都来自真实世界的实战经验,没有学院派的理论堆砌。
开篇的几篇文章都在强调同一个主题:技术能力只是基础,沟通能力才是架构师最核心的能力。
书中有个观点令人印象深刻:架构师花费在沟通上的时间远比花费在架构设计上的时间要多。你需要与产品经理讨论需求,与团队成员解释方案,与高层管理汇报技术决策,与客户沟通技术风险。如果架构师无法有效地传递思想,再好的架构方案也只是一纸空文。
关键技巧:
"简单不意味着简陋"——这是书中反复出现的一个主题。架构师有一种天然的倾向去设计复杂的架构,因为复杂展示了自己的技术深度。但真正的智慧在于用最简单的方式解决问题。
判断标准:如果在没有口头解释的情况下,架构图无法被团队理解,那说明它太复杂了。
书中引用了一个经典比喻:好的架构像一座冰山——大多数复杂性都被隐藏在水面之下,暴露在外的部分看起来简单优雅。
软件架构师从不拥有完整的信息。一个常见的陷阱是:花太多时间去收集和分析信息,试图在决策前消除所有不确定性。但现实是,不确定性永远不会完全消失。
更好的策略是:
许多架构师都有完美主义倾向。但完美主义是架构设计的敌人。
书中提到一个概念:最优化的破坏性——当你过于追求某个维度的"完美"时,可能会在其他维度制造严重的问题。追求高可用性可能带来极高的复杂度;追求零延迟可能牺牲数据一致性;追求完全的灵活性可能让系统变得不可维护。
实用原则:先问"这个系统现在需要什么",再问"未来可能需要什么"。
整个软件架构的本质就是一套权衡(Trade-off)的艺术。没有银弹,没有免费的午餐。
书中列出了架构师需要面对的典型权衡:
核心观点:好的架构师不仅是识别权衡,还要清晰地记录权衡决策,让后来者知道当时为什么选择了A而不是B。
不少架构师在选择技术时只看当前需求,忽略了技术栈的生命周期管理。
书中提出一个实用的框架:
案例:选择微服务框架时,不能只看Demo的演示性能,还要考虑:
"没有文档化的架构决策等于没有决策"。
书中强烈建议架构师使用ADR(Architecture Decision Records) 来记录每个重要架构决策。ADR记录的是决策的上下文、考虑过的方案、最终选择以及选择理由,而不仅仅是结果。
ADR的标准格式:
ADR不仅仅是一个文档工具,更是一种架构治理机制。
现代软件架构的一个核心思想是防错性设计(Design for Failure)。这听起来有些反直觉,但一个优秀的架构师会问:"当系统出问题时会发生什么?"而不是"系统会不会出问题?"
具体实践:
案例:一个电商系统的支付模块。传统思维专注于"如何让支付成功",但架构师更应该思考"当支付服务不可用时,系统应该如何表现"——当支付失败时,订单应该如何处理?用户应该看到什么信息?这是一个比"支付成功"更重要的设计问题。
书中有一篇醒目的文章:"It's All About the Data"。在服务化架构中,架构师往往沉迷于服务拆分、接口设计、消息流转,但忽略了最核心的部分——数据。
数据导向的架构思维:
Hugo的经验:在团队推进微服务改造时,最大的坑不是服务拆分,而是数据源拆分。把一个"共享数据库"拆成多个"服务专属数据库"的过程,比预想的复杂10倍。
服务之间的接口不仅仅是代码层面的方法签名,它们是一种契约(Contract)。这个契约一旦订立,变更的成本极高。
接口设计原则:
实用建议:对于内部的微服务接口,优先使用RESTful API + JSON + OpenAPI规范,因为这些技术的心智负担低,且团队无需额外学习。
一个不能被充分测试的架构不是好架构。测试不是QA部门的职责,而是架构师在设计阶段就要考虑的因素。
架构层面的可测试性设计:
Hugo的踩坑记录:在一个遗留系统中,业务逻辑与ORM框架完全耦合,导致无法编写纯单元测试。每次测试都需要启动整个数据库和缓存层,单测执行时间从5分钟飙升到40分钟。这个教训告诉我们:让领域模型不依赖任何框架是一个值得坚持的架构原则。
书中有多篇文章探讨了架构师的领导力。不同于管理者的权责,架构师的领导力来自于技术权威和影响力,而非职位授予的权力。
架构师如何建立影响力:
这是一个值得深思的观点:如果你明天离开了团队,系统还会正常运作吗?
肯·施瓦伯(Ken Schwaber)在书中分享了一个观点:架构师的最终目标不是成为"不可或缺"的那个人,而是让系统在没有你的情况下仍能良好运转。
具体措施:
架构师存在的价值之一就是有原则地说不。当业务方提出不合理的技术需求,当团队成员想引入一个炫酷但不成熟的技术,当项目进度压力大到要牺牲架构质量时,架构师需要有勇气说"不"。
但"说不"是一门艺术:
书中有一篇文章标题就是"Learn from Everything"。技术的半衰期越来越短,今天的流行框架可能三年后就无人问津。作为架构师,持续学习不是选择,而是责任。
个人学习策略:
书中提到了康威定律(Conway's Law):系统设计会复制组织的沟通结构。如果你的团队有4个组,你的架构大概率会有4个模块。如果你的沟通是线上的,你的架构也会被线上沟通模式塑造。
作为架构师,你需要:
Hugo的经验:在公司从单体迁移到微服务的过程中,我们花了3个月做技术层面的服务拆分,但忽略了团队人员的重新组织。结果是一个分布式单体——代码拆成了多个服务,但团队还是"一个人做多个服务,一个服务多个人改"。直到我们按照"每个服务一个完整的小团队"重新组织后,微服务架构才真正发挥了价值。
架构不能只有"设计",没有"执行"。架构设计出来后,需要有治理手段确保落地执行不走样。
治理框架:
技术债务(Technical Debt)的概念由Ward Cunningham提出。书中用了整篇文章讨论这个问题。
关键观点:
技术债务分类:
| 类型 | 描述 | 影响 |
|---|---|---|
| 有意的债务 | 明知会带来维护成本,但为了速度而选择 | 可控,有计划 |
| 无意的债务 | 由于缺乏经验或知识导致的质量问题 | 需要通过培训解决 |
| 战略债务 | 为了更大的战略目标而接受的质量折衷 | 需明确记录决策 |
"YAGNI"(You Ain't Gonna Need It)原则在架构层面的应用:不要为未来可能但不确定的需求设计过于复杂的架构。
过度设计的特征:
务实的做法:做当前需求的方案时,把架构设计的"扩展点"控制在两到三个维度。如果超过三个"可能变更的方向",大概率是在预测未来。
书中有一个非常实用的建议:先把核心业务流程跑通,再优化非功能性需求。
听起来简单,但在实操中,很多架构师一上来就设计高可用、高并发、多活架构。等这些"锦上添花"的东西部署好后,PM发现核心业务逻辑有严重缺陷——浪费了大量时间在错误的方向上。
正确的节奏:
书中推荐使用4+1视图模型(Philippe Kruchten提出)来描述架构:
实践中不一定要用完整的4+1,但关键是用多个视角来描述架构——不同的利益相关者需要不同的视角。
"自动化是架构师的伙伴"——书中从自动化部署、自动化测试、自动化监控到自动化回滚,强调了一个主题:人工操作是架构可靠性的最大敌人。
自动化优先级:
有效的版本管理应该覆盖:
核心原则:任何变更都要有版本追踪,任何版本都要可回溯。
以下是从书中97篇文章中摘录的核心观点(按主题归类):
作为一个在国内互联网公司实践微服务架构的从业者,有几个观点让我产生了强烈共鸣:
"先理解,再构建"——曾经不止一次踩过这个坑。接到需求后直接开干,设计了一个看起来很酷的架构,但做出来后用户根本不需要。现在我会先花30%的时间做需求理解和领域建模。
"关注部署"——如果系统部署不上去,或者部署后无法运维,那前面的所有设计都是零。微服务架构尤其如此,没有好的CI/CD和容器化支撑,微服务就是噩梦。
"保持简单"——在团队的早期项目中使用了CQRS+Event Sourcing架构。不是因为这个架构不好,而是团队只有5个人,学习成本和维护成本远超价值。后来回退到传统的CRUD+REST API,生产力提升了一个数量级。
基于书中97篇文章,我梳理出个人的架构原则清单:
这本书的特点是每篇文章独立成篇,不依赖前后文。因此推荐的读法是:
如果你对本书中的某些观点感兴趣,以下书籍可以提供更深入的探讨:
《架构师应该知道的97件事》不是一本"教你怎么做"的指南,而是一本"应该想什么"的启发集。它能让每一位软件架构师在繁忙的工作中停下来思考:我是不是在用正确的方式做正确的事?
97篇文章中,可能有50篇你今天就用得上,有30篇能为你的长期发展提供方向,剩下的17篇可能要等你遇到了特定场景才会真正理解。
📚 架构师书架系列 | 本书是软件架构师必读的经典入门读物
最后更新:2026年5月