软件工程本科生宝典
首页/课程学习引导/软件体系结构
软件工程 · 大三下

软件体系结构

Software Architecture

软件工程
课程类别
大三下
建议学期
重要性
重要程度
难度
学习难度

📖这门课到底讲什么

软件体系结构研究系统的高层结构与关键决策:架构的定义与作用、质量属性(性能、可用性、可修改性、安全性、可测试性)与场景分析、经典架构风格(分层、管道与过滤器、事件驱动、微内核、面向服务、微服务、CQRS 与事件溯源)、架构视图(逻辑、开发、运行、部署)与文档化(架构决策记录 ADR)、架构评估方法(ATAM 思路)、技术选型与演进策略,以及架构与技术债与组织的关系。它回答的是几十万行代码的系统如何保持可维护可演进的顶层问题。学完你应能为一个中等规模系统产出多个视图的架构文档、基于质量属性做出有理有据的技术选型、并对已有系统完成架构评审与演进规划。

🎯为什么必须学好

面试中系统设计环节与架构追问(如何拆分服务、如何选型、如何保证可用性与可扩展性)本质是架构能力考察;晋升到高级工程师与架构师岗位,核心能力就是从写代码转向做结构与技术决策。读研做大型软件与云原生方向,架构是研究与实践的共同语言。懂架构的人能在技术评审中提出关键问题,也能在课程设计与毕设中明显提升系统质量与答辩表现。

📌核心知识清单

  • 架构的定义与职责:结构与组件与连接件、架构决策与质量属性与约束、架构与需求的对应关系、架构腐化与技术债
  • 质量属性与场景:性能(响应时间与吞吐)、可用性(故障检测与恢复、冗余)、可修改性、可测试性、安全性、可部署性,用质量属性场景量化描述
  • 架构视图与文档化:模块视图(分解、使用、分层、类)、运行时视图(进程、并发、部署)、分配视图,架构决策记录(ADR)与 C4 模型
  • 经典架构风格:分层与严格分层、管道与过滤器、事件驱动与发布订阅、微内核与插件、面向服务、微服务、单体与模块化单体、CQRS 与事件溯源
  • 关键设计策略:高可用(负载均衡、故障转移、限流熔断降级)、高性能(缓存、异步、批处理、读写分离)、可扩展(水平扩展、无状态化、分片)、安全(认证授权、最小权限、加密)
  • 数据与一致性架构:数据库选型思路(关系与文档与图与列式)、读写分离与分库分表、Saga 与最终一致性、缓存一致性策略
  • 架构评估与演进:ATAM 思路与质量属性权衡、架构评审流程、从单体到微服务的演进路径与代价、绞杀者模式
  • 架构与组织:康威定律、团队边界与服务边界、技术选型评估(成熟度、社区、学习成本)、架构师角色与沟通、架构决策的复盘

✍️怎么学(可执行步骤)

  1. 主线读《软件架构:架构模式、特征及实践指南》(Richards 与 Ford)或《凤凰架构》,重点架构风格、质量属性与演进章节
  2. 为目标系统写一份完整架构文档:包含 C4 上下文的系统上下文图、容器图、组件图与部署图,再加三份 ADR 记录关键技术决策与理由
  3. 做系统设计模拟:每周挑一个题目(短链、秒杀、IM、外卖下单),限时三十分钟画出架构并讲清质量属性取舍,与 system-design-primer 中的参考方案对照
  4. 对开源项目做架构分析:选一个中大型项目(如商城或博客系统源码),画出分层与模块依赖图,指出可改进点与引入的架构风格,写成评审报告

📚推荐教材与书籍

软件架构:架构模式、特征及实践指南Mark Richards, Neal Ford · 经典

现代架构教材,架构风格与质量属性章节结构清晰,适合作为主线

凤凰架构:构建可靠的大型分布式系统周志明 · 经典

中文原创佳作,从服务治理到云原生演进,讲清架构演进的动因与取舍

软件系统架构:使用视点与视角构建架构(第2版)Nick Rozanski, Eoin Woods · 进阶

以视图与视角方式讲架构文档化,对写架构文档帮助极大

架构整洁之道Robert C. Martin · 进阶

讲依赖规则、边界与组件划分原则,理解分层与依赖倒置在架构层面的意义

🎬视频课程 / 公开课

软件体系结构中国大学MOOC

国内高校课程,架构风格与质量属性讲解与考试一致

以 UML 与质量属性场景为主线讲架构设计,作业要求提交架构文档

🌐网站与文档

用四层图描述架构的简洁标准,写架构文档的实用方法

微服务、单体、事件驱动与演进式架构的权威论述

微服务相关模式的系统清单,含每个模式的适用场景与取舍

🐙GitHub 开源资料

系统设计的完整学习资料与案例库,架构思维训练的最佳起点

图解架构核心概念,从缓存到消息队列到一致性都有直观图示

完整电商后端项目,可直接作为架构分析对象,观察分层与模块划分与部署结构

🧪动手实践任务

🧪

实践 1

为一个真实场景(校园二手交易平台或在线考试系统)撰写架构文档:C4 上下文、容器与组件图、部署图加三份 ADR,说明关键质量属性如何被满足

🧪

实践 2

完成两轮架构方案对比:对同一需求分别设计单体分层与微服务方案,从性能、可维护性、团队成本与运维复杂度四个维度写取舍分析

🧪

实践 3

对 mall 或同类开源项目做架构评审:整理模块依赖关系、识别循环依赖与坏味道、提出三条可落地的改进建议并给出迁移路径

🧪

实践 4

设计一次高并发场景方案:针对秒杀需求说明限流、缓存、异步化、库存扣减与防超卖的具体策略,画时序图并写出容量估算

🧾考试与面试

💼 面试会怎么考

高频:如何做系统设计(考结构化的需求澄清、容量估算、架构分层、数据模型、扩展与容错);单体与微服务的取舍标准;如何保证高可用(冗余、限流、熔断、降级、异地多活);缓存怎么设计(更新策略、穿透与雪崩与击穿的处理);数据库分库分表方案与跨分片查询;消息队列在架构中的作用与投递语义;康威定律是什么、对服务划分有何启示;架构演进中如何避免大爆炸式重构(绞杀者模式)。

📝 期末与考研怎么过

期末多为论述与设计题:给定需求产出架构方案并说明质量属性权衡;比较架构风格的优缺点与适用场景;画出某系统的多视图架构;分析给定架构的问题并给出改进;简答 ADR、康威定律、ATAM 等概念。备考方式是把每种架构风格准备一个真实案例与三条取舍,把质量属性场景模板背熟。目标八十分以上。

⚠️ 常见坑

  • 把架构等同于画几张图与技术名词堆砌,回答不出为什么这样设计和代价是什么
  • 不看需求与团队规模就上微服务与中间件,系统复杂度超出团队承受能力
  • 只关注功能与性能,忽略可维护性与可部署性等质量属性,后期改动成本极高
  • 架构文档写完不更新,与代码实际结构脱节,成为摆设
  • 盲目追求新技术(各类中间件与框架),忽略成熟度与运维成本,造成系统不稳定
→ 查看 大三下学期 的完整学期安排