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

一、 软件架构风格

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

  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(缓存)等专业术语。

相关推荐
若风的雨4 小时前
【deepseek 学习】RT-Thread 简介
系统架构
学历真的很重要5 小时前
【系统架构师】第二章 操作系统知识 - 第二部分:进程管理(详解版)
学习·职场和发展·系统架构·系统架构师
智算菩萨12 小时前
【网络工程师入门】DNS域名系统的深度解读与实践应用指南
网络·网络协议·系统架构
Coder_Boy_14 小时前
企业级项目高并发监控场景-Spring Boot 集成 Graphite & InfluxDB 实战文档
java·spring boot·后端·系统架构
盈创力和20071 天前
本地可视 + 超低功耗:带 E-Ink 屏的 LoRa 温湿度终端系统架构与功耗优化实践
系统架构·电子墨水屏·lora温湿度传感器·无线温湿度监测·超低功耗设计
成茂峰1 天前
软考高级·系统架构设计师 | 三、信息系统基础知识
系统架构·软考高级·系统架构设计师
小温冲冲1 天前
系统架构设计师考试:深度精讲软件架构理论与设计实践
系统架构
犀思云1 天前
构建全球化多云网格:FusionWAN NaaS 在高可用基础设施中的工程实践
运维·网络·人工智能·系统架构·机器人
彷徨的蜗牛1 天前
未来系统架构:从静态蓝图到智能化进化的演进之路
系统架构
小温冲冲1 天前
系统架构设计师考试官方教程重点解析(基于最新版教程)
系统架构