软考高级系统架构设计师知识精要-软件架构设计与评估

软件架构设计与评估

本章深入探讨各种软件架构风格(如微服务、云原生),以及架构设计的质量属性评估方法(ATAM)。

1. 模块独立性 —— 聚合 (Cohesion)

【考试要点解析】 内聚和耦合是评价模块质量的一对“双子星”。高内聚是我们的终极目标。所谓高内聚,就是让一个模块“专心致志干一件事”。考试经常考这 7 种类型的排序,你得记住:功能内聚最好,比如“计算工资”模块,里面所有代码都是为了算工资;偶然内聚最差,比如把“打开文件”和“打印错误”硬塞在一个函数里,纯粹是因为它们凑巧在代码的同一行。

衡量模块内部各元素结合的紧密程度(越高越好)。

  1. 功能聚合 (最强):模块执行单一功能,各部分必不可少。
  2. 顺序聚合:前一部分输出是后一部分输入。
  3. 通信聚合:操作使用相同数据或产生相同输出。
  4. 过程聚合:动作必须按特定次序执行。
  5. 时间聚合:动作必须在同一时间内执行。
  6. 逻辑聚合:逻辑上相似但功能无关(如一个函数根据参数做不同事)。
  7. 偶然聚合 (最弱):动作之间无关系或关系松散。

2. 模块独立性 —— 耦合 (Coupling)

【考试要点解析】 低耦合是另一条准则。就是让模块之间“少联系,多独立”。考试重点是区分这几种耦合:数据耦合最好,只传几个数字或字符串;标记耦合次之,传整个结构体(虽然只用了一部分);控制耦合就不好了,传个 Flag 去指挥别人怎么干活;公共耦合很糟糕,大家共用一个全局变量,容易这就叫“牵一发而动全身”;内容耦合最差,直接跳到别人家里(代码内部)去搞事情。

度量模块间依赖程度(越低越好)。

  1. 非直接耦合 (最低):无直接关系,通过主模块调用。
  2. 数据耦合:通过数据参数交换信息。
  3. 标记耦合:传递记录信息(数据结构)。
  4. 控制耦合:传递控制信息(影响逻辑)。
  5. 外部耦合:访问同一全局简单变量。
  6. 公共耦合:访问同一公共数据区域。
  7. 内容耦合 (最高):直接访问内部信息或代码重叠。

3. 软件架构风格

【考试要点解析】 架构风格就是“盖房子的套路”。考试常在下午的论文题里让你选型。

  • 管道-过滤器:就像自来水处理厂,水进来,经过过滤、消毒、沉淀(过滤器),最后出来净水。适合批处理,但不适合要跟人互动的系统。
  • 事件驱动:就像开 Party,有人喊一嗓子(事件),感兴趣的人就去做动作。适合图形界面(GUI (Graphical User Interface, 图形用户界面))或者调试器。
  • 黑板系统:就像一群专家围着黑板解难题。语音识别就是这么干的,因为没法一下子算出来,得靠大家凑。
  • 分层架构:就像做汉堡,一层面包一层肉。Web 开发最常用,但也容易导致“穿透”问题(改底层得动上层)。
风格大类 子风格
数据流风格 批处理序列、管道-过滤器
调用/返回风格 主程序/子程序、面向对象、分层架构
独立构件风格 进程通信、事件驱动系统 (隐式调用)
虚拟机风格 解释器、规则系统
以数据为中心 数据库系统、黑板系统、超文本系统

4. 云原生架构风格

【考试要点解析】 云原生是这两年的大热点,核心意思就是应用“生在云上,长在云上”。 考试重点是它的四大支柱:微服务(拆分)、容器化(打包)、DevOps (Development and Operations, 开发运维一体化)(开发运维一体)、持续交付(快速上线)。 还得区分三种服务模式:IaaS (Infrastructure as a Service, 基础设施即服务) 是买地皮(基础设施),PaaS (Platform as a Service, 平台即服务) 是买装修好的房子(平台),SaaS (Software as a Service, 软件即服务) 是直接住酒店(软件服务)。

