1、哈尔滨工业大学计算机学院唐好选Email:,软件体系结构,主要内容,软件体系结构的概念体系结构的基本风格数据流风格的体系结构控制返回风格的体系结构数据中心风格的体系结构事件驱动风格的体系结构其它风格的体系结构体系结构选择矩阵法,软件体系结构的产生,随着软件系统规模越来越大、越来越复杂,整个系统的结构和规格说明显得越来越重要对于大规模的复杂软件系统来说,总体的系统结构设计和规格说明比计算的算法和数据结构的选择更重要对软件体系结构系统、深入的研究将会成为解决软件危机最有希望的途径,软件体系结构的定义,提供了一个结构、行为和属性的高级抽象从较高层次来考虑组成系统的构件、构件之间的连接,以及由构件与构
2、件交互形成的拓扑结构这些要素满足一定限制,遵循一定设计规则,能够在一定环境下进行演化,软件体系结构的组成,构件:基本软件构造模块(对象、模式等)连接件:将它们组合起来形成完整的软件系统物理分布(拓扑结构)约束性能,体系结构的研究要回答的基本问题,软件的基本构造单元是什么?这些构造单元之间如何连接?最终形成何种样式的拓扑结构?每个典型应用领域(例如CAD、ERP)的典型体系结构是什么样子?如何进行软件体系结构的设计与实现?如果对已经存在的软件体系结构进行修改?使用何种工具来支持软件体系结构的设计?如何对软件的体系结构进行描述、分析和验证?,软件体系结构在软件生命周期中的位置,SA在系统开发的全过
3、程中起中心作用SA是设计/开发的起点和依据SA是配置、运行和维护的指南,SA设计,软件体系结构的演化,无体系结构阶段,以汇编语言进行小规模程序开发为特征,软件体系结构的演化史,功能函数,面向过程的分析和设计,基于构件的软件开发,面向对象的分析与设计,面向服务的计算面向服务的体系结构,体系结构风格定义,一种风格描述一类体系结构,在实践中被多次设计、应用,是若干设计思想的综合,具有已经被熟知的特性,并且可以被复用一种体系结构风格定义了一个系统家族,定义一个词汇表和一组约束,词汇表中包含一些构件和连接件类型,而约束则指出系统是如何将这些构件和连接件组合起来的,体系结构的风格取决于一组组件类型(例如:
4、数据容器,过程,对象)一组连接件类型/交互机制(例如:过程调用,事件,管道)组件的拓扑分布一组对拓扑和行为的约束一些对风格的成本和益处的非正式的描述,例如:如果你需要重用性并且性能不是很重要,那么可以使用管道风格,体系结构风格的组成,体系结构风格所要回答的问题,设计词汇表: 构件和连接件的类型是什么?可容许的结构模式是什么?基本的计算模型是什么?风格的基本不变性是什么?常见的应用案例有哪些?优缺点有哪些?常见的特例有哪些?,经典体系结构风格类型,数据流体系结构风格,由数据控制计算系统结构由数据在处理之间的有序移动决定在纯数据流系统中,处理之间除数据交换,无任何其他交互,数据流风格的直观理解,组
5、件接口是输入端口和输出端口,从输入端口读数据,向输出端口写数据计算模型:从入口读数,计算,然后写到出口连接件:数据流(通常是异步的,有缓冲),数据流风格的基本构件,数据流风格的拓扑结构,控制流 (过程系统中的典型案例)主要问题是控制点怎样在程序或系统之间移动数据可能跟着控制走,但是并不起推动系统运转的作用关注的核心是计算顺序,控制流和数据流的区别,数据流主要问题是数据怎样在运算单元之间流动数据到了,控制(计算)单元便开始工作关心数据是否可用,转换,Batch Sequential(批处理)Pipe-and-Filter(管道-过滤器)Process Control(过程控制),典型的数据流风格
6、,validate,sort,Update,Report,tape,tape,tape,tape,report,tape,Data flow,Data transformation,批处理系统,每个处理步骤是一个独立的程序每一步必须在前一步结束后才能开始数据必须是完整的,以整体方式传递,批处理系统的特征,管道和过滤器风格,filters,Pipes,数据源,数据汇点,管道和过滤器体系结构模式把系统任务分成几个连续的处理步骤,这些步骤由通过系统的数据流连接,一个步骤的输出是下一个步骤的输入。每个处理步骤由一个过滤器组件实现过滤器组件:是处理单元。通过计算和增加信息来丰富数据;通过浓缩或摘录信息来
7、提炼数据;通过以别的表示形式交付数据来转换数据数据源表示系统的输入,提供一系列相同结构或类型的数据;数据汇点收集来自流水线终端的结果,管道过滤器体系结构的特征,构件:称为过滤器。对输入流进行处理、转换,处理后的结果在输出端流出。而且,计算常常是递进的,可能在全部的输入接收完之前就开始输出。可以并行地使用过滤器连接件:位于过滤器之间,起信息流导管作用,称为管道每个构件都有输入/输出集合,构件在输入处读取数据流,在输出处生成数据流过滤器必须是独立实体,它们不了解信息流从哪个过滤器流出,也不需要知道信息将流入哪个过滤器。它们可以指定输入的格式,可以确保输出的结果,但是它们可能不知道在管道之后将会是什
8、么样子。过滤器之间也不共享状态,管道过滤器风格的特征,管道过滤器对数据流的变换类型,过滤器读取和处理数据流的方式,管道过滤器风格的优缺点,优点:每个构件行为不受其他构件影响,系统行为易于理解支持功能模块复用具有较强的可维护性和可扩展性支持特殊的分析,如吞吐量计算和死锁检测等支持并发执行缺点:往往导致系统处理过程的成批操作 在处理两个独立但又相关的数据流时可能会遇到困难 需要对数据传输进行特定的处理时,会导致对于每个过滤器的解析输入和格式化输出要做更多的工作,带来系统复杂性的上升,过程控制风格,所谓对某个过程进行控制,指设法使该控制过程的功能或特性有效达到所期望的目标目标可以是满足所规定的各种性
9、能特征,也可以是在一定限制条件下,某个代表性能的量达到或者接近最佳,开环控制风格,被控对象的输出对控制器的输出没有影响如果过程被充分定义,而且操作完全可重复,过程就可以在无监督的情况下运行。这样的系统称为开环系统。,闭环控制风格,被控对象的输出(被控制量)会反送回来影响控制器的输出,形成一个或多个闭环。可分为负反馈和正反馈,过程控制风格的体系结构,Data feeding System,Controller,ProcessTo Controll,Controlled variables,Manipulatedvariables,processvariables,Setting system,S
10、et point,Sensor data,控制/返回风格,主程序-子程序风格,主程序-子程序风格的特点,基于定义-使用关系用过程调用作为交互机制程序设计语言直接支持子程序通常集成为模块子程序的正确性依赖于它所调用的子程序的正确性实例:RPC系统被分解成若干部分,分别运行于通过网络连接的各台计算机上目标是要通过将运算分布到多台计算机上来充分利用多台处理器,最终达到提高系统性能的目的,数据抽象和面向对象风格,数据及其操作被封装成抽象数据类型(对象)特点:封装/继承/多态数据抽象风格(ADT)是特殊的面向对象风格,区别在于:ADT只有封装的特点,而没有继承和多态的特点,obj,obj,obj,obj
11、,obj,obj,obj,obj,op,op,op,op,op,op,op,op,op,op,op,op,op,op,manager,Proc call,ADT,数据抽象和面向对象风格,数据抽象和面向对象风格特点,对象抽象使组件和组件之间的操作以黑箱方式进行封装性使细节内容对外部环境得以良好的隐藏。对象之间的访问是通过方法调用来实现的考虑操作和属性的关联性,封装完成了相关功能和属性的包装,并由对象进行管理使用某个对象提供的服务并不需要知道服务内部如何实现的实例:分布式软件系统(OMA/CORBA),层次风格,核心层是整个系统的基础,最底层的功能调用由它来实现。,功能层在整个模型中处于一个承上启
12、下的位置,它既要访问核心层提供的服务,来实现自身的功能;又要为应用层提供系统可用的功能,应用层是整个系统对外的一个接口,用户通过最高层来访问整个分层系统所能提供的功能。,层与层之间采用系统设计的协议进行通讯,通讯方式往往采用过程调用,每个层次内部可以包含很多的功能组件,在实际应用中功能层都不是由一个层次实现的,层次风格特点,支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层支持重用。只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同
13、的实现方法,独立组件风格,proc,proc,proc,proc,proc,proc,proc,proc,msg,msg,msg,msg,msg,msg,msg,msg,msg,msg,msg,msg,msg,msg,Composite,Link,独立组件风格特点,通过对各自部分计算的解耦操作来达到易更改的目的。它们之间相互的传输数据,但是不直接控制双方。消息可能传递给:指定的参与项 (交互过程风格)和未指定的参与项 (事件风格)系统由松耦合的一些独立运行的计算单元构成,这些单元之间通过消息传递信息。一般情况下,这些独立的计算单元能够自主地完成一些计算任务消息的发出者通常并不知道谁会接收并处理
14、这些消息,更不了解这些消息是如何被处理的由于系统基于消息,因此有较好的并发性能,容错性和可伸缩性独立组件系统中通常不存在比较明显的主-从结构。通常只有一比较弱的服务器,甚至没有服务器,以数据为中心的风格,黑板模型的逻辑框架,黑板结构的构成要素,知识源把问题分成几部分,每个部分独立计算,响应黑板上的变化黑板数据结构全局数据库包含解域的全部状态,是知识源互相作用的唯一媒介控制:让知识源响应偶然事件核心思想知识在一些协作的processes之间共享和分布,机会主义地处理数据具体实例:信号处理、专家系统、模式识别等领域经常采用,对黑板结构的理解,黑板体系结构,没有直接的算法可解多种方法都可能解决问题需
15、要多个领域的专门知识协作解决问题没有唯一的解答,或者“正确”答案会变化不确定性数据和解决方法可能错误或变化数据中信噪比的变化算法接口的变化,黑板结构的特点,可描绘很多种系统,其共同特点是共享数据其运行机制是收集、操作、保存大量的数据知识库是一个典型的例子,具有成长特性黑板是一种特别的仓库,主要用于需要对凌乱的信息进行处理的领域,其控制策略必须是机会主义的,仓库系统,优点很容易增加数据的生产者和消费者主要的问题synchronization(同步)configuration and schema management(配置和管理)atomicity(原子性)consistency(一致性)per
16、sistence(持久性)performance(性能),仓库系统,事件驱动体系结构Event System,调试器的例子,调试器,声明,断点事件,滚动屏幕到断点处,刷新变量的当前值,编译器,编译,组件并不直接调用过程,而是声明或广播一个或多个事件系统中的其他组件可以把某一过程注册为与它所关心的事件相关联。当某一事件发生时,系统会调用所有与之相关联的过程,即一个事件的激发隐含地导致了对其他模块的过程的调用事件驱动系统的基本观点是一个系统对外部的表现可以从它对事件的处理表征出来。要认识一个系统,可以给它一个输入事件,然后观察它的输出,从而分析和综合出一个系统分为显式风格和隐式风格,事件驱动风格主
17、要是指隐式风格实例:MVC,为交互式的软件系统提供了最著名的体系结构方面的组织。一个交互式应用程序分成三个Component,事件驱动系统的定义,隐式驱动和显式驱动,从系统论的角度来看待描述的对象,合理分解子系统,保证各个子系统的独立性和社会性无论系统多么复杂,子系统性质的差异多么大,任何子系统都可以按照有无子系统这一性质分为2类:管理系统和执行系统。执行系统是无子系统的系统,管理系统是有子系统的系统,其子系统可以是管理系统也可以是执行系统为了达到系统的目标,系统内的各个子系统通过传递消息和执行消息来协同操作。一般不在同级子系统间直接传递消息,而是通过上级来协调操作。这样,既可以使子系统间的耦
18、合性降低,又能协调动作,事件驱动系统设计原则,EventSystem:为事件驱动模式系统中的子系统声明接口,实现所有子系统共有接口的缺省行为ExecSystem:表示执行子系统,定义其具体的行为ManageSystem:表示管理子系统,在EventSystem接口中实现与子系统有关的操作Client:通过EventSystem操作整个事件驱动模式系统,与系统中的子系统进行交互,事件驱动系统的基本结构,事件驱动系统具有递归性,形成了“部分整体”层次结构。用户可以组合多个简单子系统以形成一些较大的子系统,这些较大的子系统又可以组合成更大的子系统为了简化事件驱动模式系统的设计、实现和使用,可以借鉴设
19、计模式中的组合 (Composite)模式来定义、组织和管理事件驱动模式系统中的执行系统和管理系统,事件驱动系统的基本结构,其他体系结构,解释器结构计算机语言理解客户/服务器结构80%的应用使用,其它体系结构,解释器风格通常被用于建立一种虚拟机以弥合程序的语义与作为计算引擎的硬件的间隙由于解释器实际上创建了一个软件虚拟出来的机器,所以这种风格又常常被称为虚拟机风格 解释器风格的系统通常包括一个作为执行引擎的状态机和3个存储器,即系统由4个构件组成:正在被解释的程序,执行引擎,被解释的程序的状态,执行引擎的当前状态。连接件包括过程调用和直接存储器访问它适用于这样的应用程序:应用程序并不能直接运行
20、在最适合的机器上,或不能直接以最适合的语言执行,解释器风格,解释器风格,优点:有助于应用程序的可移植性和程序设计语言的跨平台能力可以对未实现的硬件进行仿真缺点:额外的间接层次带来了系统性能的下降,解释器风格的优点和缺点,解释型语言VB、Javascript、VBScript、HTML、Java字节码、Matlab脚本、配置文件用途:通信协议用户输入:比如游戏中的组合按键,解释器风格的用途,数据和处理分布在一定范围内的多个构件上,构件之间通过网络连接简单的客户机/服务器系统结构分成两部分。客户机负责用户输入和展示,服务器则处理低层的功能,例如数据库的运作等如果一个系统被划分为两类不同的但相互联系
21、的组成部分,其中一方提出对信息或服务的请求,而另一方提供这种信息或者服务,那么这种体系结构就可看作是一种客户机/服务器模型,客户服务器风格,客户程序直接访问数据库,因而每一台客户机都必须安装数据库驱动程序,增加了系统安装与维护的工作量由于数据库由众多的客户程序直接访问,造成系统数据的完整性与安全性难以维护两层的结构可扩展性较差,由于客户端组件含有数据库访问功能,对软件系统的业务逻辑、数据库访问,甚至数据库本身的任何修改常常导致要求在所有客户机上重新部署客户端组件,两层客户服务器结构,数据库服务器,客户机,表示一种把客户应用程序和它们使用的服务分离开的系统视图是一种基于功能的分解,方法调用,方法
22、调用,方法调用,客户/服务器结构,基本上具备仓库风格的一切特点服务器和客户可以完全异构,只要遵从统一的网络协议客户必须知道服务器的地址服务器的地址必须静态,客户可以动态必须由客户主动连接服务器客户之间的信息传递要经过服务器中转,可以扩展出客户之间的直接通信机制服务器易受攻击服务器瘫痪,所有客户失效,客户服务器风格的特点,客户端有http浏览器即可为增强功能,往往还需要安装flash、jvm及一些专用插件使用标准http/https协议客户之间的通信只能通过服务器中转对客户机资源和其他网络资源的利用受限服务器的负荷大,客户机的资源浪费用JVM、flash、ActiveX等客户端计算技术解决,客户
23、服务器风格的特例:B/S,Broker风格,C,C2风格,体系选择矩阵法,决定一切,目前软件设计方法的主要缺点,经验很重要,没有不行经验随意性很大,很难科学地评价各种经验的正确性没经过高度概括和总结的经验需要后来者花费很长的时间和精力才能继承,甚至可能失传经验经常限制开拓,经验决定一切带来的问题,让选择体系结构的过程变得简单!让选择体系结构的方法变得易学!让每一个程序员都能轻松驾驭体系结构!,体系选择矩阵法的目标,预先评估各种体系结构风格对质量需求的表现,并为它们评分。分数最高的体系结构风格获得录用,体系选择矩阵法的基本思想,结构因为组件之间的关联,影响的质量比如:重用、适应性实现采用不同的实
24、现方法影响的质量比如:安全、兼容性,软件体系结构影响质量的两种方式,容错适应性重用集成性,计算性能节省空间,受体系结构影响的需求,组件更换组件移位组件无关组件互通接口变换,性能,对等,客户服务器,仓库,层次,事件驱动,面向对象,子程序,管道,容错,节省空间,计算性能,接口变换,组件互通,组件无关,组件移位,组件更换,组件重用,各种体系结构对质量需求的影响,期望值的取值范围是0-4,表示对某项体系需求的关心程度,组件重用:,4,组件更换:,4,组件移位:,0,组件无关:,0,组件互通:,2,接口变换:,4,计算性能:,1,节省空间:,0,容错:,0,编译器对体系结构质量的期望值,20,20,0,0,8,8,4,0,0,60,用期望值看体系结构风格的表现,A,B,C=ABT,用期望值看体系结构风格的表现,A,B,C=ABT,体系结构选择矩阵法,对编译器采用体系选择矩阵法,支持体系结构风格的混合使选择体系结构的过程变得科学便于学习,易于掌握评价各种体系结构风格,提示开发中将遇到的问题对寻找新的体系结构有引导作用适合用CASE工具实现,体系选择矩阵法的优点,一定程度上限制了创新很多问题还有待进一步细化没有理论证明缺少大量的实践考验,体系选择矩阵法的缺点,The End!,