软考-系统架构设计师 软件架构风格详细讲解

个人博客:blogs.wurp.top

一、核心概念:什么是软件架构风格?

  • 定义:软件架构风格是描述特定领域中系统组织方式的惯用模式。它提供了一组预定义的组件类型连接件类型,以及如何将它们组合在一起的约束条件
  • 通俗理解:就像是建筑的“风格”(如中式庭院、哥特式教堂、现代玻璃幕墙大厦),每种风格都有其特定的结构元素(梁、柱、拱顶)和组织规则。选择了一种风格,就决定了建筑的总体形态和特性。
  • 核心价值
    1. 设计复用:提供了经过验证的、可复用的解决方案模板。
    2. 技术栈指引:特定的风格自然对应到特定的技术框架(如微服务风格对应Spring Cloud)。
    3. 质量属性驱动不同的架构风格优先支持不同的质量属性(如高性能、高可用、可修改性)。
    4. 沟通基础:为开发团队提供了共同的架构词汇和设计蓝图。

二、经典架构风格详解

我们将架构风格分为经典基础风格现代流行风格两大类。

(一)经典基础风格

1. 分层架构 (Layered Architecture)
  • 组件。每一层是一组模块,为其上层提供服务,并作为其下层的客户端。
  • 连接件:协议或接口调用(通常为同步调用)。
  • 约束单向依赖,通常只允许上层调用下层,禁止跨层调用
  • 常见分层:表现层、业务逻辑层、数据访问层、数据库层。
  • 优点
    • 关注点分离,易于理解和开发。
    • 易于维护和测试,可以分层替换(如数据访问层从MySQL换到Oracle)。
    • 良好的可复用性,下层服务可被多个上层调用。
  • 缺点
    • 性能损耗:请求必须穿越多层。
    • 可能导致“烟囱式”架构,层与层之间紧密耦合。
  • 适用场景绝大多数企业级应用,尤其是单体或垂直拆分的系统。
2. 客户端-服务器 (Client-Server)
  • 组件服务器(提供资源或服务)、客户端(请求服务)。
  • 连接件:网络协议(如HTTP, RPC)。
  • 约束:服务器是服务的中心,多个客户端共享服务器资源。
  • 演进
    • 两层C/S:客户端 + 数据库服务器。胖客户端,业务逻辑在客户端。
    • 三层C/S:客户端 + 应用服务器 + 数据库服务器。实现了业务逻辑与表现的分离。
    • B/S架构:是C/S的特例,客户端统一为浏览器
  • 优点:数据集中管理,易于保证安全性和一致性。
  • 缺点:服务器是单一故障点和性能瓶颈。
  • 适用场景:所有基于网络的服务,如Web应用、邮件系统。
3. 管道-过滤器 (Pipe-Filter)
  • 组件过滤器。一个独立的处理单元,对输入流进行局部变换。
  • 连接件管道,用于在过滤器之间传递数据流。
  • 约束:过滤器是独立的实体,它们之间不共享状态;每个过滤器在数据完整到达后即可开始工作。
  • 优点
    • 高可复用性:过滤器可以像积木一样重组。
    • 可扩展性:容易添加新的过滤器。
    • 并发性:不同的过滤器可以在不同的线程或进程中进行处理。
  • 缺点:不适合处理交互式应用,通常导致批处理风格。
  • 适用场景:编译器、数据处理系统、Unix/Linux Shell命令。
4. 事件驱动架构 (Event-Driven Architecture, EDA)
  • 组件事件发布者事件消费者事件通道
  • 连接件事件消息队列/消息代理(如Kafka, RabbitMQ)。
  • 约束:组件之间通过异步事件进行通信,彼此不直接知晓对方的存在。
  • 工作模式:发布者将事件发布到事件通道,消费者订阅感兴趣的事件并进行处理。
  • 优点
    • 极致的解耦:组件间高度独立。
    • 高可扩展性:消费者可以动态增减。
    • 高响应性:发布者无需等待处理完成。
  • 缺点
    • 复杂性:工作流不直观,调试困难。
    • 数据一致性:通常为最终一致性,难以保证强一致性。
  • 适用场景:用户界面系统、实时数据处理、需要高度解耦的分布式系统。
5. 微内核架构 (Microkernel Architecture) / 插件架构
  • 组件核心系统(微内核)、插件组件
  • 连接件:核心系统定义的内部接口。
  • 约束:核心系统保持最小功能(如插件生命周期管理、通信),主要业务逻辑由插件实现。
  • 优点
    • 良好的灵活性和可扩展性:功能通过插件热插拔。
    • 功能隔离:一个插件的故障不影响核心系统。
  • 缺点:核心系统需要精心设计,插件接口的演化可能是个挑战。
  • 适用场景:操作系统(如Linux)、IDE(如Eclipse, VS Code)、具有明显“核心+扩展”特征的应用(如规则引擎)。