云计算:对用户屏蔽底层差异的分布式处理架构,资源按需服务。 特点:超大规模、虚拟化、高可靠性、高可伸缩性、低成本。

服务类型分类:

  • SaaS (软件即服务):直接提供应用程序(多租户)。 (SaaS: Software as a Service)
  • PaaS (平台即服务):提供虚拟中间件、运行环境、OS (Operating System, 操作系统)。 (PaaS: Platform as a Service)
  • IaaS (基础设施即服务):提供服务器、存储、网络。 (IaaS: Infrastructure as a Service)

部署方式:公有云、私有云、混合云。

5. 微服务 vs SOA

【考试要点解析】 这是架构选型题的必考点。微服务其实是 SOA (Service-Oriented Architecture, 面向服务的架构) 的“进化版”或“轻量版”。 SOA 像个大企业,强调部门间的协作,有个很重的总线(ESB (Enterprise Service Bus, 企业服务总线))来做翻译和协调,适合搞定那些复杂的遗留系统。 微服务 像特种部队,每个服务都很小、很独立,自己管自己,大家用简单的协议(如 REST (Representational State Transfer, 表述性状态转移))沟通。它强调“去中心化”,适合快速迭代的互联网应用。

特性 微服务 SOA (面向服务架构)
拆分粒度 细粒度,能拆则拆 粗粒度,倾向于整合
划分方式 纵向业务划分 水平分层
团队 单一组织/小团队负责 不同部门分层负责
通信 轻量级 (HTTP/REST) 企业服务总线 (ESB)
复杂度 组件小,逻辑在服务内 组件复杂,逻辑跨领域
独立性 独立开发、部署、运行 依赖共享组件

6. SOA 关键技术

【考试要点解析】 虽然微服务火了,但 SOA 的这“老三样”标准协议在银行、电信这些传统行业还是很稳的。

  • WSDL (Web Services Description Language, Web服务描述语言):是“说明书”,告诉别人你的服务能干啥、怎么调。
  • SOAP (Simple Object Access Protocol, 简单对象访问协议):是“信封”,用来装数据的,格式很严谨(XML (eXtensible Markup Language, 可扩展标记语言))。
  • UDDI (Universal Description, Discovery, and Integration, 统一描述、发现和集成):是“电话本”,用来查服务在哪儿。
  • UDDI (统一描述、发现和集成):服务注册与发现的标准。
  • WSDL (Web 服务描述语言):描述服务做什么、如何访问、位于何处。
  • SOAP (简单对象访问协议):基于 XML 的交换协议。包含封装、编码规则、RPC 协定、绑定。

7. 微服务

【考试要点解析】 微服务虽然好,但也不是万能药。优点是独立部署(改一个不用动全身)、技术自由(你想用 Java 他想用 Go 随便)。缺点是复杂,本来在一个进程里调个函数就行,现在变成网络调用了,得考虑超时、重试、熔断,还得搞分布式事务。考试常考微服务的治理组件:注册中心(如 Nacos)、配置中心、网关(Gateway)、熔断器(Sentinel)。

优势:

  • 解耦:易于小团队开发。
  • 独立:独立开发、测试、部署、运行。
  • 技术异构:不同服务可用不同技术栈/数据库。
  • 容错:故障隔离,支持降级。
  • 松耦合:易扩展。

挑战:分布式数据一致性、服务间依赖测试复杂、运维复杂。

8. MVC 架构

【考试要点解析】 MVC 是最经典的 UI 架构,核心就是“别把鸡蛋放在一个篮子里”。 Model 管数据和逻辑,View 管怎么展示,Controller 管怎么分发用户请求。 在 Java Web 里,Bean 是 Model,JSP 是 View,Servlet 是 Controller。后来演化出的 MVP 和 MVVM(Vue/React 用的)都是它的变体,核心还是分离关注点。

  • Model (模型):处理数据逻辑,存取数据库。 (J2EE: Entity Bean, Session Bean)
  • View (视图):处理数据显示。 (J2EE: JSP)
  • Controller (控制器):处理用户交互,读取视图数据,控制输入并发送给模型。 (J2EE: Servlet)

9. 缓存使用模式

