深入理解和认识架构设计

架构设计的科学属性与演化艺术

构设计被明确定义为一门**“不够成熟的科学”**。这一观点不仅界定了架构设计的当前属性,也解释了为什么在实际操作中它需要结合“艺术”创造力以及持续的演化过程。

1. 为什么说它是“科学”?

尽管被称为不成熟,但来源首先确认了架构设计作为一门“科学”的行业共识。从科学的角度来看,架构设计主要关注以下客观和理性的要素:

• 具体的实现技术:关注技术选型与落地。

• 实现的流程:涉及软件工程和项目管理方面的内容。

• 资源:对可用资源的评估与利用。

• 实现的方法:即方法论层面的东西。

• 改进与完善的理论支撑:因为架构并不完美,需要依靠理论支撑和方法论指导来不断改进架构。

2. 为什么说它是“不够成熟”的?

来源指出了架构设计在当前阶段表现出的“不成熟”特征,主要体现在以下三个方面:

• 基础理论不完善:目前架构设计缺乏像数学或物理那样完备的基础理论体系。

• 方法论“百花齐放”:尚未形成统一的标准,各种方法论层出不穷,意味着行业还未达成高度的标准化。

• 处于探索阶段:大家都在不断探索如何更好地进行架构设计,而非遵循既定的铁律。

3. “不成熟的科学”带来的后果与应对

正是因为作为“科学”的一面还不够成熟,来源在后续内容中强调了架构设计必须具备的其他特性来弥补这种不成熟:

• 需要“艺术”与创造力作为补充: 由于科学理论的不成熟,加上技术开发领域变化极快(新技术、新思想层出不穷),架构师经常面对没有先例的系统。因此,不能仅靠死板的公式,必须依赖创造力去解决新问题。来源建议架构师通过学习哲学、艺术来提升这种综合能力。

• 需要接受“不完美”与持续演化: 因为没有完美的科学公式可套用,架构设计被视为一个不断演化和完善的过程。它不是一蹴而就的,而是从粗略的规划开始,随着对技术和需求的理解加深,贯穿软件工程的全流程(从立项到运维)进行迭代和修正。

• 本质是“权衡”而非“求解”: 在一个成熟的科学里,问题往往有标准的最优解。但在架构设计这门“不成熟的科学”中,更多的是一种**“玩平衡的艺术”**。架构师需要在技术、成本、适用性、开发人员技能等多方关注点中进行决策和折中,以达成利益相关者的共识。

总结

在“深入理解和认识架构设计”的范畴中,将架构设计视为“不成熟的科学”,意味着我们承认它有章可循(科学性),但又不能完全依赖既定规则(不成熟性)。我们需要利用现有的经验和资源(复用经验),同时发挥主观能动性(创造力与权衡)来应对变化。

这可以类比为“烹饪”: 架构设计像是一门烹饪学。虽然它有化学和热力学的原理作为底层逻辑(科学性),有各种菜谱和烹饪流程(方法论)。但它远未达到只要按照公式通过工业流水线就能产出绝对美味的程度(不成熟)。面对不同的食材(资源/技术)和食客口味(需求/利益相关者),厨师(架构师)必须依靠经验、直觉和创造力(艺术)进行微调和火候掌握(权衡),才能做出一道各方都满意的菜肴(共识)。

架构设计的平衡艺术与创造之道

将架构设计视为一门**“创造性的艺术”**,这主要是为了弥补其作为“不成熟科学”在面对复杂多变的现实问题时的不足。

1. 为什么需要“创造力”?

架构设计之所以被定义为艺术,是因为它要求架构师具备创造性地解决新问题的能力

• 应对快速变化:技术开发领域变化极快,新技术、新思想、新方法层出不穷。架构师经常会面对没有先例的系统,或者需要采用全新的框架和解决方案。

• 填补理论空白:由于没有现成的完美公式或成熟理论可以直接套用,架构师必须依靠创造力来填补理论与实践之间的空白,去解决那些从未遇到过的挑战。

