架构师成长与实战精华
章节导言:架构师的终极命题
架构课从"架构的定义与本质"出发,历经设计原则、高性能模式、高可用模式、可扩展架构、开源选型与架构演进等篇章,最终回到了一个关于"人"的终极命题:如何才能从工程师成长为架构师?如何在实战中验证和提升架构能力?
两条系列课程的加餐、特别放送与结束语,共同回答了这一命题。华仔的"从0开始学架构"系列从成长路径、能力模型、学习方法、必读书单等维度勾勒了架构师的成长蓝图;许式伟的"架构课"系列则从极限思维、架构内功、规格驱动等维度揭示了架构能力的本质。两者一表一里,共同构成了架构师修炼的完整图景。
核心问题:
- 架构师需要成为"全才"吗?如果不是全才,架构师的核心能力模型是什么?
- 从工程师到架构师的成长路径中,每个阶段的关键突破点是什么?
- 如何高效学习开源项目?架构师应该读哪些书?
- 中台的本质是什么?它为何可能成为"皇帝的外衣"?
- 发布效率与质量如何同时保障?画图程序的整体架构如何验证架构思维?
- 什么是"极限思维"?它如何帮助架构师实现能力跃迁?
Mermaid 总览图:架构师成长与实战全景
第一部分:架构师成长之路
1.1 架构师不是全才,而是"打通经络"的人
许式伟的回答非常明确:架构师绝对不是要把自己打造为全才。 架构师掌控全局的核心思想是"打通经络,让自己的内力在全身自然流通,浑然一体"。
| 维度 | 误解 | 正解 |
|---|---|---|
| 知识广度 | 面面俱到、样样精通 | 知道存在什么、能判断边界在哪 |
| 知识深度 | 每个领域都深入 | 核心领域深入,其余按需深入 |
| 知识关联 | 孤立的知识点 | 串成完整认知,不留疑惑 |
| 实践能力 | 每个技术都能上手 | 理解限制条件,能做正确决策 |
深度注记:架构师的知识结构类似一棵树的年轮——核心领域是紧密的内核(深度),外围是松散的树皮(广度),而年轮之间的纹理就是"打通经络"的体现——知识不是孤立的点,而是彼此关联的网络。只有当知识之间形成"同频共振"时,才能在架构设计需要时"自然涌现"。
1.2 架构师的能力三层模型
架构师的能力模型可以划分为三个层次:
第一层:广度认知
- 信息科技骨架:冯·诺依曼体系 → 操作系统 → 编程语言 → 框架
- 基础架构全景:基础平台 + 桌面平台 + 服务端平台 + 服务治理
第二层:深度贯通
- 核心领域知识:深入到"能判断限制在哪"的程度
- 架构范式武器库:业务只读、接口稳定、易于组合的模块
第三层:元能力
- 需求分析能力:刨根究底找到根源需求
- 共情能力:与用户/开发/公司共情
- 反思迭代能力:认同他人,反思迭代自己
核心原则:先广度后深度,但深度不是"什么都深",而是"需要时能深"。大部分知识不需要深入细节,只在你需要的时候深入,但深入的时候要很深。
1.3 架构思维的4个核心
架构思维不是"学更多技术",而是"换一个视角看技术"。四个核心思维维度:
1. 抽象思维:从具体问题中提炼出通用模型。架构的本质是业务的正交分解,分解后的每个模块业务上仍然自洽。
2. 系统思维:从整体视角理解各部分的关联。架构师需要同时关注业务维度、技术维度、组织维度和时间维度——任何一个维度的缺失都可能导致架构失败。
3. 演化思维:架构不是一蹴而就的,而是持续演进的。核心系统保持稳定,周边系统根据需求不断替换和扩展——这正是"演化原则"的体现。
4. 权衡思维:架构设计的关键思维是判断和取舍,程序设计的关键思维是逻辑和实现。架构师必须在速度与质量、短期与长期、简洁与完整之间做出权衡。
| 策略 | 特征 | 效果 |
|---|---|---|
| 学更多技术 | 横向扩展知识面 | 知识面更广,但视角不变 |
| 看更高视角 | 纵向提升认知层次 | 视角改变,旧知识有新理解 |
| 两者结合 | 先提升视角,再扩展知识 | 最高效的学习路径 |
深度注记:架构思维的获得不是"学更多技术",而是"换一个视角看技术"。每个视角都是上一个视角的"元视角"——站在代码视角无法理解模块设计,站在模块视角无法理解系统架构,只有站在业务视角才能真正理解"为什么"。
1.4 架构师能力模型:技术能力+业务理解+沟通协调+影响力
华仔对架构师核心能力的定义更为务实:
技术能力是基础:架构师的核心能力还是技术能力,过硬的技术才是良好沟通的基础。否则单纯靠沟通技巧甚至花言巧语,一次两次可能奏效,但后面被打脸打多了,也就没人信任了。
业务理解是关键:架构师是业务和技术之间的桥梁。需要能够理解业务,结合业务不同发展阶段设计合适的架构,也要参与产品和项目决策。
沟通协调是必要条件:架构师既要"说得动老板,让老板支持自己的设计决定",又要"镇得住技术人员,让技术人员信服自己的设计选择"。由于架构设计过程中存在很多判断和选择,而且不一定都有明确量化的标准,架构师既需要专业能力过硬,又需要具备良好的沟通技巧。
影响力是放大器:通过写博客、做分享、出专栏等方式输出知识,既能加深自己对知识的理解,又能锻炼表达能力,还能建立个人影响力。
1.5 从工程师到架构师的6个阶段
华仔将程序员到架构师的成长之路分为6个典型阶段:
阶段一:工程师(1~3年)
典型特征:"在别人的指导下完成开发"。高级工程师或技术专家负责需求分析和方案设计,工程师负责编码实现。
成长指导:这是最原始的"基础技能积累阶段",主要积累基础知识,包括编程语言、编程工具、各类系统的基本使用。最好的学习方法就是找经典的书籍系统地学习,而不要遇到一个问题到网上搜搜然后就解决了事。
阶段二:高级工程师(2~5年)
典型特征:"独立完成开发",包括需求分析、方案设计、编码实现。需求分析和方案设计已经包含了"判断"和"选择",只是范围相对来说小一些。
成长指导:主要需要"积累方案设计经验"。与工程师阶段有两个典型差异:
- 深度:工程师要求知道How,高级工程师要求知道Why
- 理论:数据库表设计的3个范式、面向对象的设计模式、SOLID设计原则、缓存设计理论等
阶段三:技术专家(4~8年)
典型特征:"某个领域的专家",只要是这个领域的问题,技术专家都可以解决。与技术专家和高级工程师的典型区别是:高级工程师主要是在已有的架构框架下完成设计,而技术专家会根据需要修改、扩展、优化架构。
成长指导:主要需要"拓展技术宽度"。但拓展技术宽度并不意味着仅仅只是知道一个技术名词,而是要深入去理解每个技术的原理、优缺点、应用场景,否则就会成为传说中的"PPT技术专家"。
阶段四:初级架构师(5~10年)
典型特征:"独立完成一个系统的架构设计"。初级架构师和技术专家的典型区别是:架构师是基于完善的架构设计方法论的指导来进行架构设计,而技术专家更多的是基于经验进行架构设计。
成长指导:最主要的是形成自己的"架构设计方法论",主要手段有:
- 系统学习架构设计方法论
- 深入研究成熟开源系统的架构设计(关注点从"如何应用"转向"架构设计原理和思想")
- 结合方法论分析和总结团队内各种系统的架构设计优缺点,尝试推动架构重构
阶段五:中级架构师(8年+)
典型特征:"能够完成复杂系统的架构设计",包含高性能、高可用、可扩展、海量存储等复杂系统。与初级架构师的关键区别在于系统复杂度——中级架构师可能发现没有哪个开源项目是合适的,而需要自己开发一个全新的项目。
成长指导:最关键的是"技术深度和技术理论的积累"。以异地多活为例,之前很早知道CAP理论,但也仅仅只是知道几个概念。真正做异地多活的时候走了不少弯路,某天突然顿悟:CAP理论已经明确指出了这点,但最初学习时很难有这样深刻的理解。
阶段六:高级架构师(10年+)
典型特征:"创造新的架构模式"。谷歌创造了分布式存储架构和MapReduce,Storm创造了流式计算架构,Docker创造了容器化技术潮流。
成长指导:创造性很难教会,但可能诞生创造性架构的背景条件包括:
- 足够复杂的业务场景
- 足够强大的技术团队
- 不满足于现状的态度
- 尊重技术价值的文化
1.6 内功三力:判断力、执行力、创新力
架构师的内功主要包含三部分:
判断力:能够准确判断系统的复杂度在哪里,就像武侠高手一样,能准确地看出对手的破绽和弱点。
执行力:能够使用合适的方案解决复杂度问题,就像武侠高手一样,能选择合适的招式或者方法打败对手。
创新力:能够创造新的解决方案解决复杂度问题,就像武侠世界里,小一些的创新是创新招式,而武学宗师能够创立新的武学或者心法,例如张三丰创立太极拳一样。
这三方面的能力主要来源于经验、视野、思考:
- 经验:设计过的系统越多、系统越复杂,架构师的内功也就越强。不管是成功的架构,还是失败的架构,不管是踩坑的经验,还是填坑的经验,都将成为架构师内功的一部分。
- 视野:掌握的知识和技能越多、越深,架构师的内功也就越强。他山之石可以攻玉,站在巨人的肩膀上会看得更高更远。
- 思考:经验和视野都是外部输入,类似于我们吃的食物,但光吃还不行,还要消化,将其变为我们自己的营养。思考能够将经验和视野中的模式、判断、选择、技巧等提炼出来为我所用,也能促使我们产生新的创意和灵感。
深度注记:以"合适原则"为例,专栏讲述了架构设计要遵循"合适原则",不要过度设计。但具体什么是"合适",无法给出一个放之四海而皆准的标准,因为"合适"和业务发展、团队规模、技术实力、领导偏好等都有关。此时到底什么是"合适"就依赖架构师的"内功"了——同一个团队,A架构师认为X方案合适,B架构师认为Y方案合适,原因就在于不同的架构师"内功"不一样。
1.7 架构师成长的总指导原则
积累经验,拓宽视野,深度思考——这是从程序员到架构师成长之路的总指导原则。
认知升级的触发机制遵循一个循环:痛点(遇到问题用现有视角无法解释)→ 质疑(现有方法是否正确?)→ 探索(寻找新视角)→ 顿悟(新视角下旧问题有了新解释)→ 实践(用新视角解决实际问题)→ 验证(新视角是否确实更有效?)。验证有效则继续实践,不够则重新探索。
第二部分:架构设计实战方法论
2.1 架构设计的"三板斧":业务理解→技术选型→方案设计
架构设计的核心流程可以概括为三个关键步骤:
第一步:业务理解
- 架构的本质是业务的正交分解
- 关注每个模块的业务属性是架构的最高准则
- 任何业务总可以分解出一个核心系统和多个周边系统,不同周边系统相互正交
- 准确的需求分析是做出良好架构设计的基础,至少需要三分之一精力在需求分析上
第二步:技术选型
- 架构设计三原则:合适原则、简单原则、演化原则
- "合适原则"是最重要的——不要有问题就想着用新技术解决
- 技术选型要考虑团队能力、业务规模、技术成熟度等多重因素
- 甲方强行要求的技术不应套用三原则判断,而应视为"架构约束"
第三步:方案设计
- 先设计备选方案(通常3~5个),再评估选择
- 方案设计要区分变化点与稳定点——对稳定点做深度设计,对变化点做适度扩展
- 架构师的核心武器库:"一个个业务只读、接口稳定、易于组合的模块 + 组合的方法论"
2.2 画图程序的整体架构设计案例
画图程序(v44版本)的架构是验证"业务正交分解"理论的绝佳案例。
四类代码的分类体系
| 类别 | 颜色标记 | 定义 | 特征 |
|---|---|---|---|
| 核心系统 | 棕色 | 业务核心,不可或缺 | 去掉后系统无法完整运行 |
| 周边系统 | 黄色 | 业务的可选组件 | 去掉后系统仍可运行(但功能缩减) |
| 通用控件 | 绿色 | 与业务无关的通用界面元素 | 被周边系统引用,不直接属于业务 |
| 基础框架 | 紫色 | 第三方代码或底层框架 | 最基础的依赖 |
关键发现:画图程序的内核极小——仅 index.htm、view.js、dom.js 三个文件。去掉所有周边系统及其依赖后,程序仍可工作,只不过退化为一个只读的画图查看器(QPaintViewer)。
伤害值:量化架构质量的度量
伤害值是许式伟提出的衡量周边模块对核心系统"侵入程度"的工程度量:
- 每处对核心系统接口的引用计为1处伤害
- 如果某接口被N个周边模块共用,则每个周边模块仅分担1/N的伤害值
- 原因:被多个模块共用的接口天然更稳定,单个模块对其造成的"不稳定风险"更低
画图程序各模块的伤害值:creator/rect.js约6.4,creator/path.js约3.4,creator/freepath.js约2.6,accel/select.js约8,accel/menu.js约7。而Model层的伤害值极低——所有图形对核心系统的需求完全一样,整体伤害值仅为4,平均每种图形的伤害值为1。
深度注记:伤害值共担机制看似违反直觉——新增一个周边模块反而降低既有模块的伤害值?但这恰恰是工程测量的正确逻辑:被多个模块引用的接口=更稳定的接口。实证比主观判断更可靠。抽象出共性的业务方法,比给某个周边模块单独开绿灯要好。
核心架构原则
- 核心系统最小化:核心系统只保留不可或缺的业务逻辑,其余全部以正交的周边模块形式存在
- 周边模块正交:两个周边模块不应直接交互,如需建立联系必须通过核心系统作为中介
- 接口通用性需要实证:为特定周边模块定制接口=开绿灯,伤害值分析会立即暴露这类问题
- 组合优于继承:Shape接口的设计选择了"接口继承+组合"而非"类继承",体现Go语言的设计哲学
2.3 中台的本质与批判分析
中台承诺的价值
官方说法:可以让各业务部门保持相对的独立和分权,保证对业务的敏感性和创新性;同时用一个强大的平台来对这些部门进行总协调和支持,平衡集权与分权,并为新业务新部门提供生长的空间,从而大幅降低组织变革的成本。中台部门提炼各业务线的共性需求,最大限度地减少"重复造轮子"。
中台运作的4个现实问题
华仔基于在阿里电商中台和蚂蚁支付中台上的真实项目经验,揭示了中台运作的实际问题:
问题1:业务部门并不独立。 基于中台的业务会被分为不同优先级,大业务对中台的影响力远远大于小业务。中台抱大业务的大腿,小业务抱中台的大腿。如果小业务不服气能怎么办?没什么办法,不会存在仲裁委员会之类的机构,就算有,你去仲裁的时间都够你自己把业务实现5遍了!
问题2:中台并不总是能够提炼共性需求。 提炼共性需求主要是中台从0到1建设的时候。一旦建成后,业务方总是期望将自己的需求划为共性需求(让中台出人实现),中台总是期望先不要把需求划为共性需求(等更多业务有类似需求再抽象)。实际上几乎不太可能出现多个业务同时提出某个需求,只能又回到"优先满足大业务,拒绝小业务"的潜规则。
问题3:中台的"轮子"会不断变化。 中台确实把轮子造好了,但每隔一段时间就会把轮子换一遍。中台融合了多个相似业务的发展,如果中台支持10个业务,其中有1个业务发展很快,中台就必须跟着演进,剩余9个业务即使没有任何发展,也必须跟着被动演进!这与技术平台不同——技术平台演进的动力来源于技术更新,是可以做到不影响业务的。
问题4:中台是某类业务的中台,不是所有业务的中台。 应该叫"电商中台""支付中台""物流中台",而不应该是"阿里中台""腾讯中台"。"茅台云商"这种中台项目失败的可能性会非常高,因为电商中台和白酒业务差异太大,复用度不高。

