系统架构设计师常见高频考点总结之软件架构设计

一、 软件架构风格

这是架构考试中最基础也是最重要的部分,需要掌握各种风格的定义、优缺点及适用场景。

  1. 分层架构

    • 定义:将系统垂直划分为若干层(如 MVC 的表现层、业务层、数据层)。

    • 优点:结构清晰、职责分离、易于维护和扩展。

    • 缺点 (重点记忆):性能损耗 (请求必须穿过每一层)、级联修改(改底层可能影响上层)、代码冗余。

    • 适用:企业级应用、Web 应用。

  2. 管道-过滤器风格

    • 特征:强调数据像水流一样处理,处理过程有顺序性。

    • 适用:批处理系统、编译器、信号处理。

  3. 微内核风格

    • 特征核心功能非常小(负责资源管理等最基础功能),扩展功能通过插件实现。

    • 错题辨析 :核心部分功能庞大,庞大的是插件集合。

    • 适用:操作系统(如 Minix)、IDE(如 Eclipse, VS Code)。

  4. 微服务架构 (Microservices)

    • 特征:服务原子化、独立部署、去中心化治理。

    • 对比单体:解决了单体的高耦合、扩展难问题,但带来了分布式系统的复杂性。

二、 质量属性与架构评估

架构设计的本质是权衡 (Trade-off),即在不同的质量属性之间做取舍。

  1. 架构设计目标

    • 核心目标:可维护性、可扩展性、性能、安全性、可靠性。

    • 非目标:单纯增加功能数量(这是需求分析的事,不是架构设计的主要目标)。

  2. 架构评估

    • 时机越早越好,不应等到开发完成后。

    • 方法 :通常采用基于场景的评估方法(如 ATAM 架构权衡分析法)。

    • 驱动力:通过质量属性场景(如"用户在1秒内收到响应")来驱动评估。

  3. 可扩展性设计

    • 原则:低耦合、高内聚、接口定义灵活。

    • 反例:将所有功能集中在一个模块是扩展性的大忌。

三、 从单体到微服务的演进

这是当前架构设计中最热门的实战考点(对应 w9, w10 题)。

1. 单体架构的痛点

  • 高耦合:牵一发而动全身,维护成本高。

  • 扩展受限:只能整体扩容,无法针对瓶颈模块(如秒杀模块)单独扩容。

  • 容错性差:一个模块崩溃可能导致整个进程挂掉。

  • 部署慢:代码量大,编译启动慢,回滚风险大。

2. 优化/改造策略

  • 业务拆分:基于 DDD(领域驱动设计)进行垂直拆分(用户服务、订单服务等)。

  • 数据库优化

    • 读写分离:主写从读。

    • 分库分表:解决海量数据存储和连接池瓶颈。

  • 缓存机制:引入 Redis/Memcached 处理热点数据,减轻数据库压力。

  • 异步解耦 :引入消息队列 (MQ) 进行削峰填谷(如秒杀场景)。

3. 微服务架构面临的挑战

如果要实施微服务,必须解决以下问题:

  • 服务划分:边界怎么定?粒度多大?

  • 数据一致性:分布式事务(Saga, TCC, 最终一致性)。

  • 通信机制:RESTful API (HTTP) 还是 RPC (Dubbo, gRPC)?

  • 服务治理

    • 注册与发现 (Eureka, Nacos)

    • 熔断与降级 (Sentinel, Hystrix):防止服务雪崩。

    • 全链路追踪 (SkyWalking, Zipkin)。

  • DevOps:自动化部署 (CI/CD)、容器化 (Docker/K8s)。

四、 系统安全性设计

遵循 "纵深防御" 原则,至少掌握以下三个层面的手段:

  1. 访问控制

    • 认证:你是谁?(密码、生物识别、多因子)。

    • 授权:你能干什么?(RBAC 角色访问控制, OAuth2.0)。

  2. 数据保护

    • 加密:传输加密 (HTTPS/TLS)、存储加密。

    • 完整性:防止篡改(数字签名、哈希校验)。

  3. 安全审计

    • 日志监控:记录谁在什么时间做了什么,用于事后追责和异常发现。

五、 关键图表

  • 模块图/包图:描述静态结构。

  • 依赖图:描述模块间的依赖关系。

  • 数据流图 (DFD):描述数据如何在系统中流动和变换(结构化分析方法)。

备考建议

  1. 理解大于死记:特别是分层架构的优缺点和单体架构的问题,试着结合你做过的项目去理解。

  2. 关注"权衡":在做选择题时,如果有选项说"某种架构完美无缺",那通常是错的。架构总是有得有失(例如:微服务提高了扩展性,但降低了简单性)。

  3. 术语积累:熟悉 DDD(领域驱动设计)、MQ(消息队列)、Sharding(分片)、Cache(缓存)等专业术语。

相关推荐
wuhen_n5 小时前
系统架构设计师(四):嵌入式系统
系统架构·嵌入式操作系统
RockHopper20259 小时前
为什么制造运营管理系统必须采用语义驱动,而不能采用自然语言驱动
系统架构·智能制造·工业数字化·isa-95·生产运营管理
成茂峰11 小时前
软考高级·系统架构设计师 | 五、软件工程基础知识
系统架构·软件工程·软考高级·架构设计
智算菩萨11 小时前
【通信设备】电视会议系统架构与技术解析
系统架构
C澒11 小时前
多场景多角色前端架构方案:基于页面协议化与模块标准化的通用能力沉淀
前端·架构·系统架构·前端框架
湘-枫叶情缘21 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
Light601 天前
智链未来:彭山物流园区从物理基建到数据智能体的全维度构建方案
人工智能·系统架构·数字孪生·智慧物流·实施路径·彭山项目
学历真的很重要1 天前
【系统架构师】第二章 操作系统知识 - 第二部分:进程与线程(补充版)
学习·职场和发展·系统架构·系统架构师
C澒1 天前
Vue 项目渐进式迁移 React:组件库接入与跨框架协同技术方案
前端·vue.js·react.js·架构·系统架构
roman_日积跬步-终至千里1 天前
【系统架构设计师-综合知识】系统知识点说明
系统架构