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

一、 软件架构风格

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

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

相关推荐
郑州光合科技余经理6 小时前
同城O2O系统架构解析:中台化如何赋能本地生活服务
java·开发语言·javascript·人工智能·系统架构·php·生活
想用offer打牌6 小时前
一站式了解全局分布式生成ID方案
分布式·后端·面试·架构·系统架构·开源
BullSmall17 小时前
Reactor 多线程模型
系统架构
哈库纳玛塔塔1 天前
方言系统架构演进:从分离到统一
系统架构
套码汉子1 天前
软件架构的本质:以简单之道应对复杂系统
架构·系统架构
毕设源码-邱学长1 天前
【开题答辩全过程】以 基于Android的健康码系统架构为例,包含答辩的问题和答案
android·系统架构
Ulyanov1 天前
Python射击游戏开发实战:从系统架构到高级编程技巧
开发语言·前端·python·系统架构·tkinter·gui开发
xuyuan19981 天前
超越Selenium:自动化测试框架Cypress在现代前端测试中的卓越实践(windows版本)三
前端·windows·测试工具·系统架构·cypress
七牛云行业应用3 天前
重构实录:我删了 5 家大模型 SDK,只留了 OpenAI 标准库
python·系统架构·大模型·aigc·deepseek