-
软件架构的概念
- 解释
- 之前是从需求分析-》软件设计,从业务方直接到了技术,导致有需求和实现之前有鸿沟。
- 所以产生了需求设计,将需求分解为不同的模块,分别实现不同的职责
- 价值
- 复用和传递
- 项目干系人交流的手段,能预测质量
- 演化变简单,有据可依、方便传承
- 发展史
- 无架构-汇编语言(机器语言-最低级-命令式)
- 萌芽-程序结构设计(有顺序、分支循环等基本结构-高级语言-c
- 初级-统一建模语言uml
- 高级-4+1视图
- 软件架构建模
- 结构模型
- 以架构的构件、连接件和其他概念刻画结构
- 框架模型
- 动态模型
- 系统的大颗粒的行为性质
- 过程模型
- 功能模型
- 4+1模型(重点)-与uml一一对应
- 为了把架构搞清楚,进行了视图的拆分,又考虑制作视图的工具
- 逻辑视图-用户:系统功能需求
- 开发视图-实现视图-编程人员:软件管理(源码、组件、dll)
- 进程视图-系统集成人员:性能、并发
- 物理视图-部署视图-系统工程人员:软件到硬件的映射关系,安装、通信等
- 场景-用例视图
- 为了把架构搞清楚,进行了视图的拆分,又考虑制作视图的工具
- 结构模型
- 解释
-
软件架构风格(超重点)
- 风格=模式
- 分类
- 数据流
- 数据一步步处理得到结果,数据处理+严格流程
- 子风格
- 批处理序列
- 数据必须完整以整体方式传递-下载完成后再播放
- 管道-过滤器
- 管道=机制、过滤器=函数、方法
- 数据流处理-边下载边播放
- 批处理序列
- 调用/返回
- 当前使用最广泛
- 子风格
- 主程序/子程序
- 面向对象
- 层次结构
- 分层,上层调用下层,比如调用main方法
- 特点
- 优点
- 复杂问题分成不同层次去解决-解耦合
- 不同层次处于不同抽象层级-越底层抽象级别越高
- 每一层最多只影响两层,只要给相邻层提供相同接口,允许每层方法不同。同时支持了复用
- 缺点
- 并不是每个系统能容易地分层
- 分层过多效率会低,分层少耦合又高,所以很难找到合适的层次抽象方法。一般3~5层最合适
- 优点
- 独立构件
- 出发点:封装成构件的同时保持构件独立性-引入中间层/事件触发机制,让两个构件之间不直接联系了(可以联想到观察者、中介模式)
- 包含
- 进程通信
- 构件是独立过程,连接件是消息传递
- 构件是命名过程,消息传递的方式可以点对点、异步、同步、远程方法调用
- 事件驱动系统(隐式调用)
- 调试过程中牵一发而动全身,图形用户界面是典型的解释器风格
- 构件不直接调用过程,而是触发/广播一个/多个事件
- 构件在一个/多个事件中注册,当时间被触发,系统会自动调用在事件中注册的所有过程
- 一个事件的触发就导致另一个模块中的过程调用
- 其中构件是匿名的,构件之间交互的连接件以过程之间的隐式调用来实现
- 支持软件复用,方便构件维护和演化;但是放弃了对系统计算的控制
- 进程通信
- 虚拟机
- 跟解释器设计模式
- 思想相同,只是解释器是局部解释方案而虚拟机风格是全局性的,适用于有自定义需求的场景
- 解释器风格-任务的时序依赖性
- 特点
- 一次编写到处运行
- 模拟新操作系统的运行环境
- 基于规则的系统,包括规则解释器、规则集、规则/数据选择器和工作内存,用于人工智能和dss中
- 跟解释器设计模式
- 仓库风格/数据共享(以数据为中心的风格)
- 有一个中心仓库,有一堆处理部件,所有处理部件都对仓库中的数据进行处理
- 包含
- 数据库系统
- ==数据文件,数据库管理系统从文件中获取不同信息进行相应展示
- 黑板系统-语音识别系统(先验知识)
- 以数据库系统为基础做的,结构一致。黑板是个全局数据库,包含问题解决方法数据的全部状态
- 黑板是知识元相互作用的唯一媒介;通过黑板状态的变化来控制知识源-增量修改与处理
- 常应用于解决问题没有确定性算法的软件:信号处理、问题规划、编辑器优化)
- 超文本系统
- 现代集成编译环境一般采用仓库架构风格(黑板)解决编译问题
- 传统的编译器,直接经过一系列操作编译成可执行代码进行执行
- 现代编译器先构造语法树,各种处理部件围绕语法树,这一系列汇集起来打包成工具集,跟语法树进行对接-不同工具间的信息交互
- 数据库系统
- 其他风格
- 闭环控制架构
- 闭环-空调,空调制热后需要,温度反馈然后确定是否继续制热;开环-电视换频道,遥控器按完发指令即结束
- 适用于嵌入式系统,设计连续的动作和状态
- c2风格(理论研究阶段)
- 并行构件网络
- 基本规则
- 构件和连接件都有一个顶部和一个底部
- 构件顶部链接连接件底部,构件地步连接连接件顶部;
- 构件间不允许直连,连接件可以连接任意连接件和其他构件
- 两个连接件进行直连时,必须一个顶部一个底部
- 构件和连接件都有一个顶部和一个底部
- 层次架构风格
- 演化
- 两层c/s
- 局域网
- 表示层,业务逻辑全在客户端完成处理,以一个软件(安装光盘)的方式装到客户方,更新维护麻烦、成本高
- 后端数据层直接跟数据库对接,完成数据存储的职能
- >三层c/s
- 剥离出来一层服务器进行逻辑处理,不再客户端上进行了
- 更新维护便利了,但是还是要求用户要装客户端(安装app,然后app要求更新很烦)->小程序应运而生
- ->三层b/s
- 特点
- 不再需要装客户端
- 缺乏对动态页面中支持能力,安全性难控,以页面为单位,数据动态交互性不强,应用系统的数据查询等响应速度低
- 这些问题后续都进行了优化解决
- 分层
- 表现层mvc
- 中间层(本身又可以拆分)
- 数据访问层orm
- 数据架构层(数据库系统)
- 特点
- 两层c/s
- 演化
- mvc架构风格
- 概念
- model 逻辑部分
- view 显示部分
- controller 交互部分
- 归属
- 大部分表现层
- 小部分中间层
- j2ee对应
- view--jsp:页面层级
- controller--servlet
- model--EJB
- 类型
- 主动mvc
- 动作-》view->controller->model->view->反馈结果
- 被动mvc
- 主动mvc
- 特点
- 1层view和3层model直接对接了,不好控制,耦合度过紧。从而出现mvp-》解耦合1-3层,同时支持单元测试
- mvp架构风格
- mvc的变种,使v-m层解耦合(修改v不影响m)
- 更好地支持单元测试,业务逻辑在p中,脱离v来测试逻辑(一个p嫩用于多个v,而不改变p的逻辑
- v要处理界面事件(mvc中c处理界面事件)
- mvvm层架构
- 本质跟mvp没有区别
- vm层和v层承担更多责任
- 富互联网应用ria
- 解决网页版交互慢点问题
- 第一次缓存大量数据在客户端本地,第一次打开时慢,之后运行表现好
- 概念
- 基于服务的架构soa
- 面向服务是面向对象的加强
- 标准化--从对象到构件的跨越
- 服务在构建基础上进一步做标准化
- 服务做到标准化
- 互相调用互联互通就容易
- 可以把已有的遗留系统,用服务进行封装然后跟其他服务做对接
- webservice对单个服务进行封装
- 服务总线
- 做中介
- 对接各个服务进行信息的传递
- 将复杂网状结构-》简化星型结构
- 单个服务结构内部
- 接口访问层-进行对接,可以做到跨平台、跨语言
- 业务逻辑层、
- 数据访问层
- 服务做到标准化
- 特点
- 松散耦合
- 粗粒度
- 标准化程度高
- soa的实现方式
- webservice
- 三个角色
- 服务提供者
- 服务注册中心
- 服务请求者
- 步骤
- 服务提供者对自己能提供的服务进行服务描述
- 服务提供者将服务描述注册到服务注册中心
- 服务请求者在注册中心进行查询,查到合适的提供者进行绑定然后对接
- 绑定方式
- 动态绑定
- 不绑死
- 静态绑定
- 绑死
- 动态绑定
- 三个角色
- 企业服务总线ESB
- 企业级的集成方法论
- 要集成不同的开发语言及协议标准不同,要企业服务总线进行协调
- 加强版服务中心
- 服务注册表
- 关键技术
- soap协议-传递信息
- =http协议+xml格式
- rest
- 对http常用操作进行标准化
- soap协议-传递信息
- webservice
- 面向服务是面向对象的加强
- 微服务
- 来源
- 拆解成小服务,每个服务只专注某个领域,轻量化机制,松散耦合部署。
- 优势
- 技术异构性:不同的服务可以用不同的技术甚至配不同的数据库
- 有弹性、易扩展、可组合性、可替代性的优化:可以将不同模块任意组合和增加
- 与组织结构相匹配:不同人负责不同的模块并行开发
- 在有了自动化部署后,简化部署
- 挑战
- 分布式系统的复杂性:拆得很小又做分布式,那节点和节点间通信很复杂
- 运维、部署、问题排查成本高
- 自动化维护与组织结构间的匹配复杂
- 服务间的依赖测试和管理的难度大
- 与soa的对比
- 实际上soa是微服务的变种,且soa包含微服务,但理论上也有不同
- 实现上的不同
- 实际上soa是微服务的变种,且soa包含微服务,但理论上也有不同
- 来源
- mda模型驱动架构
- 净室工程中产生的理论
- 自动根据模型用程序实现,不用人的参与
- 闭环控制架构
- 数据流
-
架构描述语言ADL
- 构成部分-3基本元素
- 构件
- 连接件
- 架构配置
- 主要的架构描述语言-不考
- 构成部分-3基本元素
-
特定领域软件架构DSSA(2分选择)
- 基本活动
- 领域分析
- 建立领域模型
- 领域设计
- 获得DSSA
- 领域实现
- 开发和组织可复用信息
- 领域分析
- 领域分析机制
- 建立过程
- 三个层级(重点)
- 领域开发环境
- 开发共性物
- 领域架构师
- 领域特定的应用开发环境
- 在共性物上定制开发
- 应用工程师
- 应用执行环境
- 操作员
- 领域开发环境
- 基本活动
-
基于架构的软件开发ABSD
- 基本思想(选择)
- 捕获需求
- 用例捕获功能需求-用户需求
- 特定场景捕获质量需求-除功能外的需求,比如维护
- 特定场景
- 捕获需求
- 开发过程
- 需求
- 设计
- 文档
- 文档复审
- 实现
- 演化
- 整个系统开发并不是一次能完成的
- 可能使用过程中发现问题,又要从需求开始走一遍整个流程
- 基本思想(选择)
-
软件质量属性(超重点)
-
软件架构评估(超重点)
- 三个要点
- 风险点
- 敏感点
- 权衡点
- 评估方式
- 调查问卷 主观
- 度量 客观
- 场景 中间
- 软件架构分析法SAAM(重点
- 分析架构可修改性,后扩展到其他属性
- 分析架构可修改性,后扩展到其他属性
- 架构权衡分析法ATAM(重点
- 在SAAM的基础上,针对性能、可用(实用)性、安全性、可修改性,在系统开发前对质量属性进行评价和折中
- 四个阶段
- 场景和需求收集
- 场景和需求都有优先级
- 场景的优先级(投票决定场景的优先级)带来了质量属性的优先级
- 架构视图和场景实现
- 特定的属性实现(单一理论)
- 多个属性折中
- 场景和需求收集
- 评估工具-质量效用树
- 成本效益分析法CBAM
- 软件架构分析法SAAM(重点
- 三个要点
-
软件产品线
-
构件与中间件技术
- 构件的特性(选择)
- 中间件是构件的一种
- 构件的复用
- 检索和提取
- 理解和评价
- 修改
- 组装
- corba中间件-公共对象代理请求机制
- orb起了一个连接各方的角色
- orb起了一个连接各方的角色
- 典型应用架构J2EE
- 构件的特性(选择)
-
Web架构设计(超重点)
- 分类
- 发展过程
- 单机系统
- 单机进行升级
- 数据库隔离出来,两台服务器
- 集群
- 访客过多,光把数据库隔离到另一台机器上,单独的一台机器也承载web应用的业务量,所以选择集群化
- 多服务器分担任务
- 首先web服务器由于用户过多需要多服务器分担,需要协调机制-负载均衡策略。
- 后web服务器的问题得到了解决,数据库再次成为瓶颈数据库需要多服务器,需要数据同步机制-主从
- 集群协调机制
- 负载均衡(调度)
- 用途
- 转发用户的请求到空闲服务器上
- 同一用户多次访问在不同的服务器上的会话要保持一致
- 工作方式
- 是否有状态
- 前后有关联关系则有状态,需要记录状态信息
- 先后的请求有关联,有依赖关系,就很麻烦。。所以最好做成无状态的
- 利用cookies
- cookies是存在客户端本地的信息包,跟域名进行绑定
- 每次发送页面请求时附属在请求中传到页面中去
- 将session信息存在cookies中存到本地,下次读取cookie会取到session
- 利用redis
- 每次需要时从redis里面去取
- 相互同步
- 每次每台服务器的会话都同步给其他服务器
- 是否有状态
- 分类
- 应用层负载均衡
- http重定向
- 重定向到其他服务器当的应用层
- 从服务端七层到客户端应用层共14层,每重定向一次都14层
- 反向代理负载均衡
- http重定向
- 传输层负载均衡
- 应用层负载均衡
- 用途
- 一主多从
- 读写分离
- 主数据库只进行写入, 多从数据库只进行读取
- i/o变成瓶颈
- 硬盘的效率
- 机械硬盘速度低
- 磁盘盘面存数据,磁头读取,常见5400r(笔记本)。
- 台式机7200r。机械盘限制瓶颈
- 换成ssd磁盘会快
- 机械硬盘速度低
- 高速缓存
- 将数据存在内存中,提高读取效率。缓存
- 常用
- memcache
- 运行于内存中
- 存结果,只是简单的k/v存储
- 高性能、分布式、比redis更简单
- redis
- 支持的范围比memcache广
- 支持数据持久化,掉电后数据可以恢复
- 难题
- 缓存雪崩。
- 定义
- 一个点出现问题迅速蔓延
- 大部分缓存失效,服务器崩
- 解决方法
- 加服务器,高可用
- 数据备份
- 出故障进行降级处理,缓存承受不了压力的时候就减少接受请求
- 提前演练探查阈值,监控提前介入
- 定义
- 缓存穿透
- 定义
- 缓存没有命中,直接去查数据库
- 给数据库带来很大压力
- 解决方法
- 查到空值就返回控制
- 部署过滤器拦截筛选
- 定义
- 缓存雪崩。
- squid
- memcache
- 硬盘的效率
- 读写分离
- 负载均衡(调度)
- 分类
软考高级-软件系统架构师-03软件架构设计(重点)
于 2025-02-24 09:36:14 首次发布