中台的实际效果
效果1:中台的体系有什么样的功能,业务方根本不是很清楚地知道,而是很清楚地不知道。 几乎没有人能完整地知道中台里面各个域各个子系统的能力。中台提供"完整解决方案"的承诺实际上难以兑现——如果可定制化度高则可复用度低,如果可定制化度低则业务可扩展度低。
实际运作方式:业务方将自己的业务需求写出来,然后拉上各个域的产品接口人和技术接口人,一个域一个域地讨论。随便做个什么项目,拉上2030人算一般的,稍微大点的项目拉上50100人也是很正常的。

效果2:中台的所谓的"快",并没有严谨的衡量。 编码的时间确实少了,但前期的沟通和后期的联调非常耗时间。中台能够带来的效率提升主要体现在两方面:编码工作量减少,中台人员对已有类似业务和技术更熟悉。但全流程综合来看,很难判断效率到底高还是低。
事实上,"熟手开发"才是高效的真正原因——将原来类似系统的核心开发人员拉过去开发新项目,最初的代码也是从原系统拷贝过去改,开发效率一样很高。
中台的正确态度
架构设计三原则的第一条是"合适原则",这个原则对中台也适用。中台不是灵丹妙药,不要有问题就想着用中台解决;中台也不是放之四海而皆准,明确中台的适应场景和可能的坑,才能更好地落地中台。
正如提出中台的逍遥子早就告诫的:
中台并不适用于每家公司的每个阶段。在独立业务拓展期、突破期,"一定用独立团、独立师、独立旅建制来做",否则就会变成瓶颈;但发展到一定阶段,出现太多山头时,就要"关停并转、要合并同类项。问管理要效率,取消重复性建设"。
深度注记:绝大部分谈中台的都是做中台的,很少看到用中台的人出来评价。从人性的角度来讲,做中台的肯定不会说中台不好,毕竟还要靠这个恰饭。偶尔有几篇说中台有问题的文章,也很快会有人跳出来说"你们能力不行,所以中台没做好"。这种信息不对称是理解中台最大的障碍——你需要主动寻找"使用者视角"的评价,而非仅听"制造者视角"的宣传。
2.4 发布效率与质量保障方法论
发布的本质:一个置信度博弈过程
发布不是"代码写完推上去"这么简单。每一次发布本质上是一个置信度博弈:你需要在"尽早发布获取反馈"和"充分验证降低风险"之间找到最优平衡点。
发布效率的关键度量
| 度量维度 | 定义 | 意义 |
|---|---|---|
| 发布频率 | 单位时间内的发布次数 | 衡量团队交付能力 |
| 发布前置时间 | 从代码提交到上线的时间 | 衡量流程效率 |
| 发布成功率 | 无回滚的发布占比 | 衡量质量保障能力 |
| 变更失败率 | 导致线上事故的变更占比 | 衡量风险控制能力 |
| 恢复时间(MTTR) | 从事故发生到恢复的时间 | 衡量应急响应能力 |
破窗效应与发布质量
一个容易被忽视的心理学原理:破窗效应。如果发布流程中允许"紧急绕过审批""先上线再补测试"等行为,就是在释放"规矩可以打破"的信号。久而久之,流程的权威性下降,质量保障形同虚设。任何例外都必须被追踪和关闭,不能成为新的常态。
灰度发布策略对比
蓝绿部署:旧版本和新版本同时存在,瞬间切换。优点是回滚极快,缺点是需要双倍资源。
金丝雀发布:新版本先接管5%流量,观察后逐步放量到25%、100%。优点是风险可控,缺点是发布周期较长。
滚动发布:逐台升级服务器。优点是不需要额外资源,缺点是发布期间版本不一致。
质量保障金字塔
从底到顶四层:
- 单元测试:高覆盖、快执行、低成本
- 集成测试:模块交互、中等速度
- 端到端测试:业务场景、慢执行、高成本
- 灰度验证:真实流量、最可信
关键权衡
快速回滚 vs 快速修复:默认选择快速回滚(止损优先),除非根因非常明确且修复的置信度极高。这与"先求不败,再求胜"的思想一致。
发布频率:高频发布的前提条件是完善的自动化测试覆盖、灰度发布和快速回滚能力、良好的功能开关(Feature Flag)机制。发布频率应与工程能力匹配,跳过能力建设直接追求高频发布,等于跳过安全网走钢丝。
自动化验证 vs 人工验证:自动化验证覆盖主流程和回归场景,人工验证聚焦用户体验和探索性场景。两者互补而非互斥。
三大反模式
反模式1:手动发布清单。 "发布前对照清单逐项检查"看似严谨,实则清单维护成本高易过时、人工检查容易遗漏、无法与CI/CD流程集成。正确做法是将清单中的每一项自动化。
反模式2:大爆炸式发布。 将多个功能积累到一起做一次大发布,表面上"节省发布次数",实际上变更集大问题定位困难、回滚影响面大、风险集中。正确做法是小步快跑,利用Feature Flag控制功能可见性。
反模式3:跳过灰度直接全量。 无论多有信心,灰度发布都是最后的保险。真实流量验证比任何测试环境都更可信。
第三部分:如何高效学习开源项目
3.1 学习开源项目的4个误区
- 只有开发这些开源项目的人才能真正理解——错误。要理解Redis的网络模型,不需要成为Redis的开发者,只要具备一定的网络编程基础,再通过阅读源码,都可以学习
- 项目没有用就很难深入理解——错误。理解技术原理与是否在生产环境中使用没有必然关系
- 只研究数据结构和算法就够了——错误。数据结构和算法在学习开源项目时并没有那么重要,例如Nginx使用红黑树管理定时器,绝大部分人只要知道这点就够了
- 直接读源码——错误。源码不是第一步,而是最后一步
3.2 自顶向下的5步学习法
第一步:安装——获取关键信息
安装步骤远远不止"对照手册执行命令",通过安装过程可以获取:
- 系统依赖组件:依赖的组件是系统设计和实现的基础。以Nginx为例,依赖pcre、openssl、zlib,从名字就能推测openssl与https有关,zlib与压缩有关
- 安装目录信息:Nginx安装后有conf、logs、sbin、html等目录;Redis安装后只有一个bin目录,这种极简结构会促使你思考"Redis如何配置?日志保存在哪里?"
- 系统提供的工具:Redis的redis-benchmark、redis-check-aof等工具,从名字能猜出使用场景
开源项目安装目录结构示例:
深度注记:带着问题去学习效率是最高的。安装过程中的"困惑点"(如Redis为何没有配置文件目录)恰恰是最好的学习起点。
第二步:运行——窥视系统内部机制
运行系统时需要特别关注命令行和配置文件,它们提供了两个非常关键的信息:系统具备哪些能力和系统将会如何运行。
华仔的习惯是不管三七二十一,先把所有的配置项全部研究一遍,包括配置项的原理、作用、影响,并且尝试去修改配置项然后看看系统会有什么变化。例如,将Memcache的"--conn-limit"改为1后,查看多个连接请求时Memcache会返回什么错误、记录什么日志等。
第三步:原理研究——系统性的理解
"系统性"主要体现在三个方面:
1. 关键特性的基本实现原理:每个流行的开源项目之所以能够受到大众欢迎,肯定是有一些卖点的。例如Memcache的高性能具体是怎么做到的?基于libevent实现了高性能的网络模型,加上内存管理Slab Allocator机制。
2. 优缺点对比分析:只有清楚掌握技术方案的优缺点后才算真正的掌握这门技术。典型的对比有Memcache和Redis:Memcache用多线程,Redis用单进程,各有什么优缺点?即使是Redis自身,也可以对比RDB和AOF两种模式的优缺点。
3. 原理研究的三种手段:
- 通读项目的设计文档(如Kafka的设计文档、Disruptor的设计白皮书)
- 阅读网上已有的分析文档(多方对照,比较共同点和差异点)
- Demo验证(难以查到资料时自己写Demo验证)
第四步:测试——在原理研究之后
测试一定要在原理研究之后做,不能安装完成立马就测试! 如果对系统不熟悉,很可能出现命令行、配置参数没用对,或者运行模式选择不对,导致没有根据业务特点搭建正确的环境、没有设计合理的测试用例,从而使得最终测试结果得出了错误结论。
曾经有团队安装完成MySQL 5.1后就进行性能测试,测试结果让人大跌眼镜,经过定位才发现innodb_buffer_pool_size使用的是默认值8M。
第五步:源码研究——有的放矢
源码研究的主要目的是学习原理背后的具体编码如何实现。例如Redis的RDB快照、Nginx的多Reactor模型、Disruptor如何使用volatile以及CAS来做无锁设计、Netty的Zero-Copy等。
不建议通读所有源码,想掌握每行代码的含义和作用非常耗费时间。带着明确目的去研究源码,做到有的放矢,才能事半功倍。
对于基础库,除了阅读源码外,还可以自己写个Demo调用基础库完成简单功能,然后通过调试来看具体的调用栈。
学习开源项目层次与依赖方向:
依赖的方向(由外到内):
箭头方向代表依赖的方向——依赖的应该是接口,接口在后,实现往前。
3.3 学习开源项目的5大层次
| 层次 | 关注点 | 典型问题 |
|---|---|---|
| 架构层 | 系统整体结构和模块划分 | 系统由哪些模块组成?模块间的依赖关系是什么? |
| 模块层 | 各模块的职责和接口 | 每个模块负责什么?模块间如何交互? |
| 流程层 | 关键业务流程的实现路径 | 一个请求从入口到出口经历了哪些步骤? |
| 数据结构层 | 核心数据结构的设计 | 采用了什么数据结构?为什么选择这种结构? |
| 算法层 | 关键算法的实现细节 | 核心算法是什么?时间/空间复杂度如何? |
3.4 时间分配策略
前3个步骤(安装、运行、原理研究)不管是否已经成为架构师,在研究开源项目时都必不可少。第4步(测试)可以在准备采用开源项目时才实施。第5步(源码研究)可以根据时间灵活安排。
关键建议:与其蜻蜓点水每个开源项目都去简单了解一下,还不如集中精力将一个开源项目研究通透。就算是每个季度只学习一个开源项目,积累几年后这个数量也是很可观的。而且一旦你将一个项目研究透以后,再去研究其他类似项目,会发现自己学习得非常快,因为共性的部分已经掌握了,只需要掌握新项目差异的部分即可。
3.5 学习笔记模板
每次学习开源项目时,建议按以下模板记录:
| 项目 | 版本 | 学习日期 |
|---|---|---|
| 核心特性 | ||
| 依赖组件 | ||
| 安装目录结构 | ||
| 关键配置项 | ||
| 架构概览 | ||
| 核心原理 | ||
| 优缺点 | ||
| 对比项目 | ||
| 待深入问题 |
第四部分:架构师必读书单
4.1 成长篇
| 书名 | 一句话推荐 |
|---|---|
| 《异类》 | 颠覆你对成功的认知:什么才是赢在起跑线?为何现在的富人都是大约生于1955年左右? |
| 《随机漫步的傻瓜》 | 只要看这一本书,你就能免受所有鸡汤的毒害! |
| 《一万小时天才理论》 | 1万小时理论实践版,详细阐述了1万小时天才理论的3个关键点 |
| 《情商》 | 如果你认为你的老板还不如你聪明,那你需要好好看看这本书 |
| 《优秀到不能被忽视》 | 不管是工作还是爱好,要想成功的原则是什么?很简单,"做别人愿意买单的事情"! |
| 《影响力大师》 | 天天立flag,月月打自己的脸?不是你意志力不行,而是你方法不对 |





