halo~我是bay_Tong桐小白
本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言、指点
最近更新:
目前还没有一个公认的关于软件体系结构的定义
Bass、Clements和Kazman给出了如下定义:“一个程序或计算机系统的软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件、构件的外部可见属性以及它们之间的相互关系。外部可见属性则是指软件构件提供的服务、性能、使用特性、错误处理、共享资源使用等。”
【这一定义强调在任一体系结构表述中“软件构件”的角色】
构件:是面向软件体系架构的可复用软件模块。构件是可复用的软件组成成份,可被用来构造其他软件。它可以是被封装的对象类、类树、一些功能模块、软件框架、软件构架(或体系结构)、文档、分析件、设计模式等
Dewayne Perry和A1exander Wo1f曾这样定义:软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。
- 处理构件负责对数据进行加工
- 数据构件是被加工的信息
- 连接构件把体系结构的不同部分组合连接起来
【这一定义注重区分处理构件、数据构件和连接构件】
在体系结构设计的环境中,软件构件可以简单到程序模块或者面向对象的类,也可以扩充到包含数据库和能够完成客户与服务器网络配置的中间件
体系结构设计是一系列决策和基本原理的集合,这些决策的目标在于开发高效的软件体系结构。在体系结构设计中所强调的基本原理是系统的可理解性、可维护性和可扩展性
模式: 软件设计模式是从软件设计过程中总结出来的,是针对特定问题的解决方案
建筑师C.Alexander对模式给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题及该问题解决方案的核心
在软件系统中可以将模式划分为以下三类:
风格: 同一个问题可以有不同的解决问题的方案或模式,但我们根据经验,通常会强烈倾向于采用特定的模式,这就是风格。包括:
体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表(包含一些构件和连接件类型)和一组约束,这组约束指出系统是如何将这些构件和连接件组合起来。体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组成一个完整的系统
框架 :随着应用的发展和完善,某些带有整体性的应用模式被逐渐固定下来,形成特定的框架,包括基本构成元素和关系。框架是特定应用领域问题的体系结构模式,框架定义了基本构成单元和关系后,开发者就可以集中精力解决业务逻辑问题
在组织形式上,框架是一个待实例化的完整系统,定义了软件系统的元素和关系,创建了基本的模块,定义了涉及功能更改和扩充的插件位置。典型的框架例子有MFC框架和Struts框架
【通用模型可以应用于许多不同类型的系统。此部分选择有代表性的结构进行总结。体系结构的模式选择设计模式做阐述,风格选择典型的三种体系结构风格做阐述,框架选择MVC、J2EE、PCMEF与PCBMER框架做阐述】
当输入数据经过一系列的计算和操作构件的变换形成输出数据时,可以应用这种体系结构
管道/过滤器、批处理序列都属于数据流风格
管道/过滤器结构
管道/过滤器结构拥有一组被称为过滤器的构件,这些构件通过管道连接,管道将数据从一个构件传送到下一个构件。每个过滤器独立于其上游和下游的构件而工作,过滤器的设计要针对某种形式的数据输入,并且产生某种特定形式的数据输出。过滤器不需要了解与之相邻的过滤器的工作
管道/过滤器风格优点:
管道/过滤器风格缺点:
批处理序列结构
如果数据流退化成为单线的变换,则成为批处理序列。这种结构接收一批数据,然后应用一系列连续的构件(过滤器)变换它
该体系结构风格便于设计出易于修改和扩展的程序结构,此类结构存在3种子风格
主程序/子程序体系结构
这种传统的程序结构将功能分解为一个控制层次,其中“主”程序调用一组程序构件,这些程序构件又去调用别的程序构件。如下图所示,这种结构总体上为树状结构,可以在底层存在公共模块
当主程序/子程序体系结构的构件分布在网络上的多个计算机上时,则称主程序对子程序的调用为远程过程调用。这种系统的目标是要通过将运算分布到多台计算机上来充分利用多台处理器,最终达到提高系统性能的目的
主程序/子程序体系结构的优点:
主要缺点:
面向对象风格
系统的构件封装了数据和必须应用到该数据上的操作,构件间通过消息传递进行通信与合作。与主程序/子程序的体系结构相比,面向对象风格中的对象交互会复杂一些
面向对象风格与网络应用的需求在分布性、自治性、协作性、演化性等方面具有内在的一致性
面向对象风格的优点:
面向对象风格的缺点:
杂项:
- OMG:对象管理组,于1989年由一些厂商创建,其目的是建立网络中分布式对象(组件)的标准结构。OMG组织是一个国际性的非盈利组织,其职责是为应用开发提供一个公共框架,制订工业指南和对象管理规范,加快对象技术的发展
- OMA:对象管理体系结构,由OMG于1990年提出,定义了软件系统参考模型,包括对象模型和参考模型两部分 OMA对象模型定义如何描述异质环境环境中的分布式对象 OMA参考模型描述对象之间的交互
- CORBA:公共对象请求代理体系结构,以对象管理体系结构(OMA)为基础,是由OMG组织制订的一种标准的面向对象应用程序体系规范。或者说CORBA体系结构是对象管理组(OMG)为解决分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案
层次结构风格
整个系统被组织成一个层次结构,每一层为上层提供服务,并作为下一层的客户
这种风格支持基于抽象程度递增的设计。允许将复杂问题分解成一个增量步骤序列的实现。由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件复用提供了强大的支持
层次结构具有以下优点:
层次结构缺点如下:
数据库系统、超文本系统和黑板系统都属于仓库风格。在这种风格中,数据仓库(如文件或数据库)位于这种体系结构的中心,其他构件会经常访问该数据仓库,并对仓库中的数据进行增加、修改或删除操作
客户软件访问中心仓库。某下情况下仓库是被动的,也就是说,客户软件独立于数据的任何变化或其他客户软件的动作而访问数据,此方式相当于传统型数据库系统
该方式的一个变种是将中心存储库变换成“黑板”,黑板构件负责协调信息在客户间的传递,当用户感兴趣的数据发生变化时,它将通知客户软件
黑板系统的组成:
黑板系统的传统应用是信号处理领域(如语音和模式识别),另一应用是松耦合代理数据共享存取
黑板系统的优点:
黑板系统的不足:
MVC框架即模型-视图-控制器(model-view-controller)框架,它强调将用户输入、数据模型和数据表示的方式分开设计,一个交互式应用系统由模型(model)、视图(view)和控制器(controller)3个部件组成,分别对应于内部数据、数据表示和输入/输出控制部分
模型是核心数据和功能,视图只关心显示数据,控制只关心用户输入,这种结构由于将数据和业务规则从表示层分开,因此可以最大化地重用代码
除通用模型外,对于特别的应用还需要特别的体系结构模型,虽然这些系统实例的细节会有所不同,但共同的体系结构在开发新系统时是能够复用的,这些体系结构模型称为领域相关的体系结构
概念: 类属模型是从许多实际系统中抽象出来的一般模型,它封装了这些系统的主要特征
简单说可以理解为,类属模型将各种已经完成好的一般模型(也就是具有某一种小功能的组件)组合在一起,利用其它不同的结构进行联系和组织,完成具有某一特定领域的系统功能的实现,是一种综合性质的体系结构
典型用例: 类属模型的一个最著名的例子是编译器模型,由这个模型已开发出了数以千计的编译器。编译器一般包括以下模块:
构成编译器的组件可以依照不同的体系结构模型来组织,编译器能使用组合模型来实现。如总体上可采用数据流风格,并将符号表作为容器来共享数据
这个模型现在仍然被广泛使用,程序编译时没有用户交互的影响。但当编译器要与其它语言处理工具(如结构化的编辑系统、交互式调试器、高质量打印机等)集成时效率会很低,这种情形下一般系统组件可以使用基于容器(仓库)模型来组织
概念: 参考模型源于对应用领域的研究,它描述了一个理想化的包含了系统应具有的所有特征的软件体系结构。它是更抽象且是描述一大类系统的模型,并且也是对设计者有关某类系统的一般结构的指导
典型用例: 典型的例子由国际化标准组织(ISO)与1978年提出的计算机网络结构模型——开放式系统互连参考模型(OSI)参考模型。它描述了开放系统互连的标准,如果系统遵从这个标准,就可以与其它遵从该标准的系统互连
PS: 以上两种不同类型的模型之间并不存在严格的区别。也可以将类属模型视为参考模型。
两者区别之一是类属模型可以直接在设计中复用,而参考模型一般是用于领域概念间的交流和对可能的体系结构做出比较;另外,类属模型通常是经过“自下而上”地对已有系统的抽象,而参考模型是“由上到下”地产生的
集中式计算与分布式计算
分布式计算模型的优点
概念: 是分布式系统的一个最简单的模型,系统由许多进程组成,这些进程可以在不同的处理器上并行运行,可以极大地提高系统的性能
适用场合: 由于大型实时系统对响应时间要求较高,这种模型在大型实时系统中比较常见。大型实时系统需要实时采集信息,并利用采集到的信息进行决策,然后发送信号给执行机构。
概念: 客户机/服务器(client/server,C/S)体系结构是基于资源不对等,且为实现共享而提出来的,定义了工作站如何与服务器相连,以将数据和应用分布到多个处理机上
主要组成部分:
在C/S体系结构中,客户机可以通过远程调用来获取服务器提供的服务,因此,客户机必须知道可用的服务器的名字及它们所提供的服务,而服务器不需要知道客户机的身份,也不需要知道有多少台服务器在运行
逻辑结构的三层划分: 在逻辑上,通常将应用系统划分为三层,即数据管理层、应用逻辑层、表示层
传统的C/S体系结构为二层的C/S体系结构。在这种体系结构中,一个应用系统被划分为客户机和服务器两部分
二层C/S体系结构可以有两种形态:
胖客户机模型能够利用客户机的处理能力,比瘦客户机模型在分布处理上更有效。胖客户机的数据处理流程如下:
随着企业规模的日益扩大,软件复杂程度的不断提高,胖客户机模型逐渐暴露出缺点:
为了避免选择瘦客户机模型产生的伸缩性和性能的问题以及选择胖客户机模型产生的系统管理上的问题,产生了三层C/S体系结构。三层C/S体系结构中增加了一个应用服务器,可以将整个应用逻辑驻留在应用服务器上,只有表示层存在于客户机上
三层C/S体系结构在系统上与逻辑结构上相似,被划分为表示层、应用逻辑层、数据层三个部分
三层C/S体系结构数据处理流程如下:
三层C/S结构具有的优点:
【PS:需注意的是三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力很强,整体性能可能也会达不到要求。此外设计时必须慎重考虑三层间的通信方法、通信频度、数据量。这和提高各层的独立性一样是三层C/S结构的关键问题】
浏览器/服务器(B/S)风格是三层应用结构的一种实现方式
B/S体系结构主要利用WWW浏览器技术,结合浏览器的多种脚本语言,用通用浏览器实现了原来需要复杂的专用软件才能实现的强大功能,并节约了开发成本。从某种程度上说B/S结构是一种全新的软件体系结构
B/S体系结构具有的优点:
B/S体系结构与C/S体系结构关系与区别:
B/S架构是从C/S架构改进而来,可以说是三层C/S架构,由此可见两者关系不一般。B/S从C/S中脱离而出,后来随着WEB技术的飞速发展以及人们对网络的依赖程度加深,B/S一举成为当今最流行的网络架构。两种架构都在各自岗位上虎虎生威,它们各有千秋,都是非常重要的网络架构。在响应速度,用户界面,数据安全等方面,C/S强于B/S,但是在业务扩展和适用www条件下,B/S明显胜过C/S。可以这么说,B/S的强项就是C/S的弱项,反之亦然。它们各有优缺点,相互无法取代。
C/S结构与B/S结构两种模式各自拥有其特色优势,在不同的系统环境与操作平台下,选择较为接近或交叉进行混合模式的使用,可以保证数据的敏感性、安全性和稳定发展,还可以加强对数据库的修改与新增记录的操作。对客户端程序进行保护,提高资源数据的交互性能,实现系统维护成本较低、维护方式较简便、布局更合理、网络数据使用效率较高的目的,采用C/S与B/S混合模式才是最佳方案
在B/S模型中客户机和服务器的地位是不同的,客户机必须要知道服务器的存在及其所提供的服务,而服务器则不需要知道客户机的存在,设计者必须决定服务在哪里提供,要规划系统的伸缩性,当有较多客户机增加到系统中时需要考虑如何将服务器上的负载分布开来。分布式系统设计旨在去掉客户机与服务器之间的差别。
分布式环境下,构件是一些灵活的软件模块,它们可以位置透明、语言独立和平台独立地互相发送消息,实现请求服务。构件之间并不存在客户机与服务器的界限,接受服务者扮演客户机的角色,提供服务者就是服务器
分布式对象的实质是在分布式异构环境下建立应用系统框架和对象构件,它将应用服务分割成具有完整逻辑含义的独立子模块(称为构件),各个子模块可放在同一台服务器或分布在多台服务器上运行,模块之间通过中间件互相通信
PS:传统通信方式与中间件通信方式
- 传统通信方式:通过一种集中管理式的固定的服务接口,或进行能力有限的远程过程调用,这种方式不仅开销大,也难于开发,要进行成功的软件系统集成也存在很多障碍
- 中间件通信方式:如硬件总线允许不同的卡插于其上以支持硬件设备之间的通信一样,通常将这个中间件称为软件总线或对象请求代理,它的作用是在对象之间提供一个无缝接口
分布式对象技术的应用目的是为了降低主服务器的负荷、共享网络资源、平衡网络中计算机业务处理的分配,提高计算机系统协同处理的能力,从而使应用的实现更为灵活
当前主流的分布式对象技术规范有:OMG的CORBA、Microsoft的.NET、Sun公司的J2EE等,它们均支持服务端构件的开发,都有各自的特点
代理可以用于构建带有隔离组件的分布式软件系统,该软件通过远程服务调用进行交互。代理者负责协调通信,诸如转发请求以及传递结果和异常等
1991年OMG基于面向对象技术给出了以对象请求代理(ORB)为中心的分布式应用体系结构(CORBA)
其中ORB是一个关键的通信机制,它以实现互操性为主要目标,处理对象之间的消息分布,在ORB之上有4个对象接口:
CORBA有很广泛的应用,它易于集成各厂商的不同计算机,从大型机一直到微型内嵌式系统的终端桌面,是针对大中型企业应用的优秀的中间件。最重要的是,它使服务器真正能够实现高速度、高稳定性处理大量用户的访问
持续更新中……
我是桐小白,一个摸爬滚打的计算机小白