【考试要点解析】 想系统快,缓存少不了。

  • Cache-Aside:最常用,就是“旁路”。业务代码自己去查缓存,没有再去查库并回填。适合读多写少。
  • Read/Write-Through:业务代码只管读写,缓存组件自己在背后搞定同步数据库的事,对业务透明。
  • Write-Behind:最激进,先写缓存就返回成功,然后异步慢慢刷到数据库。快是快,但要是断电了,数据就丢了。
  • Cache-Aside (旁路缓存):应用负责读写缓存和数据库。读多写少场景。
  • Read-Through/Write-Through (读写穿透):应用只操作缓存,缓存组件负责同步数据库。
  • Write-Behind (异步缓存写入):数据先写缓存,异步批量写数据库。性能高但有数据丢失风险。

10. 虚拟机 vs 容器

【考试要点解析】 容器(Docker)是云原生的基石。它和虚拟机的核心区别在于隔离级别。 虚拟机是“盖了一栋新房子”(操作系统级隔离),很重,启动慢。 容器是“在房子里隔了个单间”(进程级隔离),共享地基(内核),很轻,启动只要几毫秒。

对比项 虚拟机 (VM) 容器 (Container)
镜像大小 GB 级 (含 GuestOS) MB 级 (仅 Bin/Lib)
资源 按核/GB 分配 按进程动态分配
启动 分钟级 毫秒级
隔离 系统级 (OS 隔离) 进程级 (Cgroups)
伸缩 手动/慢 自动/快

11. 边云协同分类

【考试要点解析】 物联网时代,光靠云端算不过来,还得靠边缘计算。边云协同就是“云端大脑+边缘手脚”。 比如自动驾驶,车子自己(边缘)得实时判断刹车,这叫资源协同或智能协同;而云端负责收集所有车的数据来训练模型,这叫数据协同。考试会给你个场景让你分类。

  • 资源协同:边缘节点资源调度。
  • 数据协同:边缘初步分析,云端深加工。
  • 智能协同:云端训练模型,边缘执行推断。
  • 应用管理协同:云端开发测试,边缘部署运行。
  • 业务管理协同:业务编排。
  • 服务协同:SaaS 服务按需分布。

12. 负载均衡

【考试要点解析】 高并发架构的门神。 四层负载(如 LVS)工作在 TCP 层,只看 IP 和端口,转发快;七层负载(如 Nginx)工作在 HTTP 层,能看懂 URL,可以根据内容做转发。 算法里,一致性哈希是重点,特别是在缓存集群里,加减节点时能把数据迁移量降到最低。

技术层级:

  • 应用层:HTTP 重定向、反向代理 (Nginx)。
  • 传输层:DNS 负载均衡、NAT。
  • 硬件:F5。
  • 软件:LVS, Nginx, HAproxy。

算法 (静态):

  • 轮转 (Round Robin):轮流分配。
  • 加权轮转:考虑性能差异。
  • 源地址哈希:IP 哈希,保证同一 IP 访问同一服务器。

13. 软件架构复用

【考试要点解析】 复用就是“不重复造轮子”。 机会复用是“碰巧发现”这个模块以前写过,拿来用用;系统复用是“蓄谋已久”,在设计之初就规划好了哪些要复用,产品线架构就是典型的系统复用。

类型:

  • 机会复用:开发中发现可复用资产即复用。
  • 系统复用:开发前规划复用。

过程:构造/获取资产 -> 管理资产 -> 选择并复用资产。

14. REST (表述性状态转移)

【考试要点解析】 REST (Representational State Transfer, 表述性状态转移) 不是标准,是一种“风格”。它的核心是资源。 必须掌握它的无状态原则,服务器不存 Session,每次请求都带齐所有信息,这样服务器就能随便扩展。还有统一接口,用 HTTP 的标准动词(GET/POST)来操作资源。

基于 HTTP 和 XML/JSON (JavaScript Object Notation, JavaScript对象表示法) 的 Web 通信架构风格。 5 个原则:

  1. 资源抽象。
  2. 唯一资源标识 (URI (Uniform Resource Identifier, 统一资源标识符))。
  3. 通用接口 (GET, POST 等)。
  4. 操作不改变标识。
  5. 无状态操作。