2. 核心本质:玩“平衡”的艺术

来源特别强调,架构设计的艺术性最集中地体现在它是一种**“玩平衡的艺术”**。

• 多方博弈与决策:架构设计涉及众多利益相关者(Stakeholders),他们的关注点各不相同且常有冲突。架构设计的过程就是不断进行决策、折中和平衡的过程。

• 具体的权衡案例

    ◦ 性能 vs. 成本:方案A可能性能最高但昂贵,方案C最省钱但性能差。架构师可能需要创造性地组合出方案B+C,既能接受性能又能控制成本,达成各方共识。

    ◦ 技术先进性 vs. 团队技能:选择最热门的新技术可能显得“高大上”,但如果开发团队技能储备不足,项目就会失败。架构师需要在技术理想与团队现实之间找到平衡点。

    ◦ 适用性 vs. 灵活性:是满足当前一两年的需求,还是预留未来十年的变化?这直接决定了系统的复杂度,需要艺术性的权衡。

3. 艺术的边界:是“微创新”而非“从零开始”

虽然强调创造力,但来源也对这种“艺术”进行了务实的界定,避免将其神秘化:

• 有章可循:绝大部分架构设计并不是完全从零开始的凭空捏造,而是在已有的架构体系、设计模式或开源框架上进行微调和微创新

• 经验复用:架构设计承认经验的价值。利用既有的组件和模式作为“工具箱”,能让创造过程变得更容易。

4. 如何提升这种“艺术修养”?

来源建议,为了做好这种通过直觉和创造力驱动的设计,架构师可以跨领域汲取营养:

• 学习哲学与美学:了解一些基本的哲学思想和美学知识,有助于提升架构师的综合素质和艺术修养,从而做出更好的设计决策。

总结

如果说作为“科学”的架构设计是在搭建房子的钢筋混凝土骨架,那么作为**“创造性的艺术”,架构设计更像是在进行“高级外交谈判”“室内装修设计”**。

比喻: 架构师就像一位资深的室内设计师

• 你不能改变房子的承重墙(科学与规范的限制)。

• 但客户(利益相关者)既想要奢华的视觉效果(高性能),又只想出普通装修的钱(低成本)。

• 此时,你不能仅仅依靠计算器(科学),你需要运用你的审美和创造力(艺术),通过巧妙的材质搭配和空间利用(微创新),在预算和效果之间找到一个完美的平衡点(玩平衡的艺术),最终拿出一套让全家人都点头满意的设计图(达成共识)。

架构设计:贯穿全周期的演化艺术

这一观点打破了“架构设计仅仅是画完图纸就结束”的传统误区,强调了架构设计是一个动态的、贯穿始终的过程。以下是基于来源对这一观点的详细解读:

1. 核心特征:从粗到精的迭代过程

架构设计不是静态的,也绝非**“一蹴而就”**的。

• 演化路径:通常是从一个粗略的架构设计开始,随着对需求的理解加深和项目的推进,不断进行迭代、演化,逐步细化,最终形成完善的架构。

• 持续性:它是一个不断演化和完善的过程,而不是一个单一的节点。

2. 活动范围:跨越软件工程的全流程

来源特别强调,架构设计**“一定”**是跨越软件工程(软工)全流程的,而不仅仅局限于“概要设计”或“详细设计”阶段。架构师在不同阶段通过不同程度的参与,保证架构的落地与演化:

• 立项阶段(Initiation): 架构师在此时就需要参与,进行粗略的架构规划。

    ◦ 目的:一是确认团队的技术能力是否能**“Hold住”**这个项目;二是评估大致的成本、风险和投资收益。

• 编码阶段(Coding): 这是很多人误解的地方,来源明确指出**“架构师需要参与编码”**。

    ◦ 攻坚:负责实现重点、难点或公共基础功能。

    ◦ 控盘:最重要的任务是确保开发人员按照架构设计去实现,防止“做偏”或“乱做”。

    ◦ 手段:通过不断的沟通讲解设计思想,以及代码审查(Review)来纠偏。

