【原文链接】系统架构设计师(第二版)学习笔记----系统架构概述
文章目录
- 一、系统架构的定义与发展历程
- 1.1 架构的定义
- 1.2 架构设计的作用
- 1.3 架构设计产生的背景
- 1.4 软件架构的发展历程
- 1.5 模块化开发方法
- 1.6 模块法方法分解模块遵循的原则
- 1.7 软件工程领域研究重点
- 1.8 架构分析常用的方法
- 1.9 架构设计常用的方法
- 1.10 架构测试策略
- 1.11 架构测试方法
- 1.12 架构风格
- 1.13 软件架构影响开发的各个阶段
- 二、软件架构的常用分类及建模方法
- 2.1 软件架构的常用分类
- 2.2 分层架构最常见的四层架构
- 2.3 事件驱动架构的四个主要部分
- 2.4 微核架构
- 2.5 微服务架构三种实现模式
- 2.6 云架构
- 2.7 系统架构常用建模方法
- 2.8 常见软件架构风格的使用场景
一、系统架构的定义与发展历程
1.1 架构的定义
系统架构是系统的一种整体的高层次的结构表示,是系统的骨架、根基,支撑和链接各个部分
1.2 架构设计的作用
- 解决相对复杂的需求问题
- 解决非功能属性在系统占据重要位置的设计问题
- 解决生命周期长、扩展性需求高的系统整体结构问题
- 解决系统基于组件需要的集成问题
- 解决业务流程再造难的问题
1.3 架构设计产生的背景
- 软件复杂、易变,其行为特征难以预见,软件开发过程中需求和设计之间缺乏有效的转换,导致软件开发过程困难和不可控
- 随着软件系统的规模越来越大、越来越复杂,整个系统的结构和规格说明就显得越来越重要
- 对于大规模的复杂软件系统,相较于对计算算法和数据结构的选择,系统的整体结构设计和规格说明已经变得明显重要的多
- 对软件系统结构的深入研究将会成为提高软件生产率和解决软件维护问题的最有希望的新途径
1.4 软件架构的发展历程
- 基础研究阶段(1968-1994)
- 概念体系和核心技术形成阶段(1999-2000)
- 理论体系完善和发展阶段(1996-至今)
- 普及应用阶段(2000-至今)
1.5 模块化开发方法
模块化开发方法是指把一个待开发的软件分解为若干个小的而且简单的部分,采用对复杂事物分而治之的经典原则。
1.6 模块法方法分解模块遵循的原则
- 最高模块内聚
- 最低耦合
- 模块大小适合
- 模块调用链的深度不可过多
- 接口简单、精炼(扇入扇出不宜太大),具有信息隐蔽能力
- 尽可能地复用已有模块
1.7 软件工程领域研究重点
- 软件架构描述和表示
- 软件架构分析、设计与测试
- 软件架构发现、演化与重用
- 基于软件架构的开发方法
- 软件架构风格
- 动态软件架构
1.8 架构分析常用的方法
- 软件架构分析方法SAAM
- 架构权衡分析法ATAM
- 成本效益分析法CBAM
- 基于场景的架构再工程SBAR
- 架构层析的软件可维护性预测ALSPM
- 软件架构评估模型SAEM
1.9 架构设计常用的方法
- 从工件描述中提取架构描述的工件驱动方法
- 从用例导出架构抽象的用例驱动
- 从模式导出架构的模式驱动方法
- 从领域模型导出架构抽象的域驱动方法
- 从设计过程中获得架构质量属性需求的属性驱动设计方法
1.10 架构测试策略
- 单元
- 子系统
- 集成
- 验收
1.11 架构测试方法
- 架构测试覆盖方法
- 组件设计正确性验证方法
- 基于CHAM的架构动态语义验证方法
1.12 架构风格
- 数据流风格
- 调用/返回风格
- 独立组件风格
- 虚拟机风格
- 仓库风格
1.13 软件架构影响开发的各个阶段
- 需求阶段
- 设计阶段
- 实现阶段
- 维护阶段
二、软件架构的常用分类及建模方法
2.1 软件架构的常用分类
- 分层架构
- 事件驱动架构
- 微核架构
- 微服务架构
- 云架构
2.2 分层架构最常见的四层架构
- 表现层
- 业务层
- 持久层
- 数据库
2.3 事件驱动架构的四个主要部分
- 事件队列
- 分发器
- 事件通道
- 事件处理器
2.4 微核架构
微核架构又称为插件架构,是指软件的内核相对较小,主要功能和业务逻辑都通过插件实现
2.5 微服务架构三种实现模式
- Restful API模式
- Restful 应用模式
- 集中消息模式
2.6 云架构
云架构主要分成两部分
- 处理单元
- 虚拟中间件
虚拟中间件包含4个组件
- 消息中间件(Messageing Grid)
- 数据中间件(Data Grid)
- 处理中间件(Processing Grid)
- 部署中间件(Deployment Manager)
2.7 系统架构常用建模方法
- 结构模型
- 框架模型
- 动态模型
- 过程模型
2.8 常见软件架构风格的使用场景
- 管道-过滤器风格适用于将系统分成若干独立的步骤
- 主程序/子系统和面向对象的架构风格适用于对组件内部进行设计
- 虚拟机风格适用于构造解释器或专家系统
- C/S和B/S风格适合于数据和处理分布在一定范围,通过网络连接构成系统
- 平台/插件风格适用于具有插件扩展功能的应用程序
- MVC风格被广泛应用于用户交互程序的设计
- SOA风格适用于在企业集成等方面
- C2风格适用于GUI软件开发,用以构建灵活和可扩展的应用系统