4.2 技术篇
技术书籍的通用学习路径(以Linux后端Java程序员为例):
- 深度学习代码运行环境:Linux/UNIX操作系统
- 深入学习核心工具:Java语言
- 深度学习领域基础知识:网络编程、算法
- 广泛学习技术领域的通用成熟技术:Spring、Netty、MySQL、Redis等
| 书名 | 一句话推荐 |
|---|---|
| 《UNIX编程艺术》 | 经典书籍,结合UNIX的历史来讲UNIX设计哲学,改变你对编程的认知和理解 |
| 《UNIX网络编程(卷1)》 | 经典书籍,网络编程必读。重点是前三部分,不需要一次全部读懂 |
| 《UNIX环境高级编程》 | 经典书籍,Linux/UNIX C/C++程序员必读,Java/PHP/Python程序员也要通读一遍 |
| 《Linux系统编程》 | 和《UNIX环境高级编程》类似,Linux平台可以看这本 |
| 《TCP/IP详解(卷1)》 | 经典书籍,全面介绍TCP/IP协议栈各种协议,重点看TCP和IP部分 |
| 《算法之美》 | 讲算法非常有趣的一本书,告诉你如何将算法应用于恋爱、生活、工作 |
| 《算法设计与应用》 | 将算法与实际应用结合起来,从应用引出算法然后进行算法推理 |
| 《Java编程思想》 | 经典书籍,全面介绍Java编程,入门必备 |
| 《深入理解Java虚拟机》 | 全面理解Java虚拟机,原理介绍深入浅出,国内作者中大力推荐 |
| 《C++ Primer》 | 经典书籍,全面介绍C++编程 |





