一、考情分析
二、考点精讲
2.1软件架构的概念
2.1.1什么是架构(暂无定论)
架构设计就是需求分配,即将满足需求的职责分配到组件上。
软件架构风格是描述某-特定应用领域中系统组织方式的惯用模式。架构风格定义-个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。
架构的本质:
软件架构为软件系统提供了一个结构、行为和属性的高级抽象。
软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束。
架构的作用:
软件架构是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性。
软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础。
软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量。
软件架构=软件体系结构
架构设计就是需求分配,即将满足需求的职责分配到组件上。
2.1.2 架构“4+1”视图
结构模型:以架构的构件、连接件和其他概念来刻画结构
框架模型:不太侧重描述结构的细节而更侧重于整体的结构
动态模型:系统的“大颗粒”的行为性质
过程模型:构建系统的步骤和过程
功能模型:由一组功能构件按层次组成,下层向.上层提供服务
2.2软件架构风格
架构风格定义了用于描述系统的术语表和一组指导构建系统的规则
2.2.1数据流风格
(1)批处理序列
构件为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在其前一步结束后才能开始,数据必须是完整的,以整体的方式传递。
(2)管道-过滤器
每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常是通过对输入数据流的变换或计算来完成的,包括通过计算和增加信息以丰富数据、通过浓缩和删除以精简数据、通过改变记录方式以转化数据和递增地转化数据等。这里的构件称为过滤器,连接件就是数据流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。
2.2.2调用/返回风格
(1)主程序/子程序
单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。过程调用作为交互机制,即充当连接件的角色。调用关系具有层次性,其语义逻辑表现为主程序的正确性取决于它调用的子程序的正确性。
(2)面向对象
构件是对象,对象是抽象数据类型的实例。在抽象数据类型中,数据的表示和它们的相应操作被封装起来,对象的行为体现在其接受和请求的动作。连接件即是对象间交互的方式,对象是通过函数和过程的调用来交互的。
(3)层次结构
概念:构件组织成一个层次结构,连接件通过决定层间如何交互的协议来定义。每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。通过层次结构,可以将大的问题分解为若干个渐进的小问题逐步解决,可以隐藏问题的复杂度。修改某一层, 最多影响其相邻的两层(通常只能影响上层)。
2.2.3独立构件风格
(1)进程通信
构件是独立的过程,连接件是消息传递。构件通常是命名过程,消息传递的方式可以是点对点、异步或同步方式,以及远程过程(方法)调用等。
(2)事件驱动系统(隐式调用)
构件不直接调用一个过程,而是触发或广播一个或多个事件。构件中的过程在-个或多个事件中注册,当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。一个事件的触发就导致了另一个模块中的过程调用。这种风格中的构件是匿名的过程,它们之间交互的连接件往往是以过程之间的隐式调用来实现的。主要优点是为软件复用提供了强大的支持,为构件的维护和演化带来了方便;其缺点是构件放弃了对系统计算的控制。
2.2.4虚拟机风格
(1) 解释器
解释器通常包括一个完成解释 工作的解释引擎、一个包含将被解释的代码的存储区、一个记录解释引擎当前工作状态的数据结构,以及-个记录源代码被解释执行的进度的数据结构。具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,其缺点是执行效率比较低。
(2)基于规则的系统
基于规则的系统包括规则集、规则解释器、规则/数据选择器和工作内存, - -般用在人工智能领域和DSS中。
2.2.5仓库风格(以数据为中心的风格)
(1)数据库系统
构件主要有两大类, 一类是中央共享数据源,保存当前系统的数据状态;另一类是多个独立处理单元,处理单元对数据元素进行操作。
(2)黑板系统
包括知识源、黑板和控制三部分。知识源包括若干独立计算的不同单元,提供解决问题的知识。知识源响应黑板的变化,也只修改黑板;黑板是一个全局数据库,包含问题域解空间的全部状态,是知识源相互作用的唯一媒介; 知识源响应是通过黑板状态的变化来控制的。黑板系统通常应用在对于解决问题没有确定性算法的软件中(信 号处理、问题规划和编译器优化等)。
(3)超文本系统
构件以网状链接方式相互连接,用户可以在构件之间进行按照人类的联想思维方式任意跳转到相关构件。超文本是一种非线性的网状信息组织方法,它以结点为基本单位,链作为结点之间的联想式关联。超文本系统通常应用在互联网领域。
现代集成编译环境一般采用这种架构风格。
2.2.6闭环控制架构(过程控制)
当软件被用来操作一个物理系统时,软件与硬件之间可以粗略地表示为一个反馈循环,这个反馈循环通过接受一定的输入,确定一系列的输出,最终使环境达到一个新的状态。适合于嵌入式系统,涉及连续的动作与状态。
适合于嵌入式系统,用于解决简单闭环控制问题。
经典应用:空调温控,定速巡航。
2.2.7 C2风格
C2架构的基本规则:
构件和连接件都有一个顶部和一个底部。
构件的顶部要连接到连接件的底部,构件的底部要连接到连接件的顶部,构件之间不允许直连。
一个连接件可以和任意数目的其它构件和连接件连接。
当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
2.3典型架构应用
2.3.1层次架构
(1) MVC
- Model (模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
- View (视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
- Controller (控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
J2EE体系结构中:
- 视图(View) : JSP
- 控制(Controller) : Servlet
- 模型(Model) : Entity Bean、Session Bean
(2) MVP
MVP与MVC关系: MVP是MVC的变种。
MVP的优点:
- 模型与视图完全分离,我们可以修改视图而不影响模型。
- 可以更高效地使用模型,因为所有的交互都发生在一个地方一- Presenter 内部。
- 我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
- 如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。
(3) MVVM
2.3.2富互联网应用(RIA)
RIA结合了C/S架构反应速度快、交互性强的优点,以及B/S架构传播范围广及容易传播的特性。
RIA简化并改进了B/S架构的用户交互。
数据能够被缓存在客户端,从而可以实现-个比基于HTML的响应速度更快且数据往返于服务器的次数更少的用户界面。
优点:反应速度快、易于传播、交互性强。
2.3.3物联网分层结构
2.3.4大数据分层结构
2.3.5基于服务的架构(SOA)
服务是一种为了满足某项业务需求的操作、规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持。
(3) SOA层次和特点
服务是标准化程度更高的构件。
服务构件粗粒度,传统构件细粒度居多(粗粒度)。
服务构件的接口是标准的,主要是WSDL接口,传统构件常以具体API形式出现(标准化结构)。
服务构件的实现与语言无关,传统构件绑定某种特定语言。
服务构件可以通过构件容器提供QoS的服务,传统构件完全由程序代码直接控制(松耦合) 。
WSDL就是WebService接口对应的WSDL文件,该文件通过xml格式说明如何调用,可以看作WebService的接口文档(使用说明书)。
REST: REST (Representational State Transfer,表述性状态转移)是一种只使用HTTP和XML进行基于Web通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。
REST的5个原则:
- 网络上的所有事物都被抽象为资源。
- 每个资源对应一个唯一的资源标识。
- 通过通用的连接件接口对资源进行操作。
- 对资源的各种操作不会改变资源标识。
- 所有的操作都是无状态的。
ESB:消息中间件、服务总线,它是面向服务架构的一种实现方式。
[服务请求者与服务提供者之间解耦]
提供位置透明性的消息路由和寻址服务
提供服务注册和命名的管理功能
支持多种的消息传递范型
支持多种可以广泛使用的传输协议
支持多种数据格式及其相互转换
提供日志和监控功能
2.3.6微服务混合风格
(1) 什么是微服务
微服务顾名思义,就是很小的服务,所以它属于面向服务架构的一种。
(2)微服务的优势
(3)微服务面临的挑战
- 分布式环境下的数据一致性[更复杂]
- 测试的复杂性(服 务间依赖测试]
- 运维的复杂性
(4)微服务与SOA的对比