1、本 科 毕 业 论 文软件体系结构风格分析与应用新型类软件体系结构风格Analysis and Application on Software Architecture StylesNew Software Architecture Styles姓 名: 学 号:学 院:软件学院系:软件工程专 业:软件工程年 级: 指导教师: 年 月摘 要随着计算机应用的日益普及, 人们对软件的需求量急剧增加。但是, 计算机软件开发技术却远远没有跟上硬件技术的发展, 使得软件开发的成本逐年剧增。 现有的软件工程方法对此显得力不从心。对于大规模的复杂软件系统来说, 对总体的系统结构设计和规格说明比起对计算的算法
2、和数据结构的选择显得更重要。在此种背景下, 软件体系结构的提出对软件重用机制和软件开发效率的提高具有非常重要的意义。软件体系结构的使用是提高软件开发质量、减少软件开销和促进软件生产率提高的最有效方法之一。采用定性分析、比较研究等多种方法,实现了几种新型软件体系结构风格的剖析。给出了软件体系结构及软件体系结构风格的定义,阐述了几种新型软件体系结构风格中关键要素的定义及特性及其风格的主要内容,分析了几种新型软件体系结构风格的特点。本质上, 软件体系结构是对软件需求的一种抽象解决方案。这样, 在引入了体系结构之后, 软件系统的开发变为“问题定义 软件需求软件体系结构软件设计软件实现”的过程。本文即将
3、研究几种新型软件体系结构风格,其中包括客户/服务器结构、代理者结构、COM/DCOM/COM+组件结构、PAC(表达抽象控制)结构、映像结构和MVC(模型视图控制)结构。对每一种风格分别进行系统结构、动态特性、系统的设计实现和应用、结构的变体和扩展及结构的优缺点等几方面的详细阐述。关键词:软件体系结构;设计方法;构件AbstractWith the computer widely used,the need of software rapidly increased.however,the development of software technology still has a long
4、way with the development of hardware technology.As a result,the cost of software development increases year by year.The existing software engineering method is not much helpful.To a sweeping and complex software system,the design of the whole system architecture and standard is very important.At thi
5、s moment,software architecture makes big sense in the reuse and efficiency of software.The using of software architecture can boost the quality of software and decrease the lost of software.It is one of the most effective method to increase the production efficiency.In fact,the software architecture
6、 is a solution to the software requirements.So,the development of software system becomes a process as defynation of problemsoftware requirementssoftware architecturesoftware designment software application after the concept software architecture is created.In this thesis,I will talk about each soft
7、ware architecture including Client/Server, Broker, PAC, Reflection, MVC and talk about the architecture,designation,application,varation and advantages and disadvantages of each architecture.Key words: software architecture;design method;component目 录第一章 引言 11.1 软件体系结构的定义 11.2 软件体系结构应用现状及发展方向 11.2.1
8、应用现状 11.2.2 研究热点 21.2.3 发展方向 21.3 软件体系结构风格的种类 21.4 论文的组织结构 3第二章 客户/服务器(Client /Server)结构 42.1 概述 42.2 客户/服务器的结构 52.2.1 客户/服务器系统构成 .52.2.2 两组组件之间的关系 62.2.3 客户与服务器的连接 62.3 客户/服务器的连接 72.4 服务器的调度 92.5 客户/服务器结构的变异客户/分配器/服务器结构 12第三章 代理者(Broker) 143.1 概述 143.2 问题分析与方案 143.3 代理者系统的结构 153.4 动态特性 193.5 代理者结构的
9、设计实现 203.6 代理者结构的变体与扩展 233.6.1 直接通信代理者系统 233.6.2 信息传递代理者系统 243.6.3 交易器代理者系统 243.6.4 适配器代理者系统 243.6.5 回调代理者系统 243.7 代理者结构的应用 253.8 代理者结构的优缺点 25第四章 COM/DCOM/COM组件结构 284.1 概述 284.2 COM 组件结构 .294.3 COM 组件接口 .314.3.1 COM 组件的接口定义 314.3.2 接口的工作模式 324.3.3 IUnKnown 接口 .324.3.4 COM 组件生存期 334.3.5 COM 组件接口查询及其设
10、计原则 334.3.6 COM 接口的特性 344.4 COM 组件的不同类型 .354.4.1 进程内组件 354.4.2 进程外组件 354.5 COM 组件的运行 .374.6 COM 组件的变体和扩展 .394.6.1 连接点组件 394.6.2 DCOM 分布式组件 .414.6.3 COM+ (独立组件)结构 42第五章 PAC(表达-抽象-控制)结构 .455.1 PAC 结构概述 .455.2 PAC 结构的方案 .465.3 PAC 结构 .475.4 动态特性 505.5 PAC 结构的设计实现 .515.6 PAC 结构应用举例 .555.7 PAC 结构的优缺点 .56
11、5.8 PAC 的变体 .57第六章 总结与展望 586.1 本文工作总结 586.2 进一步展望 58参考文献 .59致 谢 61ContentsChapter 1 Introduction11.1 The Concept of Software Architecture .11.2 The Application State and Development Trends .11.2.1 Application State 11.2.2 Research Focus .21.2.3 Development Trends 21.3 The Sorts of Architecture Style
12、s 21.4 The Structure of Thesis 3Chapter 2 Client/Server 42.1 Introduction .42.2 Client/Server Architecture .52.2.1. Client/Server System.52.2.2 Client/Server Component.62.2.3 Client/Server 62.3 Client/Server Connection .72.4 Client/Server Despatch .92.5 Client/Server Variation-Client/Distributor/Ser
13、ver 12Chapter 3 Broker.143.1 Introduction .143.2 Analysis and Method .143.3 The Architeture of Broker153.4 Dynamic Characteristics 193.5 The Design of The Broker 203.6 The Variation of Broker .233.6.1 Direct Communication System .233.6.2 Messaging System.243.6.3 Trader Broker System .243.6.4 Adapter
14、 System .243.6.5 Callback System243.7 The Application of Broker253.8 Advantages and Disadvantages 25Chapter 4 COM/DCOM/COM Conponert Architecture 284.1 Introduction .284.2 COM Component 294.3 COM Component Interface .314.3.1 The Definition of COM Component .314.3.2 The Pattern of Interface.324.3.3 I
15、UnKnown Interface324.3.4 COM Component Survival .334.3.5 COM Interface Query and Design Principle.334.3.6 COM Interface Characteristic .344.4 Sorts of COM Component354.4.1 Component in The Process354.4.2 Component out of The Process .354.5 The Application of COM Component.374.6 The Variation of COM
16、Component.394.6.1 Connection Component.394.6.2 DCOM Distributed Component 414.6.3 COM+ Architecture 42Chapter 5 PAC Architecture.455.1 Introduction of PAC Architecture.455.2 The Plan of PAC Architecture .465.3 Architecture of PAC .475.4 Dynamic Characteristics 505.5 The Application of PAC515.6 Examp
17、les of PAC .555.7 Advantages and Disadvantages 565.8 The Variation of PAC .57Chapter 6 Conclusion.586.1 The Summary of This Thesis .586.2 Outlook .58References59Acknowledgements .61第一章 引言1第一章 引言所有软件开发方法都要解决从需求到实现之间的转换问题。为了提高软件需求和软件设计的质量, 软件工程界提出了需求分析工程技术和各种软件建模技术。但是, 在需求与设计之间仍存在一条很难逾越的鸿沟, 即缺乏能够反映做决策
18、的中间过程, 从而很难有效地将需求转换为相应的设计。为此, 软件体系结构概念应运而生, 并试图在软件需求与软件设计之间架起一座桥梁, 着重解决软件系统的结构和需求向实现平坦地过渡的问题。本质上, 软件体系结构是对软件需求的一种抽象解决方案。这样, 在引入了体系结构之后, 软件系统的开发变为“问题定义软件需求软件体系结构软件设计软件实现”的过程。1.1 软件体系结构的定义软件体系结构风格(style)又称软件体系结构习惯模式(idiomat ic- paradigm)。体系结构风格定义了一个系统家族, 即一个体系结构定义一个词汇表和一组约束: 词汇表中包含一些部件和连接器类型, 而这组约束指出系
19、统是如何将这些部件和连接器组合起来的 1。1.2 软件体系结构应用现状及发展方向1.2.1 应用现状1.形成研究热点,仍处于非形式化水平从软件体系结构研究的现状来看,当前的研究和对软件体系结构的描述,在很大程度上来说还停留在非形式化的基础上。软件架构师仍然缺乏必要的工具,这种工具应该是显示描述的、有独立性的形式化工具。在目前通用的软件开发方法中,其描述通常是用非形式化的图和文本,不能描述系统期望的存在于构件之间的接口,不能描述不同的组成系统的组合关系的意义。难以被开发人员理解,更不能用来分析其一致性和完整性。软件体系结构风格分析与应用新型类软件体系结构风格22.软件体系结构的形式化方法研究软件
20、体系结构研究如果仅仅停留在非形式化的框图阶段,已经难以适应进一步发展的需要。为支持基于体系结构的开发,需要有形式化建模符号、体系结构说明的分析与开发工具。从软件体系结构研究的现状来看,在这一领域近来已经有不少进展,1.2.2 研究热点当前,体系结构仍是一个非常新的研究领域,其概念还相当模糊。但软件体系结构作为软件工程领域中的一个组成部分,已经取得了长足的发展,收到大多数软件系统设计和研究人员的重视。软件体系结构目前较活跃的研究方向包括:(1)软件体系结构形式基础的研究;(2)针对软件体系结构描述中特有的问题研究新的专门的高级语言;(3)建立用于度量和评价软件体系结构的模型和方法;(4)建立面向
21、专门领域的软件体系结构范型库;(5)把软件体系结构从目前的知觉和经验状态过渡到理论。1.2.3 发展方向1. 各种体系结构描述语言之间的信息互换大多数ADLs具有一系列的共同概念,如何用一种公共形式把各种语言综合起来,使得能够交换各种体系结构描述信息,将是今后软件体系结构研究和实践的重点之一。2. 设计工具和环境软件体系结构设计既然作为软件工程的一部分,它的计算机辅助实现手段是相当重要的。我们应当开发出一些软件工具来实现体系结构的描述和分析,开发阶段转换工具,以实现阶段成果的自动转换。目前关于这方面的研究成果很少,特别是可以应用到实际项目开发中的工具和环境就更少。1.3 软件体系结构风格的种类
22、新型的软件体系结构风格主要有以下几种:客户/服务器(Client /Server)结构、浏览器/服务器(Browser/Server )结第一章 引言3构等、正交(Orthogonal)结构、映像(Reflection )结构、异构结构(Heterogeneous Architecture)、代理者(Broker ) 、COM/DCOM/COM 组件结构、MVC(模型-视图-控制)结构、微核(Microkernel) 结构、PAC(表达-抽象-控制)结构等;下文主要是对以上这几种新型软件体系结构风格进行了分析,并展望了软件体系结构风格的发展前景。1.4 论文的组织结构本论文分八个章节安排,主要
23、讲述了几种新型软件体系结构风格的结构特性及应用,各章节的内容安排如下:第一章 简略谈一下软件体系结构的定义及其研究现状、热点及发展方向。第二章 介绍了客户/服务器的结构、客户/服务器的连接及客户/分配器/服务器结构等内容。第三章 介绍了代理者的结构、问题分析与方案、设计实现及应用等内容。第四章 介绍了COM/DCOM/COM+组件的结构、COM组件的接口、COM组件的不同类型及COM组件的运行等内容。 第五章 介绍了PAC(表达抽象控制)的结构、PAC结构的方案、PAC动态特性及PAC结构设计的实现等内容。第六章 总结与展望。对该论文进行工作总结,并对软件体系结构这门技术的发展做了预测。软件体
24、系结构风格分析与应用新型类软件体系结构风格4第二章 客户/服务器(Client /Server )结构2.1 概述客户/服务器本事一个较广泛的概念。它指的是一个应用系统被分成了两个逻辑上分离的本分:一个客户和一个服务器。离爱哪个部分各自完成不通的功能并充当不同的角色。客户为完成特定的工作向服务器发出请求,而服务器接受客户的请求,并将处理结果返送给客户。两个部分协作完成一个共同的任务。客户/服务器结构在许多地方得到应用,但是它主要是应用在分布式系统中,并且在应用中不断改进完善,并产生许多发展和变异。在通过网络链接的分布式应用系统中,客户端,或称前端,是处理应用问题内在逻辑与服务器关系的程序,而服
25、务器端,又称后端,是通过网络通信而实施操作服务的程序系统。应用程序在网络上的分布允许多台计算机共同完成一个统一的任务。随着英特网的发展,各种新兴的服务器加入到程序系统中来,组成了以网路互联为基础的更复杂的应用系统。最初的客户/服务器系统主要是应用在基于网络数据库的信息系统中。客户端负责与用户的交互,如用户提交的查询和检索任务经客户端处理后,发送给服务器。服务器负责操作数据库并把查询的结果返送给客户端,最后,客户端把结果显示給用户,该结构的简单模型如图2-1(a)所示。随着系统任务日益复杂繁重以及设计维护的需要,因而把客户和服务器中的应用操作部分抽取出来形成应用逻辑服务器,则系统结构变化如图2-
26、1(b)所示。此时客户仍完成与用户的交互操作,而复杂的处理则交由应用逻辑服务器完成。它成为客户机与数据库服务器的中间桥梁。 由于因特网技术的应用和发展,为减轻客户端应用程序开发的负担和为统一客户端应用程序的设计和开发,引入了浏览器程序和WWW服务器。WWW服务器承担了客户与应用逻辑服务器之间的链接作用,形成了如图2-1(c)所示的多级服务器的系统结构。无论在两级或多级服务器系统结构中,每两个组件之间都形成客户/服务器关系。当然,每个服务器完成不同的操作任务,因而充当不同的角色。但是即使前后两者都是服务器,同样也构成客户/服务器的关系。第二章 客户/服务器(Client/Server)结构5图2
27、-1 客户/服务器体系结构示意图2.2 客户/服务器的结构多级客户/服务器结构体系仅是基本客户/服务器关系的扩展。其中每两级之间的关系,构成及运行机构与基本客户/服务器基本相同。下面只针对基本客户/服务器结构进行讨论。2.2.1 客户/服务器系统构成客户/服务器结构是油两个独立的逻辑系统即客户及服务器构成。这两个部分是为完成特定的任务而形成的组件之间的单向协作关系。一般认为,客户根据需要向服务器发出操作请求,并期待着从服务器返回所要求的操作结果。客户端组件通常由用户交互界面、操作请求表达,服务代理及通信组成。而服务器服务器端组件由服务器接口、调度管理、事物处理计算、共享资源管理及通信组成。客户
28、与服务器之间具有通信连接,并遵守公共的通信协议,其中主要包括:请求的表达,离爱粘结关系及状态的表达。软件体系结构风格分析与应用新型类软件体系结构风格62.2.2 两组组件之间的关系用户通过客户端的用户交互界面跳脚操作要求,并读取操作请求返回的结果。客户端的请求表达把用户的操作要求转换成合乎通信协议要求的表达方式。通过服务器在客户端得的代理,客户提出操作要求,并获得服务器返回的信息,以掌握服务器的状态。通信组件负责客户与服务器的信息联系。服务器端的服务器接口提供客户与服务器联系的标准或“窗口” 。它体现了服务器可以提供的操作服务和规范,是客户与服务器连接的桥梁。经连接后,事务处理计算部分负责完成
29、通过接口提供的各种处理和计算。而共享资源管理是服务器中维护的公共信息库或其他资源。它为操作请求的完成,提供信息或其他资源,是服务器能提供各种服务的基础。调度管理部分负责按客户的请求和服务器的内部状态,管理和调配客户的请求和系统的资源,尽可能地快速高效地完成操作请求,将结果返送给客户。通信部分负责实现服务器与客户的联系。在客户/服务器结构中,客户总是知道哪个服务器可用,而服务器却无法知道何时有什么客户会发出服务请求。2.2.3 客户与服务器的连接如果客户与服务器都配置在同一台计算机上,那么通过信号、消息,共享存储区等方法都可以实现客户与服务器在进程级上的通信连接。但是,若客户与服务器分布在通过网
30、络连接的不同计算机上,他们之间的通信连接就只能通过网络连接了。在网络上进程通信的首要问题是进程标记。在同一台机器上,不同的进程可以用进程号作为唯一标识。但是在网络上,计算机各自分配的进程号不能单独作为进程标识了,而是在进程标识前需要机器的网络地址和机器的端口号,因此网络上进程间通信的唯一标识需要三元祖:协议、本机网络地址和本机端口号。这是本端的标识,称为”半相关“。而完整的网络上进程通信连接需要客户和服务器端两个进程参与。因此需要5个参数组成的五元祖来标识,它们是:协议、本机网络地址、本机端口号、远程网络地址和远程端口号。这五元祖标识了本机和要连接的远程机的两个进程,称为“全相关” 。第二章
31、客户/服务器(Client/Server)结构7图2-2标识的是以UNIX提供的服务为基础,客户/服务器通信使用网络套接字建立连接时的时许关系。图2-2中:socket()系统调用,产生一个套接字socket。它标志着一个进程的产生。图2-2 客户/服务器通信连接的建立2.3 客户/服务器的连接1. 连接要求客户与服务器的连接是通过客户与服务器的接口进行的。他们之间有两种接口,一是使用过程的接口;另一种是基于消息的接口。客户与服务器通信必须满足下列要求:(1)客户与服务器间的所有交互必须通过定义好的接口来实现,客户向服务器发送它的请求需通过服务器的访问接口。服务器返回的信息和状态也必须经软件体
32、系结构风格分析与应用新型类软件体系结构风格8客户的接口送入。(2)客户与服务器交互的信息必须按照规定的语法形式表达,尤其是与数据库服务系统的交互。(3)组件之间的信息传送,从客户到服务器主要是请求信息,而从服务器到客户主要是操作返回信息和状态信息。(4)客户的请求信息一般在客户端打包后再传给服务器。在服务器端,对收到的信息包进行解包处理,取其中的有用信息,然后形成对请求服务的调用。从服务器返送給客户端的信息也需经同样打包、解包的处理过程。(5)服务器对接收到的客户端信息进行解包分析后,执行服务器上的相关服务,如查询数据库,按客户要求进行实施。2. 连接的检测客户与服务器是独立工作的组件,而且常
33、常处在不同的计算机上。尤其是网络上的服务器,随时随地都可能有客户请求连接的发生。通常,使用循环查询的方式检查连接请求是不适宜的。应采用中断方式来激发和控制连接,可以通过进程等待或网络请求中断来实现。一般在服务器端设置一个守护进程,也称服务器进程。服务器启动时即启动守护进程。没有客户请求时,守护进程处于等待状态。每当有客户请求到达时,服务器守护进程立即响应,并相应产生资源分配和执行处理,然后又回到等待状态准备接收下一个请求。3. 连接的方式客户与服务器的连接有使用过程和使用消息两种方式。当采用使用过程连接时,两个组件必须通过良好定义的接口进行交互通信。这些接口可能是系统中的某一过程。客户或服务器
34、可以用过程实现的请求及响应机制进行交互。这是采用远程过程调用(RPC)及相关技术来实现的。客户通过服务器的接口向服务器发出服务请求,该请求被看成对服务器的一个远程的过程调用请求。客户发出请求后,即进入等待返回结果状态。而请求的响应在服务器上计算完成。通常的远程过程调用RPC多是同步运行的,即客户发出请求后一直处于等待状态,不执行任何自身的程序逻辑,直到得到返回结果为止。如果不希望客户发出请求后一直处于等待状态,可以在客户/服务器的接口中加入回调例程。这时,如果客户的请求发出并得到服务器的确认后,客户立第二章 客户/服务器(Client/Server)结构9即返回执行自身其他的程序逻辑,等到服务
35、器操作完成后,才把结果通知客户。这就是异步响应方式。如若客户发出请求一段时间后才需要使用请求返回的结果,或根本不需要返回结果就可以不必等待请求的返回。当然如果客户需要异步请求返回的结果,这种做法会給客户方的设计增加困难和复杂性。客户方必须维持尚未得到返回结果的请求记录,并解释返回结果和将结果存储到正确的空间中去。至于使用消息的连接,由于目前大多数商品软件都使用事件驱动的图形操作系统,在其中的客户/服务器连接均采用消息传送模式。这是因为基于过程连接的请求,响应接口为了实现异步工作,必须引入回调例程。这是接口本身的同步特性决定的。消息本身是异步的。消息传送并不期待返回信息。但只要建立了双向的消息连
36、接,就可以实现同步的RPC调用。事实上,即使是同步RPC也可以用来发送消息,只是不需要等待返回信息。因此,可以说两者是完全可以互相替代的。4. 连接的协议客户与服务器之间传送的是字符流,需要经过分析处理,根据规定的句法,该字符流传达特定的意义。例如,对调用请求需要提供调用的名称、参数的个数、顺序、类型、值,执行的方式、返回值的类型等。在网络中应用的客户/服务器的连接通信中,传送的信息需要更加标准化地表达,即相互通信需遵守建立在硬件支持上的连接协议,即应用层的连接协议。目前常采用的协议有:在数据库系统中广泛应用的SQL查询语言,远程调用规范RPC,或是根据需要设计的用户语言。2.4 服务器的调度
37、客户/服务器结构中服务器的调度主要是解决多客户访问和多请求同时执行的复杂性 2 。系统中独立工作的服务器是无法知道何时会发生多少客户的请求。它必须时刻准备着,处理来自不同客户的请求,并具有同时接受和处理多个不同请求的能力。如果同时或先后到达的请求超过了服务器的能力,服务器应以一定的策略建立起等待队列并通知等待中的客户不能立即处理请求。目前基于服务器应用的操作系统大多是多任务的,因而服务器应用操作系软件体系结构风格分析与应用新型类软件体系结构风格10统的多进程或多线程控制,可以较方便地处理多客户多请求的复杂调度问题。其中有两种调度方式:有等待队列和无等待队列的调度方式。无等待队列的方式认为服务器
38、的进程或线程资源是足够的,可以为每一个请求的客户分配各自独占的处理进程或线程。当同时发生请求的个数超过有限资源数时,超出的请求被放到等待队列,等待某些资源释放后按一定策略顺序进行处理。在某些具有分时能力的操作系统中,多进程或多线程的调度变得更多复杂,会造成更加复杂的调度运行问题。下面讨论几种单调度运行方式。1. 进程调度在服务器断建立一个随系统启动的服务器主进程。主进程具有服务器的对外接口及从事管理的操作服务和共享数据。启动后主进程处于等待状态。每当一个客户请求到达时,主进程即产生一个子进程。将客户的请求传送給子进程后,主进程返回到等待状态。子进程响应客户的请求,进行响应的处理。当请求处理完后
39、子进程即被撤销。主进程又叫做“主服务器” ,它负责接受请求并调度子进程响应任务,子进程又称“从服务器” ,它执行分配給它的特定任务。2. 线程调度线程调度方式中,服务器端仍需要一个随系统启动的主进程。主进程同样具有服务器的对外接口及管理用的共享数据和操作服务。同样,启动后主进程处于等待状态,只是当客户请求到达时,主进程立即产生一个子线程,将请求传达給线程后,主进程返回等待状态。用户请求有线程响应,进行操作,当请求处理完毕后该线程被撤销。3. 线程池调度在服务器启动时除了启动主进程外还创建一个具有n个线程的线程池。即在线程池支持的服务器中,主进程除了等待请求并分配任务外,还管理这一个含有有限数量
40、线程的线程池及一个请求队列。线程池中线程的调度,完全由服务器进程的主线程管理。当客户请求到来时,主线程根据线程资源的负荷情况,有线程池中分配一个空闲的线程,指派它的执行任务。该线程随即运行以响应客户的请求。处理完请求后,线程返回空闲状态,并等待新请求任务的分配。在此过程中,没有新线程的创建和撤销,只是线程忙闲状态的变化。但是,当第二章 客户/服务器(Client/Server)结构11客户请求的数量超过线程池中的数量时,请求被置于等待队列,等待现正运行线程的终止。因此,此线程池的运行调度需要计数器的参与。计数器维持可用线程的数量,当线程数低于请求的总线程数时,请求即被置于等待队列。图2-3給出
41、了服务器线程池的调度方式。它由透过你信组件、接收/发送转换组件、调度组件、请求队列及线程池5个部分组成。3 .请求队列2 . 接收 / 发送转换1 . 通信组件客户 14 . 调度组件客户 1线程 1 线程 2 . . . 线程 n任务1任务2任务n. . . . .请求 1请求 25 .线程池图 2-3 服务器线程池的调度结构客户通过通信组件与服务器建立连接。服务器接收的(或发送的)信息通过接收/发送转换组件。转换成一定的格式送往调度组件。调度组件根据线程池的使用状态,給请求指派可用线程并启动工作任务。如果线程池暂时没有可用的线程,调度程序将请求送入请求等待队列。调度组件还负责把线程执行的结
42、果或其他服务器的状态信息经接收/发送转换组件转换成适当格式发往用户。请求在服务器的请求队列中以全相关信息存放,以便准确地实现请求的调度处理及正确的结果返回。对于客户/服务器结构,客户端的结构和连接如图2-4所示。应用程序 接收 / 发送转换 通信组件 服务器客户图2-4 客户端的结构软件体系结构风格分析与应用新型类软件体系结构风格12客户通过应用陈圩发送的客户请求经接收/发送转换组件按协议的要求转换成规定的格式。规定格式的信息打包后,经通信组件发送給服务器。服务器接到请求,经过操作处理后,把结果和状态返回給客户。通信组件接收到返回信息后,同样经解包等转换,把信息返送給客户。2.5 客户/服务器
43、结构的变异客户/分配器/服务器结构客户/分配器/服务器结构在客户和服务器之间引入了中间层分配器组件。其作用是借助名字服务来实现通信位置的透明性 3。同时借助分配器来隐藏客户与服务器之间建立通信连接的细节。设想为了检索科技信息开发一个软件系统。信息的提供者位于局域网和遍布世界各地的广域网上。若要访问提供某一信息的服务器,就必须制定其位置和要执行的服务。由于这组服务器分布在整个网络上,且往往需要动态地改变服务器的位置服务,并使其与满足用户服务的核心功能与通信机制的细节相分离。为此,在客户与服务器间使用分配器组件。分配器实现名字服务。它允许客户用名字来制定服务器而不需提供物理地址,由此实现了位置透明
44、性。同时,分配器还负责建立客户与服务器间的通信信道,将服务器加入到为客户提供服务的应用程序中去。每个服务器由唯一的名字指定,并通过分配器与客户建立联系。而客户依靠分配器去定位某一特定服务器并同服务器建立通信链路。客户、分配器、服务器三者的关系如图2-5所示。第二章 客户/服务器(Client/Server)结构13l o c a t i o n M a pr e g i s t e r S e r v i c eu n r e g i s t e r S e r v i c el o c a t e S e r v i c ee s t a b l i s h c h a n n e lg e
45、 t C h a n n e l分配器客户d o T a s ks e n d R e q u e s t服务器a c c e p t C o n n e c tr u n S e r v i c er e c e i v e R e q u e s t服务请求 返回结果请求连接建立连接接受链路注册图2-5 客户/分配器/服务器结构客户的任务是执行特殊领域的任务,为此它需要访问网络上服务器提供的服务。在发送请求給服务器之前,客户向分配器请求信道,然后客户利用这个信道与服务器通信。服务器为客户提供信息或操作。它可以通过名字和地址向分配器进行注册。而分配器负责在客户与服务器之间建立通信信道。它需要
46、取出服务器的名字并把名字映射为服务器的物理地址。分配器使用现有的通信机制为服务器建立通信链路,并将通信句柄返送給客户。若分配器无法启动通信链路,它将遇到的错误通知客户。为了实现名字服务,分配器需要实现用来注册和定位服务器的功能。为了实现3个组件间的交互,需要指定组件间的交互协议。协议指定了为两组件间通信的信道以及传送消息或数据的结构进行初始化和维护的行为。客户分配器服务器结构有3个协议。服务器和分配器之间的交互协议DSprotocol定义了客户请求分配器建立与某一特殊服务器连接时所发生的交互。如果因某种原因通信建立失败,分配器会再尝试几次试图建立通信连接,若仍不成功,分配器通知客户所发生的故障
47、。客户与服务器之间的协议CSprotocol指定客户与服务器之间如何进行交互。这里就不赘述了。为设计实现分配器需确定如何命名服务器。IP地址肯定是不合适的,这样客户就会依赖服务器的具体位置。应引入不带位置信息又唯一确定服务器的名字。可使用字符串或预先定位的常量,如“server x”、 “ID_server-x”等。这软件体系结构风格分析与应用新型类软件体系结构风格14些独立于位置的名字将由分配器映射为服务器的物理地址。一个分配器中包含一个服务器名字映射为物理位置的库。服务器位置的表示依赖于用来实现客户/服务器通信的低层机构。物理位置可以用套接字端口、TCP端口、共享存储器句柄或其他一些方式来
48、描述。另外还要考虑分配器的性能问题,如果多个客户通过一个 分配器要求访问多个服务器时,分配器显然会够成一个瓶颈,若想改善响应和执行时间,可使用多线程。如可在分配器中提供一个线程池,当多个请求到来时可并行处理。也可以引入分布式分配器来取代网络环境中的单个分配器组件。第三章 代理者(Broker )15第三章 代理者(Broker)3.1 概述代理者结构体系主要用于构件中间有隔离组件的分布式系统。这种结构适合于大型的、分布在网络上的多个服务提供者的、甚至是异构的系统。该系统通过远程服务调用进行通信联系。而其中的代理者组件负责协调相互间的通信、转发请求、传送结果及异常信息等。目前,我国正在开发许多公
49、共信息系统。这些系统均运行在广域网中。网络上无多计算机负责支持一项或多项有关事件、信息(如机票、宾馆、旅游路线、导游等)的服务。这些计算机分布在网络上。系统中的用户可以用连在网络上客户机的终端通过使用万维网(WWW)的浏览器检索,查询他们感兴趣的信息。这些检索的信息分布在网络上的不同的服务器上,而往往不仅是一个特定的服务器上。客户端的浏览器软件支持和帮助用户以在线联系的方式从有关服务器上检索信息,再把结果显示在屏幕上。公共信息往往是不断增加、扩展和更新的。因此,系统也希望能不断地改变和增长。而且每个服务之间应互相隔离,以减少变动的影响。同时当系统变动时,譬如移动、增加、迁移服务时,应不影响客户端的服务。因此,终端软件应该不必知道服务器的具体地址而获得服务。当然也可设计一个独立的网络,它连接多有的服务器和终端,形成一个封闭的内联网。但是,信息提供者往往希望在更大范围中开放自己的服务而且更重要的是用户希望得到世界各地分布的信息,因此,使用因特网是这种系统的必然结论。3.2 问题分析与方案从上面的分析可以看出,构件这样一个复杂的软件系统,应该将系统的功能分割成许多独立的组件,这样系统才是可分布和扩展的。所以,系统应是由独立的但相互之间又可以互相操作的组件组合,而不是一