15. REST API 命令

【考试要点解析】 HTTP 动词是有讲究的。 GET 是查,它是安全的,不管调多少次都不会改数据; PUT 是改,它是幂等的,调一次和调十次结果一样(全量覆盖); POST 是增,它不幂等,调两次就加了两条数据; PATCH 是局部改,只改变动的部分。

  • GET:检索资源 (幂等)。
  • POST:创建资源。
  • PUT:更新资源 (全量替换)。
  • DELETE:删除资源。
  • PATCH:部分更新。
  • HEAD:获取头信息。

16. 架构权衡分析法 (ATAM)

【考试要点解析】 架构评估是案例分析的常客。ATAM 的核心在于权衡。它不是只盯着一个指标看,而是看不同质量属性怎么打架(比如加密虽然安全了,但性能肯定会降)。它通过构建场景来分析这些冲突。

针对性能、实用性、安全性、可修改性进行评价和折中。 主要活动:场景和需求收集 -> 架构视图描述 -> 属性模型构造和分析 -> 折中。

17. 架构评估关键点

【考试要点解析】 这四个词必须分清,案例题填空必考:

  • 敏感点:牵一发而动全身的点,动一下这个参数,性能就剧烈变化。
  • 权衡点:左右为难的点,动一下这个,安全好了,性能差了。
  • 风险点:可能会暴雷的地方。
  • 非风险点:稳稳当当的地方。
  • 风险点:潜在问题的架构决策。
  • 非风险点:可接受的决策。
  • 敏感点:影响一个质量属性的特性。
  • 权衡点:影响多个质量属性的特性(通常是矛盾的,如加密增强了安全但降低了性能)。

18. 场景描述六要素

【考试要点解析】 怎么描述一个质量需求?不能光说“系统要快”。得用场景六要素:“在双 11 高峰期(环境),用户(刺激源)发起下单(刺激),订单系统(制品)在 500 毫秒内(响应度量)完成了处理(响应)。”这才是专业的描述。

  1. 刺激源:生成刺激的实体。
  2. 刺激:到达系统的条件/事件。
  3. 环境:刺激发生的条件(如过载、正常)。
  4. 制品:被激励的系统部分。
  5. 响应:采取的行动。
  6. 响应度量:对响应的度量指标(如延迟时间)。

19. 质量属性分类

【考试要点解析】 分清开发期和运行期。 开发期是给程序员看的,比如可维护性(代码好不好改)、可移植性(换个服务器能不能跑)。 运行期是给用户用的,比如性能(快不快)、可用性(稳不稳)、安全性(会不会被黑)。

开发期:易理解性、可扩展性、可重用性、可测试性、可维护性、可移植性。 运行期:性能、安全性、可伸缩性、互操作性、可靠性、可用性、鲁棒性。

20. 常见质量属性策略

【考试要点解析】 这是写论文的万金油。

  • 想提性能?加缓存、加并发、优化算法。
  • 想提可用性?搞冗余(主备)、搞心跳检测。
  • 想提安全性?加密码、查日志、搞授权。
  • 想提可修改性?解耦、用接口、配置文件。
  • 性能:优先级队列、资源调度。
  • 可用性:冗余、心跳检测。
  • 安全性:追踪审计、认证授权。
  • 可修改性:信息隐藏、接口分离。
  • 易用性:界面优化、帮助系统。

预览时标签不可点

Close

更多

Name cleared

微信扫一扫赞赏作者

Like the AuthorOther Amount

赞赏后展示我的头像

作品

暂无作品

Like the Author

Other Amount

¥

最低赞赏 ¥0

OK

Back

Other Amount

更多

赞赏金额

¥

最低赞赏 ¥0

1

2

3

4

5

6

7

8

9

0

.

二手架构师杂谈 · 目录

二手架构师杂谈

上一篇软考高级系统架构设计师知识精要-系统建模与UML设计下一篇软考高级系统架构设计师知识精要-软件测试与运行维护

Close

更多

搜索「」网络结果

Close

调整当前正文文字大小

更多

100%