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

一、 软件架构风格

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

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

相关推荐
长不大的杨瑞杰2 天前
ChatGPT 广告技术栈架构拆解:多轮意图、LLM 工具编排、ANN 召回与拍卖闭环
人工智能·chatgpt·系统架构·推荐系统·广告
艺杯羹3 天前
Windows原生软件锁设计:从暴力杀进程丢数据到零轮询事件驱动架构
windows·系统架构·开源·开源软件·内存管理·开源协议
jktantan3 天前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
艺杯羹5 天前
MCP本地服务集成避坑:从Stdio管道僵死到双向JSON-RPC稳健通信
人工智能·python·ai·系统架构·大语言模型·ai编程·mcp
奇树谦5 天前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构
无心水6 天前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师
拆房老料7 天前
DeepSeek Super-agent 架构解析:从单任务 Agent 到持续运行的任务系统
人工智能·设计模式·系统架构
Jmyd01237 天前
文物3D数字化的技术选型指南:从WW/T 0115标准到落地工程,一次讲透采集、建档、管理与展示
3d·系统架构·博物馆·数字展厅·博物馆数字化
薛定谔的猫-菜鸟程序员8 天前
软件架构设计师开发资料大全(从入门到精通)
后端·python·系统架构·flask·架构设计师
被放养的研究生8 天前
第一章 信息系统架构
系统架构·金融监管计算机类