• 测试、部署与运维阶段: 架构师需要参与技术咨询和指导,因为架构设计本身就包含部署设计等内容。

3. 演化的动力:为了达成共识

架构设计之所以是一个持续的活动,是因为它需要不断关注所有利益相关者(包括开发人员、用户、老板等)的要求。

• 动态调整:在这个漫长的过程中,架构师需要不断地进行决策、折中和平衡,以应对各方关注点的冲突(如性能与成本的冲突)。

• 最终产物:经过这一系列持续演化和平衡后的架构,最终成为各方利益相关者的**“共识”**。

总结

将架构设计视为“持续演化的活动”,意味着架构师不能做“甩手掌柜”,只管画图不管落地。

这可以类比为“拍摄一部电影”: 架构师就像电影导演

• 立项(预演):在剧本还在筹备时(立项),导演就要评估能不能拍、预算多少(粗略规划)。

• 拍摄(编码):导演不能把分镜头脚本(设计文档)扔给摄影师和演员就回家睡觉。他必须亲临现场,指导关键戏份的拍摄(实现难点),并时刻监控监视器,确保演员的表演没有偏离剧本的初衷(防止做偏/Code Review)。

• 剪辑上映(运维):直到最后的剪辑和上映,导演都要参与把关,确保最终呈现在观众面前的作品与最初的构想保持一致。

整个过程,从构思到上映,都是导演(架构师)进行艺术创作和管理(架构设计)的持续活动。

贯穿软件工程全流程的架构设计

这一观点直接打破了传统认知中“架构设计仅限于概要设计和详细设计阶段,文档发下去就结束了”的误区。来源强调,架构师的参与程度在不同阶段可能多寡不一,但绝不会缺席任何一个环节。以下是各个阶段的具体体现:

1. 立项阶段(Initiation):决定“做不做”与“怎么算”

在项目尚未正式启动,甚至还在进行商务沟通和意向洽谈时,架构师就已经开始参与了。

  • 粗略规划:架构师需要介入进行粗略的架构规划。
  • 两大核心目的
    1. 技术兜底(可行性):确认团队自身的技术能力是否能够“Hold住”这个项目。如果公司根本没有能力完成,盲目接下项目会导致严重后果。
    2. 成本与收益评估:基于粗略的架构规划,估算大致的成本、风险以及投资收益,为立项决策提供依据。

2. 编码阶段(Coding):既要“攻坚”也要“控盘”

来源特别纠正了“架构师不用写代码”的错误观念,指出架构师不仅要参与编码,还要承担双重职责。

  • 攻坚克难:架构师需要亲自负责实现系统中的重点、难点,或者公共基础功能。
  • 确保落地(控盘):这是架构师在编码阶段最重要的任务——确保开发人员严格按照架构设计去实现,防止“做偏”或“乱做”。
    • 如果开发人员不按设计来,架构设计就失去了意义。
  • 管控手段
    1. 宣讲与沟通:把设计思想、理念和想法完整、准确地传达给开发人员。
    2. 代码审查(Review):通过不断的检查和Review,确保落地实现不出现大的偏差。

3. 测试、部署与运维阶段:技术指导

在编码完成后的后续阶段,架构师依然在场,主要提供技术咨询指导工作

  • 原因:架构设计本身就包含了部署设计等内容,因此在部署和运维阶段,架构师的指导是必不可少的。

4. 核心逻辑:利益相关者的全覆盖

之所以架构设计必须跨越全流程,是因为所有参与系统设计、开发、实现的各方人员都是**“利益相关者”**。架构设计需要关注所有利益相关者的要求,自然就必须贯穿整个流程,只是在不同阶段参与的深浅程度(多和少)不同而已。

总结

在这一范畴下,架构设计不再是绘制一张静态的蓝图,而是一场全程陪跑的马拉松

