github地址:https://github.com/vloltion/blog/blob/master/软件体系结构 .pdf
软件体系结构 公式 体系架构=组件+连接件+约束
SoftwareArchitecture=Components+Connectors+Constrains
风格决定因素 组件类型(例如:数据容器,过程,对象)
连接件类型/交互机制(例如:过程调用,事件,管道)
组件的拓扑分布
拓扑和行为的约束(例如:数据容器不能自己改变数据,管道不能是循环的)
风格的代价和益处(优缺点)
异质的风格 Heterogeneous style): 一个系统是由不止一种风格构建的
几种软件体系结构风格 数据流 Data Flow:实例:流水改卷
两种方法:
方式1:一位老师改完1份卷子,就传给下一位老师
方式2:一位老师改完整班卷子,再传给下一位老师
特点 由数据控制计算
系统结构由数据在处理之间的有序移动决定
数据流系统的结构是比较明显的
在纯数据流系统中,处理之间除了数据交换,没有任何其他的交互
风格 组件:
数据处理的步骤
组件的接口是输入端口还是输出端口
计算模型:从输入中读取数据,计算,然后写到出口
连接件:
数据
单向,通常是异步有缓冲的
系统:
任意的拓扑结构
不同组件完成不同的功能
模式: 我们主要研究近似线性数据流或者是在限度内的循环数据流
如果一个软件系统的数据流的流向无序很可能说明该系统不应采用数据流的体系结构
例子: 批处理每个处理步骤是一个独立的程序
每一步必须在前一步结束后才能开始(有次序)
数据必须是完整的,以整体的方式传递
批处理可以做,管道过滤器做不了:对数据的整体访问,因为管道过滤器的数据分布在不同的组件上
管道过滤器 特性:每个组件都有一组输入和输出,组件读取输入的数据流,经过内部处理,产生输出数据流。
这个过程通常通过对输入流的变换及增量计算来完成。
这里的组件称为过滤器,连接件像是对输入流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。
管道过滤器的通用结构:
管道:限制了系统的拓扑结构,只能是过滤器的线性序列
有界管道:限制了在管道中能够容纳的数据量
类型定义管道:要求定义在两个过滤器间传出的数据类型
过滤器的角色:
读取数据流,输出处理后的数据流
执行流式的转换
递增地转换数据,数据边到来边处理,不是先收集好,再处理
不同过滤器之间是独立的
管道的角色
移动数据,从一个过滤器的输出到另一个过滤器的输入
全部的操作
数据传送引起系统动作
当没有数据可用,没有更多的计算的时候,管道过滤器系统停止工作
读取与处理数据流的方式
递增地读取和消费数据流
在输入被完全处理之前,输出便产生了
优点
使软件具有良好的隐蔽性和高内聚,低耦合的特点(过滤器可以看做是黑盒)
可将整个系统的I/O特性,理解为各个过滤器功能的简单合成。(多个低级过滤器可以合并成一个高级过滤器)
支持功能模块的重用(任意两个过滤器只要在相互所传输的数据格式上达成一致,就可以连接在一起)
系统易于维护和扩展(新的过滤器容易加入到系统中,旧的过滤器也可以被改进的过滤器替换)
支持某些特性属性的分析(入吞吐量和死锁检测)
支持多个过滤器的并发执行(适合多核/多线程环境)
理想情况下是组件之间只有数据依赖
缺点
不适合在交互性很强的应用
在数据传输上没有通用的标准,每个过滤器都增加了解析数据的工作
处理两个独立但相关的数据流可能会遇到困难
某些过滤器可能需要大尺寸的cache
批处理和管道过滤器这两种数据流风格,无法从拓扑结构上进行区分
比较:
相同点:
都是把任务分解为一系列固定顺序的计算单元(组件)
不同点:
批处理
管道过滤器
全部
增量
高延迟
立即有结果
输入随机访问
输入的处理是局部的
没有并发性
可能有反馈回路
没有交互性
有交互性
怎么选择:
任务是数据主导
事先知道数据的确切流向
考法:
选择这个结构为什么可以满足需求,为什么这个结构的缺点是可容忍的
过程控制适用场合:软硬件结合的系统,以硬件为主
开环控制
系统无反馈
由人进行反馈
闭环控制
系统有反馈,不需要人进行反馈
两种形式:
反馈控制:根据受控变量的测量值来调整过程
前馈控制:通过测量其他过程变量,来预计输入变量对被控变量将产生的影响。前馈控制这些变量来调整过程
当软件系统的运行受到外部干扰(软件不可见或不可控的力量或事件)的影响时,需要为软件体系结构考虑的一种过程控制方式。
和许多线性的数据流体系结构不同,控制环路体系结构需要有循环的拓扑结构
在什么情况下选择控制这种风格:
任务包含连续的动作、行为、状态的改变
不适合人参与的情况
一般是软硬件结合的系统(适用场合)
call/return 调用/返回 体系结构风格: 主程序/子程序 OO 分层: 特点
每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层
大的问题分解为若干渐进的小问题,逐步解决,隐藏了很多复杂度
修改一层,最多影响两层,通常只会影响上层。若层之间接口稳固,则不会造成其他影响
上层必须知道下层的身份,不能调整层次之间的顺序
层层相调,影响性能。
Client/Server Style: 两层C/S 缺点:对客户端软硬件配置要求较高
客户端程序设计复杂
数据安全性不好,客户端程序可以直接访问数据库服务器
信息内容和形式单一
用户界面风格不一,使用繁杂,不利于推广使用
软件维护与升级困难,每个客户机上的软件都需要维护
三层C/S B/S(浏览器/服务器) Data Centered/Shared Data: repository 仓库这种风格描绘很多系统
共同特点是共享数据
典型的例子:数据库、剪贴板、注册表
优点:很容易增加数据的生产者和消费者
缺点: 种类:设计者预先定义好 编译器
输入流的信息类型决定 数据库事物系统
系统其他部分的新信息决定 Scratchboard(刮板)
机会主义:计算的状态决定 Blackboard
blackboard 黑板什么是黑板?