一、 系统架构的核心概念与模型
1. 架构的定义
- 核心内涵:体现在组件中的一个系统的基本组织、它们彼此的关系与环境的关系,以及指导它的设计和发展的原则
- 经典公式:软件体系结构 = {构件(Component),连接件(Connector),约束(Constraint)}
- IEEE定义:架构是系统中一组基础概念和属性,表现为元素 、关系 以及设计与演进 的基本原则
2. 架构设计的过程与作用
- 迭代过程:在建立软件架构的初期,选择一个合适的架构风格是首要任务。通过架构模型理解架构属性,为未来的实现与演化建立目标
- 核心作用:
- 解决复杂需求,分解问题
- 保障性能、安全性等非功能属性(质量属性)
- 支持系统集成与扩展
- 作为开发蓝图指导团队协作
架构模型分类
- 结构模型:以架构的构建、连接件和其他概念来刻画结构
- 框架模型:侧重于整体结构的抽象模式
- 动态模型描述:对结构或框架模型的补充,主要研究系统的大颗粒行为的性质。(如系统的重新配置或演化)
- 4+1 视图模型: 逻辑视图(功能)、开发视图(代码组织)、过程视图(并发/同步)、物理视图(部署拓扑)+ 场景视图(用例)
二、 主流架构风格详解
1. 数据流风格
- 管道-过滤器风格:专门用于将系统分成若干独立的步骤,数据在管道中流动,经过过滤器的处理(适用于数据处理流水线)
2. 调用/返回风格
- 分层架构(Layered Architecture):事实上的标准架构。分为:
- 表现层(UI交互)
- 业务层(业务逻辑)
- 持久层(SQL处理)
- 数据层(数据存储)
- C/S风格:主要用于网络连接的分布式系统
- MVC风格:专门用于用户交互程序的设计
- C2风格:用于GUI软件开发,用以构建灵活和可扩展的应用系统等
3. 独立构件风格
- 事件驱动架构(EDA):通过事件进行异步通信
- 事件队列(接收入口)
- 分发器(路由到不同业务单元)
- 事件通道(连接分发器与处理器)
- 事件处理器(实现具体业务逻辑)
- 平台/插件风格(微核架构):内核较小,主要功能和业务逻辑通过插件实现,具有极高的扩展性
4. 虚拟机风格
- 提供类似虚拟机的运行环境,典型应用包括解释器或专家系统
5. 面向服务与分布式风格
- SOA风格:主要用于企业集成,强调服务复用与松耦合
- 微服务架构:围绕特定业务功能构建的独立部署单元。三种实现模式:
- RESTful API 模式(云服务常用)
- RESTful 应用模式(企业内部多功能应用)
- 集中消息模式(采用消息代理实现队列与负载平衡)
- 云架构:主打高扩展性 ,通过将数据复制到内存并封装业务能力为处理单元来实现。依赖四类中间件:
- 消息中间件(请求与会话控制)
- 数据中间件(数据复制与同步)
- 处理中间件(协调处理单元)
- 部署中间件(启停与负载监控)
三、 架构设计的方法论与评估
1. 基于架构的软件开发(ABSD)
- 核心思想:由商业、质量和需求共同驱动,强调递归细化和迭代优化
- 三个基础:功能分解、架构风格选择、软件模版应用
- 六个子过程:体系功能需求、设计、文档化、复审、实现、演化
2. 核心质量属性与权衡
- 性能:响应时间、吞吐量(策略:资源优化、负载均衡)
- 可用性/可靠性:系统持续运行能力(策略:冗余设计、故障恢复、主从复制)
- 可维护性:模块化与接口隔离(策略:抽象、信息隐藏)
- 安全性:防范威胁(策略:加密、访问控制、防火墙)
3. 架构评估方法
- ATAM(架构权衡分析法):最常用的评估方法,通过场景分析验证架构可行性,寻找敏感点、风险点和非风险点
四、 架构设计核心原则
- 高内聚低耦合:模块功能集中,减少模块间依赖
- 开闭原则:对扩展开发,对修改封闭
- 单一职责原则:每个模块仅负责一个明确的功能
- 抽象与治理:通过接口标准化隐藏细节,组件独立运行与部署(如容器化)