比喻: 架构师就像一位负责大型工程的总工程师

  • 立项时(勘测):他得先去现场看地基稳不稳,算算材料费够不够(可行性与成本)。
  • 施工时(编码):他不仅要亲自示范如何浇筑最关键的承重柱(攻坚难点),还得整天戴着安全帽在工地上巡视,防止工人们把墙砌歪了或者用错了钢筋(防止做偏/Review)。
  • 交房时(运维):还要告诉物业水电管道都在哪里,该怎么维护(技术指导)。 如果他只画完图纸就消失,这栋楼很可能盖成危楼。

架构设计的平衡与折中艺术

将架构设计的核心本质概括为一种**“决策与折中平衡的艺术”**(The Art of Trade-off and Balance)。

这不仅是架构师日常工作的真实写照,也是区分普通技术人员与架构师的关键思维差异。

1. 核心定义:架构设计是“玩平衡的艺术”

来源明确指出,做架构设计就是一种**“玩平衡的艺术”**。

  • 多方博弈:一个系统涉及的方面非常多,利益相关者(Stakeholders)也很庞杂,而大家的关注点往往各不相同,甚至相互冲突。
  • 决策本质:架构师的工作并非寻找唯一的“正确答案”,而是在众多关注点中不断进行决策,在冲突中寻求一个最佳的平衡点。

2. 具体的“折中与平衡”场景

来源通过三个具体的维度,生动地展示了这种艺术是如何在实际中运作的:

  • 性能 vs. 成本(Performance vs. Cost) 这是最常见的冲突。
    • 场景:方案A+B可能性能最高,但造价昂贵;方案A+C可能最省钱,但性能较差。
    • 折中:架构师可能最终选择“方案B+C”。它的性能不是最高的(但还算可以),成本也不是最低的(但也不错)。
    • 结果:这种“中间路线”反而成为了各方都能接受的最佳方案。
  • 适用性/时效性 vs. 复杂度(Applicability vs. Complexity)
    • 场景:设计方案是只需满足未来1-3年的需求,还是要考虑到未来8-10年的长远发展?
    • 折中:考虑的年限越长,预留的变化越多,方案就会越复杂。架构师必须在“当前够用”与“过度设计”之间找到平衡点。
  • 技术理想 vs. 团队现实(Technology vs. Skills)
    • 场景:架构师可能倾向于选择当前最热门、最高大上的新技术,设计出非常炫酷的架构。
    • 现实:如果团队现有的开发人员技能储备不足,根本不会用这些技术,项目就会面临落地失败的风险。
    • 折中:架构师必须抑制单纯的技术追求,选择适合团队能力水平的技术栈,在先进性与可落地性之间通过平衡来解决问题。

3. 最终目标:达成“共识”

决策与折中的最终目的,不是为了证明架构师有多聪明,而是为了达成**“共识”**。

  • 产物的本质:架构设计的产物(即架构),本质上就是经过折中平衡后的产物。
  • 利益共同体:因为照顾到了各方利益相关者的诉求(虽然每个人可能都做了一些让步),最终的架构方案成为了各方利益相关者的共识

总结

在这一范畴下,架构设计不再是简单的做算术题(1+1=2),而更像是一场复杂的**“家庭装修预算会议”**。

比喻: 架构师就像家里的**“装修主理人”**。

  • 多方冲突:男主人想要顶级的影音室(高性能),女主人想要昂贵的实木家具(高品质),但老人家希望保留旧家具以省钱(低成本),而施工队(开发团队)表示太复杂的吊顶他们做不来(技能限制)。
  • 折中艺术:你不能完全满足任何一方,否则预算会爆表或无法完工。你决定把影音室换成普通投影仪,家具采用环保板材代替实木,简化吊顶设计。
  • 达成共识:虽然每个人都退让了一步,但最终方案保证了房子既美观又实用,且没有超支,全家人都签字同意了(共识)。这就是“玩平衡的艺术”。

架构设计的本质:利益相关者的共识

明确将架构设计定义为**“系统利益相关者的共识”**。这一观点揭示了架构设计的社会学属性:它不仅仅是技术的堆砌,更是人与人之间协商的结果。

1. 共识的成因:源于“冲突”与“平衡”

