{T}

架构师成长与实战精华

章节导言:架构师的终极命题

架构课从"架构的定义与本质"出发,历经设计原则、高性能模式、高可用模式、可扩展架构、开源选型与架构演进等篇章,最终回到了一个关于"人"的终极命题:如何才能从工程师成长为架构师?如何在实战中验证和提升架构能力?

两条系列课程的加餐、特别放送与结束语,共同回答了这一命题。华仔的"从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.htmview.jsdom.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。

深度注记:伤害值共担机制看似违反直觉——新增一个周边模块反而降低既有模块的伤害值?但这恰恰是工程测量的正确逻辑:被多个模块引用的接口=更稳定的接口。实证比主观判断更可靠。抽象出共性的业务方法,比给某个周边模块单独开绿灯要好。

核心架构原则

  1. 核心系统最小化:核心系统只保留不可或缺的业务逻辑,其余全部以正交的周边模块形式存在
  2. 周边模块正交:两个周边模块不应直接交互,如需建立联系必须通过核心系统作为中介
  3. 接口通用性需要实证:为特定周边模块定制接口=开绿灯,伤害值分析会立即暴露这类问题
  4. 组合优于继承: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%。优点是风险可控,缺点是发布周期较长。

滚动发布:逐台升级服务器。优点是不需要额外资源,缺点是发布期间版本不一致。

质量保障金字塔

从底到顶四层:

  1. 单元测试:高覆盖、快执行、低成本
  2. 集成测试:模块交互、中等速度
  3. 端到端测试:业务场景、慢执行、高成本
  4. 灰度验证:真实流量、最可信

关键权衡

快速回滚 vs 快速修复:默认选择快速回滚(止损优先),除非根因非常明确且修复的置信度极高。这与"先求不败,再求胜"的思想一致。

发布频率:高频发布的前提条件是完善的自动化测试覆盖、灰度发布和快速回滚能力、良好的功能开关(Feature Flag)机制。发布频率应与工程能力匹配,跳过能力建设直接追求高频发布,等于跳过安全网走钢丝。

自动化验证 vs 人工验证:自动化验证覆盖主流程和回归场景,人工验证聚焦用户体验和探索性场景。两者互补而非互斥。

三大反模式

反模式1:手动发布清单。 "发布前对照清单逐项检查"看似严谨,实则清单维护成本高易过时、人工检查容易遗漏、无法与CI/CD流程集成。正确做法是将清单中的每一项自动化。

反模式2:大爆炸式发布。 将多个功能积累到一起做一次大发布,表面上"节省发布次数",实际上变更集大问题定位困难、回滚影响面大、风险集中。正确做法是小步快跑,利用Feature Flag控制功能可见性。

反模式3:跳过灰度直接全量。 无论多有信心,灰度发布都是最后的保险。真实流量验证比任何测试环境都更可信。


第三部分:如何高效学习开源项目

3.1 学习开源项目的4个误区

  1. 只有开发这些开源项目的人才能真正理解——错误。要理解Redis的网络模型,不需要成为Redis的开发者,只要具备一定的网络编程基础,再通过阅读源码,都可以学习
  2. 项目没有用就很难深入理解——错误。理解技术原理与是否在生产环境中使用没有必然关系
  3. 只研究数据结构和算法就够了——错误。数据结构和算法在学习开源项目时并没有那么重要,例如Nginx使用红黑树管理定时器,绝大部分人只要知道这点就够了
  4. 直接读源码——错误。源码不是第一步,而是最后一步

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程序员为例):

  1. 深度学习代码运行环境:Linux/UNIX操作系统
  2. 深入学习核心工具:Java语言
  3. 深度学习领域基础知识:网络编程、算法
  4. 广泛学习技术领域的通用成熟技术: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步必做,源码最后,集中精力研究透一个项目
必读书单成长+技术+业务三维经典书籍系统学习,不要遇到问题才搜
极限思维约束是能力跃迁的催化剂规格为先,反复打磨,同频共振
三个坚持梦想+学习+输出坚持输出是最方便的提升手段

思考题

  1. 你目前处于架构师成长的哪个阶段?该阶段的关键突破点你做到了吗?
  2. 你的知识体系是"博学但不同频"还是"同频共振"?如何检验?
  3. 如果让你用伤害值的方法分析你当前负责的系统,核心系统和周边系统的伤害值分别是多少?哪些接口是"为特定模块开的绿灯"?
  4. 你对中台的理解是否只来自"做中台的人"的评价?你能找到"用中台的人"的真实反馈吗?
  5. 你最近一次学习开源项目的过程是否遵循了"自顶向下"5步法?如果跳过了某些步骤,后果是什么?
  6. 你是否有意识地在约束条件下训练自己的"极限思维"?如果没有,如何创造这样的约束?
  7. 你一年前实现的系统,今天看还满意吗?如果满意,意味着什么?

关联阅读

  • 架构师心性:第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阶段——给你明确的操作指南
  • 许式伟系列偏内功修炼:正交分解、伤害值、极限思维、规格驱动——给你深层的思维方式

两者结合,才能形成完整的架构能力:方法论让你"知道该怎么做",内功让你"判断该做多少"。正如华仔所说,"知是行之始,行是知之成"——没有方法论的内功是盲目的,没有内功的方法论是空洞的。

终极命题的回答

回到开篇的核心问题:如何才能从工程师成长为架构师?

答案是:照着做,你也能成为架构师——但"照着做"不是照搬,而是在极限思维驱动下的持续修炼。 具体来说:

  1. 积累经验:设计过的系统越多、系统越复杂,内功越强。成功的经验和失败的教训都是养分。
  2. 拓宽视野:系统学习经典书籍,深入研究开源项目,了解业界最佳实践。不要只盯着自己的业务。
  3. 深度思考:经验和视野是"食物",思考是"消化"。没有思考的积累只是"博学但不同频"。
  4. 规格为先:关注接口而非实现,关注业务范畴而非技术细节,关注"为什么"而非"怎么做"。
  5. 极限训练:在约束条件下逼迫自己把更多逻辑装进脑子里,训练"规格驱动"的系统理解能力。
  6. 反复打磨:旧系统让你在约束中发现问题,新系统让你从零开始犯错。前者才是真正的训练场。
  7. 持续输出:写博客、做分享、教他人——输出是检验理解的最好方式,也是提升表达能力的最方便手段。
  8. 三个坚持:坚持梦想、坚持学习、坚持输出。10000小时,平均每天约3小时——这就是从工程师到架构师的距离。

坚持,成就技术梦想!与君共勉!