软件体系结构
Software Architecture
📖这门课到底讲什么
软件体系结构研究系统的高层结构与关键决策:架构的定义与作用、质量属性(性能、可用性、可修改性、安全性、可测试性)与场景分析、经典架构风格(分层、管道与过滤器、事件驱动、微内核、面向服务、微服务、CQRS 与事件溯源)、架构视图(逻辑、开发、运行、部署)与文档化(架构决策记录 ADR)、架构评估方法(ATAM 思路)、技术选型与演进策略,以及架构与技术债与组织的关系。它回答的是几十万行代码的系统如何保持可维护可演进的顶层问题。学完你应能为一个中等规模系统产出多个视图的架构文档、基于质量属性做出有理有据的技术选型、并对已有系统完成架构评审与演进规划。
🎯为什么必须学好
面试中系统设计环节与架构追问(如何拆分服务、如何选型、如何保证可用性与可扩展性)本质是架构能力考察;晋升到高级工程师与架构师岗位,核心能力就是从写代码转向做结构与技术决策。读研做大型软件与云原生方向,架构是研究与实践的共同语言。懂架构的人能在技术评审中提出关键问题,也能在课程设计与毕设中明显提升系统质量与答辩表现。
📌核心知识清单
- 架构的定义与职责:结构与组件与连接件、架构决策与质量属性与约束、架构与需求的对应关系、架构腐化与技术债
- 质量属性与场景:性能(响应时间与吞吐)、可用性(故障检测与恢复、冗余)、可修改性、可测试性、安全性、可部署性,用质量属性场景量化描述
- 架构视图与文档化:模块视图(分解、使用、分层、类)、运行时视图(进程、并发、部署)、分配视图,架构决策记录(ADR)与 C4 模型
- 经典架构风格:分层与严格分层、管道与过滤器、事件驱动与发布订阅、微内核与插件、面向服务、微服务、单体与模块化单体、CQRS 与事件溯源
- 关键设计策略:高可用(负载均衡、故障转移、限流熔断降级)、高性能(缓存、异步、批处理、读写分离)、可扩展(水平扩展、无状态化、分片)、安全(认证授权、最小权限、加密)
- 数据与一致性架构:数据库选型思路(关系与文档与图与列式)、读写分离与分库分表、Saga 与最终一致性、缓存一致性策略
- 架构评估与演进:ATAM 思路与质量属性权衡、架构评审流程、从单体到微服务的演进路径与代价、绞杀者模式
- 架构与组织:康威定律、团队边界与服务边界、技术选型评估(成熟度、社区、学习成本)、架构师角色与沟通、架构决策的复盘
✍️怎么学(可执行步骤)
- 主线读《软件架构:架构模式、特征及实践指南》(Richards 与 Ford)或《凤凰架构》,重点架构风格、质量属性与演进章节
- 为目标系统写一份完整架构文档:包含 C4 上下文的系统上下文图、容器图、组件图与部署图,再加三份 ADR 记录关键技术决策与理由
- 做系统设计模拟:每周挑一个题目(短链、秒杀、IM、外卖下单),限时三十分钟画出架构并讲清质量属性取舍,与 system-design-primer 中的参考方案对照
- 对开源项目做架构分析:选一个中大型项目(如商城或博客系统源码),画出分层与模块依赖图,指出可改进点与引入的架构风格,写成评审报告
📚推荐教材与书籍
现代架构教材,架构风格与质量属性章节结构清晰,适合作为主线
中文原创佳作,从服务治理到云原生演进,讲清架构演进的动因与取舍
以视图与视角方式讲架构文档化,对写架构文档帮助极大
讲依赖规则、边界与组件划分原则,理解分层与依赖倒置在架构层面的意义
🎬视频课程 / 公开课
国内高校课程,架构风格与质量属性讲解与考试一致
以 UML 与质量属性场景为主线讲架构设计,作业要求提交架构文档
🌐网站与文档
用四层图描述架构的简洁标准,写架构文档的实用方法
微服务、单体、事件驱动与演进式架构的权威论述
微服务相关模式的系统清单,含每个模式的适用场景与取舍
🐙GitHub 开源资料
系统设计的完整学习资料与案例库,架构思维训练的最佳起点
图解架构核心概念,从缓存到消息队列到一致性都有直观图示
完整电商后端项目,可直接作为架构分析对象,观察分层与模块划分与部署结构
🧪动手实践任务
实践 1
为一个真实场景(校园二手交易平台或在线考试系统)撰写架构文档:C4 上下文、容器与组件图、部署图加三份 ADR,说明关键质量属性如何被满足
实践 2
完成两轮架构方案对比:对同一需求分别设计单体分层与微服务方案,从性能、可维护性、团队成本与运维复杂度四个维度写取舍分析
实践 3
对 mall 或同类开源项目做架构评审:整理模块依赖关系、识别循环依赖与坏味道、提出三条可落地的改进建议并给出迁移路径
实践 4
设计一次高并发场景方案:针对秒杀需求说明限流、缓存、异步化、库存扣减与防超卖的具体策略,画时序图并写出容量估算
🧾考试与面试
💼 面试会怎么考
高频:如何做系统设计(考结构化的需求澄清、容量估算、架构分层、数据模型、扩展与容错);单体与微服务的取舍标准;如何保证高可用(冗余、限流、熔断、降级、异地多活);缓存怎么设计(更新策略、穿透与雪崩与击穿的处理);数据库分库分表方案与跨分片查询;消息队列在架构中的作用与投递语义;康威定律是什么、对服务划分有何启示;架构演进中如何避免大爆炸式重构(绞杀者模式)。
📝 期末与考研怎么过
期末多为论述与设计题:给定需求产出架构方案并说明质量属性权衡;比较架构风格的优缺点与适用场景;画出某系统的多视图架构;分析给定架构的问题并给出改进;简答 ADR、康威定律、ATAM 等概念。备考方式是把每种架构风格准备一个真实案例与三条取舍,把质量属性场景模板背熟。目标八十分以上。
⚠️ 常见坑
- 把架构等同于画几张图与技术名词堆砌,回答不出为什么这样设计和代价是什么
- 不看需求与团队规模就上微服务与中间件,系统复杂度超出团队承受能力
- 只关注功能与性能,忽略可维护性与可部署性等质量属性,后期改动成本极高
- 架构文档写完不更新,与代码实际结构脱节,成为摆设
- 盲目追求新技术(各类中间件与框架),忽略成熟度与运维成本,造成系统不稳定