1、 从需求分析到软件设计之间的过渡过程称为软件架构。
软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用(连接件)、指导构件集成的模式以及这些模式的约束组成。
软件架构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构件之间的对应关系,提供了一些设计决策的基本原理。
解决好软件的复用、质量和维护问题,是研究软件架构的根本目的。
2、 软件架构(Software Architecture,SA)设计与生命周期
(1)需求分析阶段:关注的两个问题,一是如何根据需求模型构建SA模型,二是如何保证模型转换的可追踪性。
(2)设计阶段:设计阶段是SA研究关注最早和最多的阶段。支持构件、连接件及其配置的描述语言称为体系结构描述语言(Architecture Description Language,ADL),ADL对连接子的重视成为区分ADL和其他建模语言的重要特征之一。
(3)实现阶段
(4)构件组装阶段:支持可复用构件的互联,检测并消除体系结构失配问题(由构件引起的失配、由连接子引起的失配、由于系统成分对全局体系结构的假设存在冲突引起的失配)
(5)部署阶段
(6)后开发阶段:软件部署之后的阶段,这一阶段SA研究主要围绕维护、演化、复用等方面进行。典型的研究方向包括动态软件体系结构、体系结构恢复与重建
逻辑视图:设计的对象模型,关注系统功能
开发视图:描述了在开发环境中软件的静态组织结构,关注源代码、组件、DLL
进程视图(过程视图):关注并发、同步特征
物理视图:关注软件到硬件的映射关系,反映分布式特性
当采用面向对象的设计方法描述对象模型时,通常使用类图表达类的内部属性和行为,以及类集合之间的交互关系;采用状态图定义对象的内部行为。
3、 软件架构的重要性
软件架构设计师降低成本、改进质量、按时和按需交付产品的关键因素。
(1)架构设计能能够满足系统的品质
(2)架构设计使受益人达成一致的目标
(3)架构设计能够支持计划编写过程
(4)架构设计对系统开发的指导性
(5)架构设计能够有效地管理复杂性
(6)架构设计为复用奠定了基础
(7)架构设计能降低维护成本
(8)架构设计能支持冲突分析
4、 软件架构风格:是指描述特定应用领域系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式,惯用模式反映了众多系统共有的结构和语义。
分类 | 具体风格 | 描述 | 常考关键词及实例 |
数据流风格 | 批处理 | 每个处理步骤是一个单独的程序。数据必须是完整的,以整体的方式从前一阶段传给后一阶段。基本构件是独立的应用程序,连接件是某种类型的媒介。 | 传统编译器,每个阶段产生的结果作为下一个阶段的输入 |
管道-过滤器 | 每个处理步骤由一个过滤器实现,步骤之间通过数据流连接,数据不必整体方式传输。基本构件是过滤器,连接件是数据流传输管道。 | ||
调用/返回风格 | 主程序/子程序 | 一般采用单线程控制,构件是主程序和子程序,连接件是过程调用。主程序直接调用子程序,属于显示调用 | |
面向对象 | 建立在数据抽象和面向对象的基础上。对象是构件,连接件是对象之间的交互方式 | ||
层次结构 | 构件组织成一个层次结构,连接件通过决定层间如何交互的协议定义。每一层为上一层提供服务,并作为下一层的客户。越靠近底层,抽象级别越高;越靠近顶层,抽象级别越低。内部的层接口只对相邻的层可见,每一层最多只影响两层,为软件重用提供了强大的支持 | 操作系统 | |
客服端/服务器 | 即C/S架构,基于资源不对等,且为实现共享而提出的。分为2层C/S架构和3层C/S架构。2层C/S架构有3个主要组成部分:数据库服务器、客户应用程序和网络,应用逻辑在客户应用程序上完成,称为“胖客户机,瘦服务器”。3层C/S架构有4个主要主要组成部分:数据库服务器、应用服务器、客户应用程序和网络,应用逻辑驻留在应用服务器上,只有表示层存在于客户机,称为“瘦客户机”,应用功能分为表示层、功能层和数据层。 | ||
以数据为中心风格 | 仓库(数据库系统) | 也叫数据库系统风格,构件有两种:一是中央共享数据源,保存当前系统的数据状态;二是一组对中央数据进行操作的独立构件。连接件即为仓库与独立构件之间的交互。 | 以数据为中心,也叫数据共享风格 |
黑板 | 适用于解决复杂的非结构化的问题。黑板系统是一种问题求解模型。包括知识源、黑板和控制三部分。知识源包括若干独立计算的不同单元,提供解决问题的知识。知识源响应黑板的变化,也只修改黑板,黑板是一个全局数据库,是知识源相互作用的唯一媒介。 | 现代编译器的集成开发环境IDE、信号处理领域,如语言识别、问题规划、模式识别、编译优化 | |
超文本 | 构件以网状连接方式相互连接,用户可以在构件之间进行按照人类的联想思维方式任意跳转到相关构件。 | 常应用在互联网领域 | |
虚拟机 | 解释器 | 解释器通过包括一个完成解释工作的解释引擎、一个包含将被解释的代码的存储区、一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行的进度的数据结构 | 自定义流程,按流程执行,规则随时改变,灵活定义,业务灵活组合,专家系统,java虚拟机、机器人 |
规则系统 | 包括规则集、规则解释器、规则/数据选择器和工作内存 | 人工智能 | |
独立构件 | 进程通信 | 构件是独立的过程,连接件是消息传递。构件通常是命名过程,消息传递的方式可以是点对点、异步或同步、远程过程调用等 | |
事件驱动 | 构件不直接调用一个过程,而是触发或广播一个或多个事件,属于隐式调用。优点是为软件复用提供强调的支持,为构件的维护和演化带来了方便;其缺点是构件放弃了对系统计算的控制 | 事件触发推动动作,如程序语言的语法高亮、语法错误提示 | |
闭环 | 过程控制 | 发出控制命令并接受反馈,循环往复达到平衡 | 设定参数,并不断调整。汽车巡航定速、空调温度调节 |
5、 基于服务的架构(SOA)
一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务间定义好的接口和契约联系起来。接口是采用中立的方式定义,它独立于实现服务的硬件平台、操作系统和编程语言。
服务是一种为了满足某项业务需求的操作、规则等的逻辑组合
SOA的特点:松散耦合、粗粒度、标准化接口
服务构件与传统构件区别:
(1)服务构件的实现与语言无关,传统构件绑定某种特定语言
(2)服务构件粒度大于传统构件粒度,传统构件粒度大于对象粒度
(3)服务构件接口是标准的,主要是WSDL(Web服务描述语言)接口,传统构件常以具体API形式出现
(4)服务构件可以通过构件容器提供QoS服务,传统构件完全由程序代码直接控制
SOA的实现方式:
(1)Web Service
(2)ESB
企业服务总线是传统中间件技术与XML、WEB服务等技术结合的产物,主要支持异构系统集成。ESB基于内容的路由和过滤器,具备复杂数据的传输能力,可以提供一系列的标准接口。
作用与特点:
(1)SOA的一种实现方式,起到总线的作用,将各种服务进行连接与整合
(2)描述服务的元数据和服务注册管理
(3)在服务请求者和服务提供者之间传递数据,以及对数据进行转换,并支持同步模式、异步模式
(4)发现、路由、匹配和选择的能力,以及支持服务之间的动态交互,解耦服务请求者和服务提供者。高一级的能力还包括对安全的支持、服务质量保证、可管理性和负载平衡等。
主要功能包括:
服务位置透明性
消息路由和寻址服务
传输协议转换
消息格式转换
服务注册和命名管理
日志与监控
安全性
(3)服务注册表
SOA设计原则:
(1)无状态
(2)单一实例:避免功能冗余
(3)明确定义的接口
(4)自包含和模块化
(5)粗粒度
(6)松耦合
(7)重用能力
(8)互操作性、兼容和策略声明
SOA关键技术和协议
REST技术特点:
(1)网络上的所有事物都被抽象为资源
(2)每个资源都对应一个唯一的资源标识
(3)通过通用的连接器接口对资源进行操作
(4)对资源的各种操作不会改变资源标识
(5)所有的操作都是无状态的
6、 微服务架构:是SOA架构的进一步优化,去除了ESB企业服务总线,是一个真正意义上去中心化的分布式架构,更加强调服务个体的独立性、拆分粒度更小。
特点:
(1)小,且专注于做一件事
(2)轻量级通信机制
(3)松耦合、独立部署
优势:
(1)技术异构性
(2)弹性
(3)扩展
(4)简化部署
(5)与组织结构相匹配
(6)可组合性
7、 架构描述语言(ADL):一种形式化语言,它在语义模型的支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架。基于底层语义的工具为体系结构的表示、分析、演化、细化、设计过程等提供支持。
ADL的三个基本要素:构件、连接件、构件配置
8、 特定领域软件架构(Domain Specific Software Architecture,DSSA):在一个特定应用领域中为一组应用提供组织结构参考的标准软件系统结构。
DAAS具有的特征:
(1)严格定义的问题域和解决域
(2)具有普遍性,使其可以用于领域中某个特定应用的开发
(3)对整个领域有合适程度的抽象
(4)具备该领域固定的、典型的在开发过程中可重用元素
基本活动和领域划分分类:
参与DSSA的人员:
(1)领域专家:有经验的用户、从事该领域中系统的需求分析、设计、实现以及项目管理的有经验的软件工程师。领域专家的主要任务包括提供关于领域中系统的需求规约和实现的知识
(2)领域分析人员:应由具有知识工程背景的有经验的系统分析员来担任
(3)领域设计人员:应由有经验的软件设计人员来担任
(4)领域实现人员:应由有经验的程序设计人员来担任
DSSA的建立过程:
DSSA三层次模型:
9、 质量属性
软件系统属性包括功能属性和质量属性,软件架构重点关注的是质量属性。架构的基本需求是在满足功能属性的前提下,关注软件系统质量属性。
软件系统质量是软件系统与明确地和隐含地定义的需求相一致的程度。
软件系统质量属性(Quality Attribute)是一个系统的可测量或者可测试的属性,用来描述系统满足利益相关者需求的程度。
10、 面向架构评估的质量属性
(1)性能:指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件个数。如响应时间、吞吐量。设计策略:优先队列、增加计算资源、减少计算开销、引入并发机制、采用资源调度等
(2)可靠性:软件系统在规定的条件下和规定的时间内完成规定功能的能力。如MTTF(平均失效等待时间)、MTBF(平均失效间隔时间)、可靠度(系统在规定时间内无故障的概率)。设计策略:心跳、Ping/Echo、冗余、选举。备注:失效强度是失效概率关于时间的导数
(3)可用性:是系统能够正常运行的时间比例,经常用两次故障之间的时间长度或者在出现故障时系统能够恢复正常的速度来表示。如故障间隔时间。设计策略:心跳、Ping/Echo、冗余、选举。
(4)安全性:指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。如保密性、完整性、不可抵赖性、可控性。设计策略:入侵检测、入侵防护、用户认证、用户授权、追踪审计。
(5)可修改性:指能够快速地以较高的性价比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价来衡量。包括可维护性、可扩展性、结构重组、可移植性。设计策略:接口-实现分类、抽象、信息隐藏
(6)功能性:是系统能完成所期望的工作能力。一项任务的完成需要系统中许多或大多数构件的相互协作。
(7)可变性:指系统结构经扩充或变更而成为新体系结构的能力。这种新体系结构应该符合预先定义的规则,在某些具体方面不同于原有的架构。
(8)互操作性:本软件系统与其他系统交换数据和相互调用服务的难易程度。
11、 架构风险:是指架构设计中潜在的、存在问题的架构决策所带来的隐患
12、 风险点和非风险点:可能引起风险的因素,可成为风险点。某个做法如果有隐患,有可能导致一些问题,则为风险点。而如果某件事是可行的、可接受的,则为非风险点。
敏感点:为了实现某种特定的质量属性,一个或多个构件所具有的特性。
权衡点:是指影响多个质量属性的特性,是多个质量属性的敏感点。
13、 软件架构评估方法:
(1)基于调查问卷(检查表)的方式
(2)基于度量的方式
(3)基于场景的方式
14、 基于场景的方式
软件架构分析法(SAAM)
架构权衡分析法(ATAM)
成本效益分析法(CBAM)
SAAM:最初用于分析架构可修改性,后扩展到其它质量属性
ATAM:在SAAM基础上发展起来的,主要针对性能、可用性、安全性和可修改性,在系统开发之前,对这些质量属性进行评价和折中,整个评估过程强调以属性作为架构评估的核心概念。
15、 系统可靠性分析
系统可靠性(Software Reliability)是软件产品在规定的条件下和规定的时间区间完成规定功能的能力,也就是系统无故障运行的概率。规定的条件是指软件运行时的外部输入条件;规定的时间区间是指软件的实际运行时间区间;规定功能是指提供的服务。
系统可用性是指在某个给定时间点上系统能够按照需求执行的概率。
16、 软件可靠性与硬件可靠性的区别
(1)复杂性:软件复杂性比硬件高,大部分失效来自于软件失效
(2)物理退化:硬件失效主要是物理退化所致,软件不存在物理退化
(3)唯一性:软件是唯一的,每个COPY版本都一样,而两个硬件不可能完全一样
(4)版本更新周期:硬件较慢,软件较快
17、 可靠性指标
可靠度:系统在规定的条件、规定的时间区间不发生失效的概率
失效率:又称风险函数,也称条件失效强度,是指运行至此刻系统未出现失效的情况下,单位时间系统出现失效的概率
18、 可靠性设计
(1)避错技术:从设计、开发、测试等阶段着手
(2)容错技术:结构冗余(硬件冗余、软件冗余)、信息冗余(校验码)、时间冗余(重复多次执行相同的计算),其中软件冗余包括N版本程序设计(静态冗余)、恢复块设计(动态冗余)、防卫式程序设计
(3)检错技术:出错后报警,人工处理、成本低
(4)降低复杂度设计
动态冗余是通过故障检测、故障定位及故障恢复等手段达到容错的目的,其中主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来替代它并重新运行。各备用模块在其待机时,可与主模块一样工作,也可以不工作。
19、 N版本程序设计
一种静态的故障屏蔽技术,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N个版本的程序必须由不同的人独立设计,使用不同的方法、设计语言、开发环境和工具来实现,目的是减少N个版本的程序在表决点上相关错误的概率。
20、 恢复块设计
选择一组操作作为容错设计单元,从而把普通的程序块变成恢复块。被选用构造恢复块的程序块可以是模块、过程、子程序和程序段等。恢复块设计时必须保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块备份块之间的共性错误降到最低程度
21、 N版本程序设计与恢复块设计的区别
恢复块设计 | N版本程序设计 | |
硬件运行环境 | 单机 | 多机 |
错误检测方法 | 验证测试程序 | 表决 |
恢复策略 | 后向恢复 | 前向恢复 |
实时性 | 差 | 好 |
前向恢复:使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况
后向恢复:系统恢复到前一个正确状态,继续执行
22、 通过在系统配置中采用容错技术来实现系统的可靠性,常用的系统配置技术分别有:双机热备技术、服务器集群技术
双机热备模式(主系统、备用系统)
双机互备份模式(同时提供不同的服务,心不跳则接管)
双机双工模式(同时提供相同的服务,集群的一种)