(二)现代流行风格

6. 微服务架构 (Microservices Architecture)
  • 组件服务。每个服务是小型、自治、围绕业务能力构建的独立进程。
  • 连接件轻量级通信机制(如RESTful API, gRPC, 异步消息)。
  • 约束服务即组件;每个服务拥有自己独立的技术栈和数据存储;去中心化治理。
  • 优点
    • 技术异构性:不同服务可用不同技术栈。
    • 弹性:服务故障被隔离。
    • 独立部署与扩展:每个服务可以独立开发、部署和扩缩容。
    • 易于演化:服务边界清晰,易于重构。
  • 缺点
    • 分布式系统复杂性:网络延迟、故障容错、分布式事务、最终一致性。
    • 运维 overhead:需要成熟的DevOps和容器化技术。
    • 测试和调试困难
  • 适用场景:大型、复杂的互联网应用,需要快速迭代和高扩展性。
7. 面向服务架构 (SOA)
  • 组件服务。通常是粗粒度的、可重用的业务功能。
  • 连接件企业服务总线 (ESB)。ESB是集中式的通信枢纽,负责消息路由、协议转换、服务组合等。
  • 约束:服务通过ESB进行通信,强调服务复用系统集成
  • 与微服务对比(软考高频考点)
    特性面向服务架构 (SOA)微服务架构 (Microservices)
    核心组件企业服务总线 (ESB) - 集中式API网关 + 服务网格 - 去中心化
    服务粒度粗粒度细粒度
    通信协议重量级 (SOAP/WS-*, XML)轻量级 (REST/HTTP, JSON, gRPC)
    数据管理倾向于共享数据库每个服务拥有独立数据库
    目标系统集成、重用敏捷交付、可扩展性

三、架构风格与质量属性的关系(架构师决策核心)

架构师选择风格的本质,是在为系统的质量属性进行投票。

架构风格主要支持的质量属性可能牺牲的质量属性
分层架构可维护性、可测试性、可复用性性能(延迟)
管道-过滤器可复用性、可修改性、可扩展性交互性、性能(批量处理延迟)
事件驱动架构可扩展性、可用性、可修改性可理解性、可测试性、一致性(强)
微内核架构可扩展性、可移植性、可修改性性能(插件间调用开销)
微服务架构可扩展性、可用性、可部署性、技术异构性性能(网络延迟)、一致性(强)、可测试性
面向服务架构可复用性、互操作性性能(ESB瓶颈)、复杂性

四、软考考点总结与应用

  1. 选择题

    • 直接考查各种架构风格的定义、组件、连接件和约束
    • 考查不同架构风格的优缺点对比
    • 给出一个场景,要求选择最合适的架构风格。
    • 重点考查微服务与SOA的区别
  2. 案例分析题

    • 题目给出一个业务场景(如“高并发电商平台”、“银行核心系统”、“物联网数据处理平台”)。
    • 问题:请为其选择合适的架构风格,并说明理由。
    • 答题套路
      1. 分析需求:识别关键功能需求和非功能需求(质量属性)。
      2. 风格选型与理由
        • 传统企业内部管理系统 -> 分层架构
        • 需要集成多个遗留异构系统 -> SOA
        • 互联网应用,要求快速迭代、高扩展 -> 微服务
        • 实时数据流处理(如日志分析) -> 管道-过滤器
        • 需要高度解耦和异步通信(如订单状态通知) -> 事件驱动
      3. 阐述权衡:说明你的选择在质量属性上是如何权衡的(例如,选择微服务,获得了扩展性,但接受了网络延迟和最终一致性)。
  3. 论文题

    • 可能围绕“论微服务架构的优缺点与实践”、“软件架构风格的选择与应用”、“某系统从单体到微服务的架构演化”等主题。
    • 写作时,必须清晰地:
      • 描述你所选架构风格的核心特征
      • 详细论述为什么选择这种风格(它是如何满足项目关键需求的)。
      • 结合项目,阐述在实践该风格时遇到的具体挑战(如微服务的数据一致性如何解决?服务如何划分?)以及你的解决方案
      • 对比其他风格,说明你的决策依据。

总结

对于软考架构师,掌握软件架构风格的关键在于:

  • 精通核心风格:深刻理解每种风格的DNA(组件、连接件、约束)。
  • 建立风格-质量映射:在脑中形成“要什么质量,就选什么风格”的直觉。
  • 具备权衡思维:明白没有万能风格,任何选择都是有得必有失
  • 紧跟发展趋势:深刻理解微服务、事件驱动等现代风格及其生态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谱写秋天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值