大家好。今天我来总结一下系统架构设计相关的考点。这块考点是重中之重,每年上午场客观题占20-25分左右,下午案例题也会考到,下午论文也会考到。大家要好好学学这部分内容。
一、软件架构概述
软件架构是指从需求分析到软件设计之间的过渡过程。架构设计就是需求分配,将满足需求的职责分配到组件上。
软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用(连接件)、指导构件集成的模式以及这些模式的约束组成。
软件架构的根本目的:解决好软件的复用、质量和维护问题。
软件架构设计包括提出架构模型,产生架构设计和进行设计评审等活动,是个迭代的过程。
软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量。
二、软件架构设计与生命周期
1.需求分析阶段:需求分析和SA设计面临的是不同的对象:一个是问题空间;另一个是解空间。从软件需求模型向SA模型的转换主要关注两个问题:如何根据需求模型构建SA 模型。如何保证模型转换的可追踪性。
2.设计阶段:是SA研究关注的最早和最多的阶段,这一阶段的SA研究主要包括:SA 模型的描述、SA 模型的设计与分析方法,以及对SA设计经验的总结与复用等。有关SA 模型描述的研究分为3个层次:SA的基本概念(构件和连接子)、体系结构描述语言ADL、SA模型的多视图表示。
3.实现阶段:最初SA研究往往只关注较高层次的系统设计、描述和验证。为了有效实现SA设计向实现的转换,实现阶段的体系结构研究表现在以下几个方面:
(1)研究基于SA 的开发过程支持,如项目组织结构、配置管理等。
(2)寻求从SA 向实现过渡的途径,如将程序设计语言元素引入SA 阶段、模型映射、构件组装、复用中间件平台等。
(3)研究基于SA 的测试技术。
4.构件组装阶段:在SA设计模型的指导下,可复用构件的组装可以在较高层次上实现系统,并能够提高系统实现的效率。在构件组装的过程中,SA 设计模型起到了系统蓝图的作用。研究内容包括如下两个方面。
(1)如何支持可复用构件的互联,即对SA 设计模型中规约的连接子的实现提供支持。
(2)在组装过程中,如何检测并消除体系结构失配问题。由连接子引起的失配、由于系统成分对全局在构件组装阶段的失配问题主要包括:由构件引起的失配体系结构的假设存在冲突引起的失配等。
5.部署阶段:SA 对软件部署作用如下:
(1)提供高层的体系结构视图来描述部署阶段的软硬件模型。
(2)基于SA 模型可以分析部署方案的质量属性,从而选择合理的部署方案。
6.后开发阶段:是指软件部署安装之后的阶段。这一阶段的SA 研究主要围绕维护、演化、复用等方面来进行。典型的研究方向包括动态软件体系结构、体系结构恢复与重建等。
三、构件
构件是一个独立可交付的功能单元,外界通过接口访问其提供的服务。
构件由一组通常需要同时部署的原子构件组成。一个原子构件是一个模块和组资源。原子构件是部署、版本控制和替换的基本单位。原子构件通常成组地部署,但是它也能够被单独部署。
构件和原子构件之间的区别在于,大多数原子构件永远都不会被单独部署尽管它们可以被单独部署。相反,大多数原子构件都属于一个构件家族,一次部署往往涉及整个家族。
构件的特性:
(1)独立部署单元。
(2)作为第三方的组装单元。
(3)没有(外部的)可见状态。
一个构件可以包含多个类元素,但是一个类元素只能属于一个构件。将一个类拆分进行部署通常没什么意义。
对象的特性:
(1)一个实例单元,具有唯一的标志。
(2)可能具有状态,此状态外部可见。
(3)封装了自己的状态和行为。
构件接口:接口标准化是对接口中消息的格式、模式和协议的标准化。它不是要将接口格式化为参数化操作的集合,而是关注输入输出的消息的标准化,它强调当机器在网络中互连时,标准的消息模式、格式、协议的重要性。
面向构件的编程(COP):关注于如何支持建立面向构件的解决方案。面向构件的编程需要下列基本的支持:
(1)多态性(可替代性)。
(2)模块封装性(高层次信息的隐藏)。
(3)后期的绑定和装载(部署独立性)。
(4)安全性(类型和模块安全性)。
构件技术:就是利用某种编程手段将一些人们所关心的,但又不便于让最终用户去直接操作的细节进行了封装同时对各种业务逻辑规则进行了实现,用于处理用户的内部操作细节。目前,国际上常用的构件标准主要有三大流派:
EJB(Enterprise Java Bean)规范:由Sun 公司制定,有三种类型的EJB,分别是会话Bean(Session Bean)、实体Bean(Entity Bean)和消息驱动Bean(Message-driven Bean)EJB实现应用中关键的业务逻辑,创建基于构件的企业级应用程序。
COM、DCOM、COM+:COM是微软公司的。DCOM是COM的进一步扩展,具有位置独立性和语言无关性。COM+并不是COM的新版本,是COM的新发展或是更高层次的应用。
CORBA标准:主要分为三个层次:
对象请求代理、公共对象服务和公共设施最底层是对象请求代理ORB,规定了分布对象的定义(接口)和语言映射,实现对象间的通讯和互操作,是分布对象系统中的“软总线”。
在ORB之上定义了很多公共服务,可以提供诸如并发服务、名字服务、事务(交易)服务、安全服务等各种各样的服务。
最上层的公共设施则定义了组件框架提供可直接为业务对象使用的服务,规定业务对象有效协作所需的协定规则。
四、软件架构风格
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义一个系统家族,即个架构定义、一个词汇表和一组约束。词汇表一中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。对软件架构风格的研究和实践促进对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。
架构设计的一个核心问题:能否达到架构级的软件复用。
架构风格定义了用于描述系统的术语表和一组指导构建系统的规则。
数据流风格:面向数据流,按照一定的顺序从前向后执行程序,代表的风格有:批处理序列、管道-过滤器。
调用/返回风格:一般是显式的调用。构件之间存在互相调用的关系,代表的风格有:主程序/子程序、面向对象、层次结构。
独立构件风格:构件之间是互相独立的,不存在显式的调用关系,而是通过某个事件触发、异步的方式来执行,代表的风格有:进程通信、事件驱动系统(隐式调用)。
虚拟机风格:自定义了一套规则供使用者使用使用者基于这个规则来开发构件,能够跨平台适配,代表的风格有:解释器、基于规则的系统。
仓库风格:以数据为中心,所有的操作都是围绕建立的数据中心进行的,代表的风格有:数据库系统、超文本系统、黑板系统。
数据流风格
批处理序列:构件为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在其前一步结束后才能开始,数据必须是完整的,以整体的方式传递。
管道-过滤器:每个构件都有一组输入和输出,构件读取输入的数据流,经过内部处理,产生输出数据流。前一个构件的输出作为后一个构件的输入,前后数据流关联。过滤器就是构件,连接件就是管道。
二者区别在于批处理前后构件不一定有关联,并且是作为整体传递,即必须前一个执行完才能执行下一个,管道-过滤器是前一个输出作为后一个输入,前面执行到部分可以开始下一个的执行。
调用/返回风格
主程序/子程序:单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。过程调用作为交互机制,充当连接件的角色。
面向对象:构件是对象,对象是抽象数据类型的实例。连接件即使对象间交互的方式对象是通过函数和过程的调用来交互的。
层次结构:构件组成一个层次结构,连接件通过决定层间如何交互的协议来定义。每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。修改某一层,最多影响其相邻的两层(通常只能影响上层)
层次结构优点:
1、支持基于可增加抽象层的设计,允许将一个复杂问题分解成一个增量步骤序列的实现。
2、不同的层次处于不同的抽象级别,越靠近底层,抽象级别越高。
3、由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件复用提供了强大的支持。
层次结构缺点:
1、并不是每个系统都可以很容易的划分为分层的模式。
2很难找到一个合适的、正确的层次抽象方法。
独立构件风格
进程通信:构件是独立的进程,连接件是消息传递。构件通常是命名过程消息传递的方式可以是点对点、!异步或同步方式,以及远程过程(方法)调用等。
事件驱动系统(隐式调用):构件不直接调用一个过程,而是触发或广播个或多个事件。构件中的过程在一个或多个事件中注册,当某个事件被触发时系统自动调用在这个事件中注册的所有过程。一个事件的触发就导致了另一个模块中的过程调用。这种风格中的构件是匿名的过程,它们之间交互的连接件往往是以过程之间的隐式调用来实现的。
主要优点是为软件复用提供了强大的支持,为构件的维护和演化带来了方便缺点是构件放弃了对系统计算的控制。
虚拟机风格
解释器:通常包括一个完成解释工作的解释引擎、一个包含将被解释的代码的存储区一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行的进度的数据结构。具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,缺点是执行效率低。
基于规则的系统:包括规则集、规则解释器、规则/数据选择器和工作内存一般用在人工智能领域和DSS中。
仓库(数据共享)风格
数据库系统:构件主要有两大类一类是中央共享数据源,保存当前系统的数据状态;另一类是多个独立处理单元,处理单元对数据元素进行操作。
黑板系统:包括知识源、黑板和控制三部分。知识源包括若干独立计算的不同单元,提供解决问题的知识。知识源响应黑板的变化,也只修改黑板;黑板是一个全局数据库,包含问题域解空间的全部状态,是知识源相互作用的唯媒介;知识源响应是通过黑板状态的变化来控制的。黑板系统通常应用在对于解决问题没有确定性算法的软件中(信号处理、问题规划和编译器优化等)。
超文本系统:构件以网状链接方式相互连接,用户可以在构件之间进行按照人类的联想思维方式任意跳转到相关构件。是一种非线性的网状信息组织方法它以节点为基本单位,链作为节点之间的联想式关联。通常应用在互联网领域。
现代编译器的集成开发环境一般采用数据仓库(即以数据为中心的架构风格架构风格进行开发,其中心数据就是程序的语法树。
闭环控制风格
当软件被用来操作一个物理系统时,软件与硬件之间可以粗略的表示为一个反馈循环,这个反馈循环通过接受一定的输入,确定一系列的输出,最终使环境达到一个新的状态,适合于嵌入式系统,涉及连续的动作与状态。
C2体系结构风格
通过连接件绑定在一起的按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下:
(1)系统中的构件和连接件都有一个顶部和一个底部。
(2)构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的。
(3)一个连接件可以和任意数目的其它构件和连接件连接。
(4)当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
架构风格总结
例题:
答案:A、B、C
答案:A、A
答案:A、D
五、层次架构风格
两层C/S架构
客户端和服务器都有处理功能,现在已经不常用,原因有:开发成本较高、客户端程序设计复杂、信息内容和形式单一、用户界面风格不一软件移植困难、软件维护和升级困难、新技术不能轻易应用、安全性问题、服务器端压力大难以复用。
三层C/S架构
将处理功能独立出来,表示层和数据层都变得简单。表示层在客户机上,功能层在应用服务器上,数据层在数据库服务器上。即将两层C/S架构中的数据从服务器中独立出来了。其优点下面四点:
1、各层在逻辑上保持相对独立,整个系统的逻结构更为清晰,能提高系统和软件的可维护性和可扩展性。
2、允许灵活有效的选用相应的平台和硬件系统,具有良好的可升级性和开放性。
3、各层可以并行开发,各层也可以选择各自最适合的开发语言。
4、功能层有效的隔离表示层与数据层,为严格的安全管理奠定了坚实的基础,整个系统的管理层次也更加合理和可控制。
三层C/S架构设计的关键在于各层之间的通信效率,要慎重考虑三层间的通信方法、通信频度和数据量,否则即使分配给各层的硬件能力很强,性能也不高。
三层B/S架构
三层C/S架构的变种,将客户端变为用户客户端上的浏览器将应用服务器变为网络上的WEB服务器又称为0客户端架构,虽然不用开发客户端,但有很多缺点:
1、B/S架构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。
2、安全性难以控制。
3、在数据查询等响应速度上,要远远低于C/S架构。
4、数据提交一般以页面为单位,数据的动态交互性不强,不利于OLTP应用。
混合架构风格:
内外有别模型:企业内部使用C/S,外部人员访问使用B/S。
查改有别模型:采用B/S查询,采用C/S修改。混合架构实现困难,且成本高。
富互联网应用RIA
弥补三层B/S架构存在的问题,RIA是一种用户接口,比用HTML实现的接口更加健壮,且有可视化内容,本质还是网站模式,其优点如下:
1、RIA结合了C/S架构反应速度快、交互性强的优点与B/S架构传播范围广及容.易传播的特性。
2、RIA简化并改进了B/S架构的用户交互。
3、数据能够被缓存在客户端,从而可以实现一个比基于HTML的响应速度更快目数据往返于服务器的次数更少的用户界面。
4、本质还是0客户端,借助于高速网速实现必要插件在本地的快速缓存,增强页面对动态页面的支持能力,典型的如小程序。
MVC架构
(1)控制器(Controller):是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
(2)模型(Model):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。模型表示业务数据和业务逻辑。
(3)视图(View):是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。
MVP架构
MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了完全切断view跟Model之间的联系,由Presenter充当桥梁,做到view-Model之间通信的完全隔离。MVP特点如下:
1、M、V、P之间双向通信。
2、View与Model不通信,都通过 Presenter传递。Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。
3、View 非常薄,不部署任何业务逻辑,称为”被动视图”(PassiveView),即没有任何主动性,而Presenter非常厚,所有逻辑都部署在那里。
4、Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,这样就可以重用。
MVVM架构
MVVM模式和MVC模式类似,主要目的是分离视图(view)和模型(Model),有几大优点:
1、低耦合,视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的“view”上,当view变化的时候Model可以不变,当Model变化的时候view也可以不变。
2、可重用性,可以把一些视图逻辑放在一个ViewModel里面让很多view重用这段视图逻辑。
3、独立开发,开发人员可以专注于业务逻辑和数据的开发(viewModel),设计人员可以专注于页面设计。
4、可测试,界面向来是比较难于测试的,而现在测试可以针对ViewModel来写。
六、面向服务架构风格
SOA:是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通信,不涉及底层编程接口和通信模型。
在SOA中,服务是一种为了满足某项业务需求的操作、规则等的逻辑组合它包含一系列有序活动的交互,为实现用户目标提供支持。
SOA并不仅仅是一种开发方法,还具有管理上的优点,管理员可直接管理开发人员所构建的相同服务。多个服务通过企业服务总线提出服务请求,由应用管理来进行处理,如下:
实施SOA的关键目标是实现企业IT资产重用的最大化,在实施SOA过程中要牢记以下特征:可从企业外部访问、随时可用了服务请求能被及时响应)、粗粒度接口(粗粒度提供一项特定的业务功能,而细粒度服务代表了技术构件方法)、服务分级、松散耦合(服务提供者和服务使用者分离)、可重用的服务及服务接口设计管理、标准化的接口(WSDL、SOAP、XML是核心)支持各种消息模式、精确定义的服务接口。
从基于对象到基于构件再到基于服务,架构越来越松散耦合,粒度越来越粗接口越来越标准。
基于服务的构件与传统构件的区别有四点:
1、服务构件粗粒度,传统构件细粒度居多。
2、服务构件的接口是标准的,主要是WSDL接口,而传统构件常以具体API形式出现。
3、服务构件的实现与语言是无关的,而传统构件常绑定某种特定的语言。
4、服务构件可以通过构件容器提供QoS的服务,而传统构件完全由程序代码直接控制。
SOA中应用的关键技术如下表:
UDDI:是一套基于WEB的、分布式的、为Webservice提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的webservice注册,以使别的企业能够发现的访问协议的实现标准,用于WEB服务注册统一描述、发现及集成。
WsDL(Web service描述语言):将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程调用),用于描述服务。
SOAP(简单对象访问协议):是用于交换XML编码信息的轻量级协议,用于传递信息。
XML(可扩展标记语言):是webservice平台中表示数据的基本格式,用于数据交换。
WEB Service:服务提供者、服务注册中心(中介,提供交易平台,可有可无)服务请求者。服务提供者将服务描述发布到服务注册中心,供服务请求者查找,查找到后,服务请求者将绑定查找结果。如图
服务注册表
(1)服务注册:应用开发者(服务提供者)在注册表中公布服务的功能。
(2)服务位置:服务使用者(服务应用开发者),帮助他们查询注册服务,寻找符合自身要求的服务。
(3)服务绑定:服务使用者利用检索到的服务接口来编写代码所编写的代码将与注册的服务绑定,调用注册的服务,以及与它们实现互动。
企业服务总线ESB:简单来说是一根管道,用来连接各个服务节点。ESB的存在是为了集成基于不同协议的不同服务,ESB 做了消息的转化、解释以及路由的工作,以此来让不同的服务互联互通。包括:客户端(服务请求者)、基础架构服务(中间件)、核心集成服务(提供服务)。
ESB特点:SOA的一种实现方式,ESB在面向服务的架构中起到的是总线作用,将各种服务进行连接与整合;描述服务的元数据和服务注册管理;在服务请求者和提供者之间传递数据,以及对这些数据进行转换的能力,并2支持由实践中总结出来的一些模式如同步模式、异步模式等;发现、路由、匹配和选择的能力,以支持服务之间的动态交互,解耦服务请4求者和服务提供者。高级一些的能力,包括对安全的支持、服务质量保证、可管理性和负载平衡等。
例题:
答案:C、D
好了,今天就总结到这里了。大家一定要多准备准备这块内容。
生活的真谛就在日常一点一滴的奋斗里。加油!
最后依旧是请希望大家能给作者点个关注,谢谢大家!各位老板有钱的捧个人场,没钱的也捧个人场,谢谢各位老板!