架构设计之所以被视为一种共识,是因为它是在解决冲突的过程中产生的:

  • 多方诉求:架构设计需要关注所有利益相关者的要求。
  • 必然的冲突:利益相关者众多(包括参与系统设计、开发、实现的所有人员),大家的关注点各不相同,经常出现矛盾(例如高性能往往意味着高成本),。
  • 折中的产物:架构师在这些相互冲突的关注点中进行不断的决策、折中和平衡。最终形成的架构,本身就是一个折中平衡后的产物

2. 共识的本质:各方都能接受的“最大公约数”

这里的“共识”并不意味着每个人都得到了自己最想要的,而是大家都接受了最终的结果:

  • 非极致,但合适:来源举例指出,最终的方案可能性能不是最高的(妥协了技术追求),成本也不是最低的(妥协了财务预算),但它处于两者之间,既“还过得去”又“还不错”。
  • 接受即共识:正是因为这种方案照顾到了各方的底线,它反而成为了各方都能接受的方案,从而取得了共识,。

总结

将架构设计视为“利益相关者的共识”,意味着架构文档本质上是一份**“多方协议”**。

比喻: 架构设计就像是一份**“停战和平条约”“联合公报”**。

  • 战争(冲突):开发团队想用新技术(技术派),老板想省钱(成本派),运维想稳定(保守派),大家吵得不可开交。
  • 谈判(折中):架构师作为外交官,在谈判桌上斡旋。他告诉开发团队“新技术只能小范围试用”,告诉老板“为了稳定必须加预算买服务器”。
  • 条约(共识):最终大家签署的《架构设计文档》(条约),虽然没有一方完全满意(没有实现单方面的利益最大化),但大家都觉得公平且可以接受。这份文档就是各方利益博弈后达成的**“共识”**。

架构设计的经验复用与匠心工具箱

将**“承认经验的复用”**(Acknowledging the Reuse of Experience)视为架构设计的第七个重要特征。

这一观点强调了架构设计在追求创造性和应对新问题的同时,必须立足于既有的积累,反对盲目地重复造轮子。

1. 核心前提:拒绝“从零开始”

明确指出,要做出好的架构设计,经验是不可或缺的。

  • 非凭空创造:尽管架构设计需要创造力(艺术性),但不可能每次进行系统设计时都**“从零开始”**。
  • 依托既有成果:绝大部分架构设计实际上是在已有的体系上进行微调或微创新。

2. 什么是可复用的“经验资源”?

具体列举了架构师在设计过程中应当复用的几类核心资源,这些都可以被视为**“可重用的资源”**:

  • 过往案例:以前做过的类似的系统。
  • 模式:成熟的架构模式和设计模式。
  • 现成组件:已经开发好的、现成的功能组件。
  • 开源生态:优秀的开源框架等。

3. 架构师的成长路径:构建“工具箱”

承认经验复用的目的,是为了构建架构师个人的核心竞争力。

  • 积累过程:架构师需要在职业生涯中不断积累上述可重用的资源。
  • 形成工具箱:通过不断的积累,将这些模式、框架和经验转化为自己的**“工具箱”**。
  • 应对新挑战:当面对一个新的系统架构设计任务时,架构师就拥有了许多备用的工具和手段。有了这些经验和资源的积累,设计新系统就会变得**“更加容易”**。

总结

在这一范畴下,承认经验的复用意味着架构师既是设计师,也是收藏家

比喻: 架构师就像一位老中医资深工匠

  • 不从零开始:老中医开药方时,不会每次都重新去神农尝百草(从零开始),而是基于前人留下的《本草纲目》和千金方(架构模式/设计模式)。
  • 工具箱:工匠在打造新家具时,不会先去炼铁打一把锤子,而是打开随身携带的工具箱,拿出最顺手的锯子和刨子(现成组件/开源框架)。
  • 效率:正是因为他们在这个工具箱里积累了足够的工具和经验,面对疑难杂症或复杂的定制需求时,才能游刃有余地快速给出解决方案(设计变得更容易)。