转自:https://blog.csdn.net/mabingyao/article/details/104663519
第三章 软件体系结构风格(下)
继 第三章 软件体系结构风格(上),再简单介绍几种软件体系结构风格,并了解异构体系结构集成。关于这本书中软件体系结构风格的初步学习先到这一步,以后根据具体实践会对某些具体风格进行扩充和丰富。
3.10 反馈控制环体系结构风格
- 反馈控制环的思想源自过程控制理论,从过程控制角度来分析和解释构件之间的交互,同时应用这种交互改善系统性能。
- 反馈控制环是一种特定的数据流结构,传统数据流结构是线性的,控制连续循环过程的体系结构应该是环形的 。
如上图所示。反馈控制环系统主要包括三个部分:
(1)过程:操纵过程变量的相关机制
(2)数据元素:指连续更新的过程变量。包括输入变量、控制变量、操纵变量、相关参考值
(3)控制器:通过控制规则来修正变量,收集过程的实际状态和目标状态,调节变量以驱动实际状态朝目标状态前进
3.过程控制是连续的,可以利用各种构件和相关规则设计反馈控制环系统。反馈控制环系统可以处理复杂的自适应问题,机器学习就是典型实例,机器学习模型如下图
3.11 客户机/服务器体系结构风格(C/S)
3.11.1 两层C/S体系结构
- C/S主要是针对资源不对等问题而提出的一种共享策略。
- 客户机与服务器的连接机制:
(1)配置在同一台计算机上,采用消息、共享存储区和信号量等方法高效地实现通信连接
(2)配置在分布式环境中,需要通过远程过程通信(RPC)协议来进行通信 - C/S体系结构主要包括服务器、客户机和网络三部分
数据和业务处理分布在一定范围内的多个构件上,包括客户及程序中的构件和服务器程序中的构件。
C/S系统可以分为前台客户机程序和后台服务器程序两部分。
(1)服务器程序负责管理客户机程序的数据
(2)客户机程序负责完成与用户的交互,发送请求消息,接受和分析从服务器返回的数据
(3)是一种胖客户机-瘦服务器的动作模式 - 两层C/S体系结构的处理流程
(1)客户机程序是表示层,包括用户界面和业务处理程序
(2)服务器程序是数据层,包括中心数据库、数据查询程序、数据存储程序和数据更新程序
流程如下图: - 一种特殊的C/S体系结构——代理风格
服务器将服务和数据发布到代理服务器上,客户机通过代理服务器来访问服务,提高了系统安全性。代理风格的典例包括CORBA和Web服务等 - C/S体系结构的优点:
(1)客户机构件和服务器构件运行在不同计算机,有利于分布式数据的组织和处理
(2)构件之间的位置相互透明
(3)允许客户机程序和服务器程序运行在不同操作系统上
(4)构件之间相互独立并且充分隔离
(5)大规模业务逻辑被分到通过网络相连的多个低成本计算机上,降低整体开销 - 存在的问题
(1)开发成本高
(2)开发时,大部分工作集中在客户机程序,增加设计复杂度
(3)信息内容和形式单一
(4)需要开发人员现场升级
(5)两层C/S采用单一服务器,以局域网为中心,难以扩展到Internet和Intranet
(6)数据安全性不高
3.11.2 三层C/S体系结构
为克服两层C/S结构的缺点,将客户机和服务器中的部分业务逻辑抽取出来,形成功能层,放在应用服务器上,即三层C/S体系结构。
- 三层C/S体系结构(“瘦客户机”)
(1)表示层:系统和用户之间的接口,实现用户与系统之间的对话,用于检查从键盘和鼠标等设备输入的数据,显示输出结果。
(2)功能层:负责处理所有逻辑业务。
(3)数据层:数据库管理系统,负责读写数据。
- 改进点
(1)应用服务器负责处理客户机与数据服务器之间的交互,而非客户机直接与中心数据库相连,减少了数据库服务器连接的客户机数目,提高系统安全性。
(2)将数据存取构件放到应用服务器上,客户机只存放系统的表示层,客户机不必关心数据操作细节,便于实现软件的安装与维护。
(3)减少了数据库服务器的工作量,应用服务器可以建立数据备份,提高系统可靠性。
- 三层C/S体系结构的处理流程
- 相比于两层C/S体系结构的优点:
(1)如果合理划分三层结构的功能,逻辑会更加清晰,提高系统可维护性和可扩充性
(2)实现C/S结构时,可以有效选择运行平台和硬件环境,从而使每一层具有清晰的逻辑结构、良好的负荷处理能力和较好的开发性
(3)三层C/S结构中,可以分别选择合适的编程语言并行开发每一层的逻辑功能,提高开发效率
(4)系统具有较高的安全性 - 实现三层C/S结构时要注意的问题:
(1)如果各层之间通信效率不高,即使每一层硬件配置很高,整体性能也不会太高
(2)必须慎重考虑三层之间的通信方法、通信频率、传输数据量
3.12 浏览器/服务器体系结构风格
- 浏览器/服务器(Browser/Server,B/S)是三层体系结构的一种实现方式,主要包括:浏览器、Web服务器和数据库服务器。
- 与三层C/S结构的解决方案相比,B/S体系结构在客户机上采用WWW浏览器,将Web服务器作为应用服务器。
用户运行应用程序时,工作流程:
(1)用户在客户端的浏览器中输入相应URL,向Web服务器提出HTTP请求
(2)Web服务器收到请求,调用相关应用程序,同时向数据库服务器发送数据操作请求
(3)数据库服务器对数据操作进行响应,将返回结果给Web服务器的应用程序
(4)Web服务器应用程序执行业务处理逻辑,利用HTML来封装操作结果,通过浏览器呈现给用户 - 优点:
(1)客户端只需要安装浏览器,操作简单,能发布动态信息和静态信息
(2)运用HTTP标准协议和统一客户端软件,能实现跨平台通信
(3)开发成本低,只需要维护Web服务器程序和中心数据库 - 不足:
(1)个性化程度低
(2)客户端数据处理能力比较差
(3)数据提交以页面为单位,动态交互性不强,不利于在线事务处理
(4)可扩展性差,系统安全性难以保障
(5)查询中心数据库的速度远低于C/S体系结构
3.13 公共对象请求代理体系结构风格
- 公共对象请求代理(Common Object Request Broker Architecture,CORBA)是一套完整的对象技术规范。CORBA规范主要包括:对象请求代理(Object Request Broker,ORB)、对象适配器(Object Adapter,OA)、接口定义语言(Interface Definition Language,IDL)、接口存储(Interface Repository,IR)、ORB内部相关协议。
- CORBA体系结构
(1)ORB:“软件总线”,CORBA体系结构的核心,连接网络上不同应用对象。ORB的任务是定位服务器,通过对象适配器OA将操作请求传送给相应服务器
(2)对象适配器OA:介于ORB与对象之间,屏蔽ORB内部的实现细节,为服务器对象提高抽象接口。功能包括:登录服务器、注册对象、创建对象、激活对象,分发客户请求和认证客户请求
(3)DII:ORB定义的动态调用接口,以API的形式出现,用来发送操作请求,提供了动态调用方法
(4)DSI:在服务器端,OA利用动态框架接口DSI来传输操作系统来传输操作请求,提供了动态实现方法
(5)SII:客户端与ORB之间的静态接口即SII静态调用接口
(6)SSI:服务器与ORB之间的静态接口即SSI静态框架接口
(7)存根:根据IDL规范,IDL编译器生成。功能类似于客户代理,为客户提供动态调用方法
(8)框架:根据IDL规范,IDL编译器生成。负责将操作请求发送给执行程序,为客户提供静态实现方式
(9)存储库:接口存储IR:包含了运行时所需要的IDL规范,定义了基本类型映射机制
(10)存储库:执行存储IMR:存储服务器的详细信息
(11)IIOP:ORB的内部协议,即Internet ORB内部协议,用以描述IDL类型的在线表示方法和协议数据单元。IIOP使用TCP/IP来传输ORB之间的操作请求和相关参数 - 优点:
(1)实现了客户端程序与服务器程序的分离
(2)将分布式计算模式与面向对象技术结合起来,提高软件复用效率
(3)提供了软件总线机制,软件总线是指一组完整定义的接口规范(独立于编程语言和开发环境,与实现无关的接口)
(4)CORBA能支持不同的编译语言和操作系统
3.14 正交体系结构风格
-
正交体系结构基本思想:按照功能的正交相关性,将系统垂直地划分为若干个子系统,每个子系统用一条线索实现,每条线索由多个具有不同层次功能和抽象级别的构件组成。
(1)正交体系结构是一种以垂直线索构件族为基础的层次化结构,包括组织层和线索。图中有5个组织层,两条虚线ABDFK、ACEJK为两条线索
(2)每个组织层包含相同抽象级别的构件图中B和C具有相同抽象级别
(3)线索是子系统的实例,是由完成不同层次功能的构件通过相互调用而形成线索ABDFK每个构件分属于不同组织层
(4)在同一层次中,构件之间不存在相互调用关系
(5)如果不同线索中的构件不存在调用关系,那么就是完全正交体系结构,图中两条线索满足这种关系
(6)正交体系结构拥有一个公共的顶层(图中A),用于触发各条线索运行。还有一个公共的底层(图中K),包含了各条线索需要的数据。 -
正交体系结构特征:
(1)正交体系结构由完全不同功能的n(n>1)个线索(子系统)组成
(2)线索之间相互独立,一条变动,不影响其他
(3)系统具有m(m>1)个不同抽象级别的层次
(4)具有一个驱动线索运行的公共顶层和一个存储公共数据的公共底层 -
优点:
(1)结构清晰
(2)便于修改和维护
(3)易于复用
3.15 基于层次消息总线的体系结构风格
-
基于层次消息总线(Hierarchy Message Bus,HMB)的体系结构风格:
(1)构件之间通过消息总线进行通信,可以支持构件的分布式存储和并发运行
(2)消息总线是系统的连接件,负责消息的分派、传递和过滤,并返回处理结果
(3)复杂构件可以分解为粒度更细的子构件,通过局部消息总线进行连接,从而形成复合构件 -
HMB体系结构支持运行时系统演化,主要体现:
(1)动态增加和删除构件
(2)动态改变构件所响应的消息
(3)消息过滤
3.15.1 HMB构件
在HMB结构中,构件比较复杂,可以从不同角度来对构件进行建模,包括静态结构、动态行为和行为功能。HMB构件主要包括接口部分、行为部分、结构部分。
(1)接口部分:定义了构件与外界之间交互的信息和承担的责任,一个构件可以有多个不同的接口,每个接口都包括发送消息集合和接收消息集合,用以描述构件对外所提供的服务和所需的环境。
(2)行为部分:使用有限状态自动机来描述构件的功能。构件行为受外来消息和自身状态的影响,接收信息,根据自身状态响应,并状态转移。在构件生命周期中,状态表达了构件要满足的特定条件和等待某个事件的发生。
(3)结构部分:描述了复合构件的拓扑结构。
3.15.2 消息总线
从逻辑上讲,消息总线是一个整体,从物理上说,它可以跨越多个不同计算机。挂接在消息总线上的构件可以分布在多台不同计算机上,并行运行。构件通过消息总线互联,不直接互联,构件位置相互透明,某一构件在物理上的迁移不影响系统其他部分。消息总线结构如下图:
- 消息总线的功能:
(1)消息登记:消息登记的实质是,构件通知消息总线自己对哪些消息进行处理,可以提供何种服务。构件–消息响应登记表记录了总线上的构件和消息之间的对应关系。
(2)消息分派和传递:消息总线负责构件之间传递消息,根据构件–消息响应登记表把消息分派给对它感兴趣的构件,并返回处理结果。广播一个消息时,可以多个构件响应,也可以没有构件响应。
(3)消息过滤:来源不同的构件事先不知道各自的接口,因此在不同的构件中,同一消息可能有不同名称,不同消息可能有相同名称。在构件集成时,会引起消息冲突和消息不匹配,因而要进行过滤。 - 消息过滤的两种方式:
(1)消息转换:可以采用换名方法实现,以保证每一个消息的名称在其所处的局部总线内唯一
(2)消息阻塞:构件存在功能缺陷时,不能对某些已定义的消息进行响应,此时应阻塞不希望接收的消息。
3.16 MVC体系结构风格
- MVC(Model-View-Controller,模型-视图-控制器),常见,主要针对Smalltalk 80,应用于用户交互程序。
(1)模型(Model):负责存储系统的中心数据。
(2)视图(View):将信息显示给用户(可以定义多个视图)。
(3)控制器(Controller):处理用户输入的信息。负责从视图读取数据,控制用户输入,并向模型发送数据,是应用程序中处理用户交互的部分。负责管理与用户交互交互控制。
(4)视图和控制器共同构成了用户接口。 - MVC重要特点就是两种分离:
(1)视图和数据模型的分离:使用不同的视图对相同的数据进行展示;分离可视和不可视的组件,能够对模型进行独立测试。因为分离了可视组件减少了外部依赖利于测试。(数据库也是一种外部组件)
(2)视图和表现逻辑(Controller)的分离:Controller是一个表现逻辑的组件,并非一个业务逻辑组件。MVC可以作为表现模式也可以作为建构模式,意味这Controller也可以是业务逻辑。分离逻辑和具体展示,能够对逻辑进行独立测试。 - 优点:
(1)多个视图与一个模型相对应,所有视图和控制器同步,便于维护
(2)具有良好的移植性,模型独立于视图,方便移植
(3)系统分割为三个独立的部分,功能变化只需改其一 - 不足:
(1)增加系统设计和运行的复杂性.两种分离
(2)视图与控制器连接过于紧密,妨碍两者的单独复用
(3)视图访问模型的效率低
3.17 异构体系结构集成
- 多种体系结构共存和相互融合,形成更复杂的框架结构,即异构体系结构
- 采用异构体系结构的原因:
(1)不同体系结构各有优缺点,根据实际需求设计
(2)关于框架、通信和体系结构问题,目前存在多种不同标准
(3)遗留代码复用
(4)在某一单元中,规定了共享软件包和某些标准,但仍存在解释和表示习惯上的不同 - 两种组合方式
(1)空间异构:允许构件使用不同连接件。不同子系统选用不同体系结构。构件可以通过连接件来访问仓库,也可以通过管道和其他构件进行交互
(2)分层异构:软件元素按层次结构进行组织,每一层使用不同的体系结构 - 一种典型的异构体系结构—— B/S结构和C/S结构的组合
-两种组合方式:“内外有别”、“查询有别”
(1)内外有别:内部用C/S结构,内部用户通过局域网直接访问数据库服务器。外部使用B/S结构,外部用户通过Internet访问Web服务器,Web服务器再访问数据库服务器,并将操作结果返回给外部用户
(2)查改有别:不管用户以何种方式与系统互联,需要执行维护和修改操作,采用C/S。只执行浏览和查询操作,则采用B/S结构