4.3 业务篇
架构师的业务理解能力要求比普通程序员更高。理解业务一方面有利于更好地设计有针对性的架构或方案,另外一方面也可以防止被产品经理坑。
| 书名 | 一句话推荐 |
|---|---|
| 《增长黑客》 | 理论体系完整,既给出了很多实践技巧,又总结了很多经验和需要避开的陷阱 |
| 《需求》 | 如何理解用户需求、如何满足用户需求、同样产品为何有的公司失败而有的公司取得了巨大成功?让我茅塞顿开 |
| 《淘宝十年产品事》 | 总结了淘宝10多年发展过程中产品遇到的各种坑和挑战,让你明白"罗马不是一天建成的" |
| 《定位》 | 告诉你如何做业务战略规划,有些偏重理论,架构师需要学习 |
| 《宝洁制胜战略》 | 结合宝洁的经验,提出了一套完善的战略规划和落地方法,架构师必备 |





4.4 《孙子兵法》与底层自然法则
《孙子兵法》成书于约公元前512年,为何在架构课中引入?因为架构设计与军事战略共享同一套底层自然法则——对客观规律的深刻洞察与尊重。
核心思想:先胜后战
《孙子兵法》的核心思想可以用四个字概括:先胜后战。在开战之前就确保胜利的条件已经具备,而不是寄望于战场上的临场发挥。
映射到架构设计:
- "庙算"→ 需求分析
- "知己知彼"→ 理解业务与理解技术约束
- "先为不可胜"→ 核心系统的稳定性设计
- "以待敌之可胜"→ 变化点预留扩展能力
五事七计:系统化评估框架
| 五事 | 军事含义 | 架构映射 |
|---|---|---|
| 道 | 上下同欲——目标一致 | 业务共识——团队对业务目标的理解一致 |
| 天 | 天时——季节气候 | 时机——技术成熟度、市场窗口 |
| 地 | 地利——地形远近 | 环境约束——基础设施、团队能力 |
| 将 | 将帅——智信仁勇严 | 架构师——技术视野+沟通能力+决策力 |
| 法 | 法制——组织编制 | 架构规范——代码规范、接口契约、流程制度 |
不可胜在己,可胜在敌
这是《孙子兵法》中最具哲学深度的一句话:
- 不可胜在己:自己不被击败这件事,完全由自己掌控——做好防御、不留破绽
- 可胜在敌:能否击败敌人,取决于敌人是否露出破绽——你无法强求,只能等待
架构映射:确保核心系统的稳定性完全在架构师的能力范围内(不可胜在己),但能否做出超越竞争对手的架构取决于市场机遇、团队执行力等外部因素(可胜在敌)。
以正合,以奇胜
"正"是基本面——稳定的架构、可靠的基础设施、成熟的开发流程。"奇"是创新——新的技术选型、非传统的架构方案、突破性的设计。
- 只有正没有奇:架构平庸,没有竞争力
- 只有奇没有正:架构不稳定,无法支撑业务
- 以正合,以奇胜:基本面扎实的前提下,在关键节点做出创新
深度注记:好的架构设计和好的军事战略,本质上都在遵循同一套规律——对客观规律的深刻洞察与尊重。理解这些跨领域的共性法则,比掌握任何具体技术框架都更有价值。"全胜"(不战而屈人之兵)对应好的架构——按时按质交付,团队不加班,系统核心稳定周边可扩展;"惨胜"(杀敌一千自损八百)对应差的架构——交付了但团队精疲力竭,到处是补丁,维护成本越来越高。
第五部分:极限思维与架构师的自我修养
5.1 架构是内功,不是知识点
许式伟的答案出人意料地朴素:架构不是知识点,而是内功。 架构思维的确非常重要,但熟读架构思维并不足以让人成为一名优秀的架构师。在架构能力上,没有最好,只有更好。
| 维度 | 知识点(武功招式) | 内功(架构能力) |
|---|---|---|
| 掌握方式 | 0或1——会就是会 | 渐进式——没有"完全掌握" |
| 可传授性 | 可以精确传授 | 只能通过实践体悟 |
| 可衡量性 | 可以考试检验 | 只能通过实战结果评判 |
| 时效性 | 可能过时 | 跨越时空 |
推论:架构课不应该从"架构思维"开始讲,而应该从"架构实践"开始讲——让读者在实践中体悟思维,而非在思维中想象实践。
5.2 极限思维:在约束中逼迫成长
许式伟分享了自己大学期间的真实经历:5人合买1台电脑,一周只能用1天多。在极有限的上机时间里,他养成了"先在纸上写代码并完成review,再到电脑上验证"的习惯。这个习惯持续了三年,最终让他能够"一遍写成Dijkstra算法的代码,无需调试"。
这不是天赋,而是极限约束下的必然结果。
极限约束不是障碍,而是能力跃迁的催化剂。在没有电脑的情况下,被迫把更多逻辑装进脑子里——这个过程训练出的"规格驱动"能力,正是架构能力的核心。
5.3 规格为先而非实现为先
不少技术人员连函数规格都想不清楚——他们关心"怎么实现",却不关心"接口规格是什么样的、接口规格是否符合函数的业务语义"。
| 状态 | 特征 | 后果 |
|---|---|---|
| 实现为先(错误) | 关心怎么实现,忽略接口规格 | 不理解业务语义,架构能力停滞 |
| 规格为先(正确) | 先谈规格合不合理,是否存在多余依赖 | 业务范畴合理,架构能力持续提升 |
正确姿态:不要动不动问"怎么实现"。要首先谈"这个规格合不合理、是否存在多余的依赖"。进一步来说,要多去谈"这个函数(或软件实体)的业务范畴合不合理、是否应该换一个切分的姿势"。
5.4 反复打磨优于追逐新系统
| 策略 | 满足感 | 架构能力提升 |
|---|---|---|
| 追逐新系统 | 高(每次都是新挑战) | 低(重复犯错,没有深度) |
| 反复打磨既有系统 | 低(看似原地踏步) | 高(每次打磨都有新发现) |
如果你一年前实现的系统今天仍然很满意,那就需要警醒——因为这一年你在原地踏步。在架构能力上,没有最好,只有更好。新系统让你"从零开始犯错",旧系统让你"在约束中发现问题"——后者才是架构能力的真正训练场。
5.5 博学 vs 同频共振
有些人看起来博学多才、头头是道,但真做架构时完全想不到他的"博学"。为什么?
| 状态 | 特征 | 问题 |
|---|---|---|
| 博学但不同频 | 知识是孤立的点 | 需要时"想不到" |
| 同频共振 | 知识融入思维体系 | 需要时"自然涌现" |
消化基础架构的过程很慢、很苦,但只有让基础架构完全融入自己的思维体系、实现同频共振,才有可能在架构设计需要时"想到它们"。浮光掠影的"博学"看似高效,实则无用。
5.6 放下技术人的身段
"放下技术人的身段"不是"放弃技术判断力",而是:
- 不要在不了解背景的情况下随意推翻别人写的代码——理由可能仅仅是不符合你的个人风格
- 但也不能完全看不到项目的问题——这往往是受限于个人能力
- 正确姿态:认同他人,反思迭代自己——先理解"为什么这样写",再判断"是否需要改"
共情能力是架构师的软实力:
- 与用户共情:理解用户的所思所想,做出用户真正需要的产品
- 与开发人员共情:理解技术人的所思所想,做出可落地的架构设计
- 与公司共情:理解公司的发展诉求,做出符合商业目标的决策
5.7 三个坚持:梦想、学习、输出
华仔在专栏结束时分享了三个"坚持":
坚持梦想:几乎每个技术人员心中都有一个架构师的梦想。既然是巅峰,就像登山一样,必然会有一段很长的路,路途中也会有很多的障碍和迷茫。但所有这些问题都是正常的,也是必须的。所谓成长,其实就是不断学习、不断踩坑、不断填坑的过程。
坚持学习:从工程师成长为架构师的过程,就是一个不断学习的过程——学基础知识、学理论知识、学业界新的技术、研究开源系统、研究业界实践,既要有技术广度,又要有技术深度。但这就是技术的趣味所在,总是有更好的、更新的、更厉害的东西出来。
坚持输出:输出就是把你所学到的东西再传授给他人,包括培训、演讲、写博客、写书等。很多东西感觉自己学了也懂了,但一旦跟别人交流有些问题就可能回答不上来,或者一写博客就发现其实还有很多细节没有考虑。输出还能锻炼表达能力、临场反应能力——这是大多数技术人员比较欠缺但又比较关键的能力。
深度注记:写博客是提升技术的最佳方法之一——既能够加深自己对知识的理解,又能够锻炼表达能力,还能够磨练意志力(坚持写很不容易),一举三得。某个方面的博客写多了,也许哪天你也能够出一个专栏。
总结表格:架构师成长与实战核心要点
| 主题 | 核心观点 | 关键行动 |
|---|---|---|
| 架构师能力模型 | 不是全才,而是"打通经络" | 先广度后深度,按需深入但深入时极深 |
| 成长6阶段 | 每个阶段有不同的突破重点 | 工程师积累基础,高级工程师积累设计经验,技术专家拓展宽度,初级架构师形成方法论 |
| 内功三力 | 判断力+执行力+创新力 | 积累经验、拓宽视野、深度思考 |
| 架构思维4核心 | 抽象+系统+演化+权衡 | 先提升视角再扩展知识,从"怎么做"到"为什么" |
| 画图程序实战 | 正交分解+伤害值量化 | 核心系统最小化,周边模块正交,接口通用性需要实证 |
| 中台批判 | 合适原则为王 | 不要有问题就想着用中台解决,明确适用场景和可能的坑 |
| 发布质量 | 速度与质量不是对立面 | 灰度发布+快速回滚+自动化验证+Feature Flag |
| 学习开源项目 | 自顶向下5步法 | 前3步必做,源码最后,集中精力研究透一个项目 |
| 必读书单 | 成长+技术+业务三维 | 经典书籍系统学习,不要遇到问题才搜 |
| 极限思维 | 约束是能力跃迁的催化剂 | 规格为先,反复打磨,同频共振 |
| 三个坚持 | 梦想+学习+输出 | 坚持输出是最方便的提升手段 |
思考题
- 你目前处于架构师成长的哪个阶段?该阶段的关键突破点你做到了吗?
- 你的知识体系是"博学但不同频"还是"同频共振"?如何检验?
- 如果让你用伤害值的方法分析你当前负责的系统,核心系统和周边系统的伤害值分别是多少?哪些接口是"为特定模块开的绿灯"?
- 你对中台的理解是否只来自"做中台的人"的评价?你能找到"用中台的人"的真实反馈吗?
- 你最近一次学习开源项目的过程是否遵循了"自顶向下"5步法?如果跳过了某些步骤,后果是什么?
- 你是否有意识地在约束条件下训练自己的"极限思维"?如果没有,如何创造这样的约束?
- 你一年前实现的系统,今天看还满意吗?如果满意,意味着什么?
关联阅读
- 架构师心性:第57讲"心性:架构师的修炼之道"
- 架构设计优劣:第58讲"如何判断架构设计的优劣"
- 业务优先:第59讲"少谈点框架,多谈点业务"
- 架构分解:第60讲"架构分解:边界,不断重新审视边界"
- 需求分析:第17讲"需求分析(上)"、第18讲"需求分析(下)"
- 架构设计原则:第05讲"架构设计原则"
- 架构设计流程:第06讲"架构设计流程"
- 异地多活:第10讲"异地多活架构"
- 开源选型:第14讲"开源选型与架构演进"
- MVC架构:第22讲"桌面程序的架构建议"
延伸视角:架构课全景回顾——从本质到修炼的完整闭环
本文是架构课系列的最后一篇,至此,从01到23的完整知识体系已经呈现。让我们做一个全景回顾,看看所有篇章如何构成一个有机整体。
全景知识图谱
三层递进:知→行→修
第一层"知"(01-06):架构的本质是什么?设计的原则和流程是什么?这是理论基础——没有理论体系的架构设计,只能摸着石头过河,踩了一个坑就积累了一点经验,但下次换个业务换个场景,又要踩其他坑。
第二层"行"(07-14):高性能、高可用、可扩展的具体架构模式是什么?开源系统如何选型?架构如何演进?这是实践方法——理论必须通过实践验证,没有实践的架构思维只是空中楼阁。
第三层"修"(23):如何成长为架构师?如何提升架构能力?极限思维和内功修炼意味着什么?这是心性修炼——在架构能力上,没有最好,只有更好。架构是内功而非知识点,只能通过实践体悟,无法通过考试检验。
核心线索的贯穿
贯穿全部23篇的核心线索有三条:
线索一:从"怎么做"到"为什么"。第01篇提出架构的本质,第05篇给出设计原则,第06篇定义设计流程——这些都是"怎么做"。而第23篇回到"为什么"——为什么需要极限思维?为什么规格比实现更重要?为什么反复打磨比追逐新系统更有价值?这个闭环告诉我们:理解"为什么"比掌握"怎么做"更难,但也更有价值。
线索二:从"合适原则"到"内功判断"。第05篇提出"合适原则"——不要过度设计。但什么是"合适"?没有放之四海而皆准的标准。第23篇回答了这个问题:什么是"合适"依赖于架构师的"内功"——判断力、执行力、创新力,来源于经验、视野、思考。方法论给你方向,内功给你判断。
线索三:从"先胜后战"到"先求不败"。《孙子兵法》的"先胜后战"与架构课的"先设计后编码"异曲同工。"不可胜在己"对应"确保核心系统稳定"——这完全在架构师的掌控之中。"可胜在敌"对应"能否超越竞争对手取决于外部因素"——你无法强求,只能等待。这正是贯穿全课的"先求不败,再求胜"思想的终极表达。
两条系列课程的互补
华仔的"从0开始学架构"和许式伟的"架构课"提供了两种互补的视角:
- 华仔系列偏方法论:架构设计三原则、架构设计流程、架构师成长6阶段——给你明确的操作指南
- 许式伟系列偏内功修炼:正交分解、伤害值、极限思维、规格驱动——给你深层的思维方式
两者结合,才能形成完整的架构能力:方法论让你"知道该怎么做",内功让你"判断该做多少"。正如华仔所说,"知是行之始,行是知之成"——没有方法论的内功是盲目的,没有内功的方法论是空洞的。
终极命题的回答
回到开篇的核心问题:如何才能从工程师成长为架构师?
答案是:照着做,你也能成为架构师——但"照着做"不是照搬,而是在极限思维驱动下的持续修炼。 具体来说:
- 积累经验:设计过的系统越多、系统越复杂,内功越强。成功的经验和失败的教训都是养分。
- 拓宽视野:系统学习经典书籍,深入研究开源项目,了解业界最佳实践。不要只盯着自己的业务。
- 深度思考:经验和视野是"食物",思考是"消化"。没有思考的积累只是"博学但不同频"。
- 规格为先:关注接口而非实现,关注业务范畴而非技术细节,关注"为什么"而非"怎么做"。
- 极限训练:在约束条件下逼迫自己把更多逻辑装进脑子里,训练"规格驱动"的系统理解能力。
- 反复打磨:旧系统让你在约束中发现问题,新系统让你从零开始犯错。前者才是真正的训练场。
- 持续输出:写博客、做分享、教他人——输出是检验理解的最好方式,也是提升表达能力的最方便手段。
- 三个坚持:坚持梦想、坚持学习、坚持输出。10000小时,平均每天约3小时——这就是从工程师到架构师的距离。
坚持,成就技术梦想!与君共勉!