分布式应用系统研究

一、 分布式应用系统开发背景

近十年来,通信技术和计算机技术都得到了长足发展,主要表现在:光纤通信技术的传输速率达到了难以置 信的高度;无线通信技术则从模拟发展到数字,从窄带发展到宽带;计算机技术的则在计算处理速率、并行处理结构以及面向对象的软件技术和分布对象计算技术方 面获得突破性发展。计算机 CPU 处理速度按照摩尔定律不断提升 , 已经达到 1000MHz 以上;巨型计算机的处理速度已经从每秒亿次上升到每秒千亿次、甚至万亿次指令;高性能计算机体系结 构和并行计算结构,使得计算机处理速度已经超越单个 CPU 处理速度的限制;面向对象的软件技术使得计算机软件在软件重用技术上出现了突破性进展;分布对象技术 使得异构软件系统在网络环境下可以容易地实现互操作和系统集成。

通信技术和计算机技术的发展 , 推动了网络应用的发展。当前网络应用已经从传输单一的正文数据,发展到传输话音数据和视频数据,以 及集成多种类型数据传输的多媒体网络应用;从传统的点到点交互,发展到单点到多点交互 ( 如视频广播和远程教育应用 ) 和多点到多点之间的交互 ( 如计算机视频会议应用系统 ) ;从传统的集中控制结构发展到分布控制结构,进一步发展到联邦 ( 具有不同行政管理域的 ) 控制结构;从传统的尽力而为的、没有任何 服务质量要求的服务模式,发展到高速运输服务模式和具有服务质量保证的高性能网络服务。

网络体系结构的发展体现了网络技术发展的特征。 20 世纪 80 年代网络技术的主要特征是开放、互连 , 那个时期的网络体系结构主要是基于 ISO 的开放式系统互连 (OSI) 参考模型 。现在计算机网络已经发展到高性能网络阶段 , 现在网络技术的特征在于开放、集成、高性能和智能化。 这些网络技术的特征同样也体现在网络体系结构的发展中。我们认为 , 对新型网络体系结构影响最大的主要是集成和 高性能。

分布式网络应用范围及其广泛,包括在线事务处理系统,网管系统,全球个人通讯系统,电子医疗图像系 统, CORBA 的 对象请求代理,高性能 WEB 服务器和多处理器通信子系统。

二、 分布式应用系统的好处和面对的挑战

基于网络的分布式应用能够带来如下潜在的好处:

Ø 增强的连通性和协作性:信息对所有的客户都是快速可访问的,避免手工进行数据和控制信息传输

Ø 显著提高的系统性能、可扩展性和容错性:根据当前和未来的系统要求合理分配计算资源;在新的硬件被 添加到系统中或相关硬件被更新(比如替换故障系统)不会涉及到分布式系统中其他的应用单元

Ø 降低的系统成本:多个用户或应用程序共享那些昂贵的外围设备比如文件服务器或高容量彩色打印机可以 降低系统的成本;分离的服务单元有利于二进制级的代码重用减小系统后续开发代价。

分布式网络应用的典型结构是多个 PC 或服务器通过局域网相连。在这种环境下,众多分散的应用单元协同为终端用户提供各种计算任务。比 如:

Ø 一个交互式 GUI 能够被 XWINDOWS 服务端或其他瘦客户端采用诸如支持 JAVA WEB 浏览器来管理

Ø 由一个或多个主机共同提供服务处理能力

Ø 通过一个或多个文件服务器访问永久资源,比如 SQL 数据库、 WEB CACHES 和许可管理

相互兼容的网络协议使各个相分离的应用服务(功能)单元(术语为组件)间的互操作成为可能,即使这 些组件所在的网络环境中的网络协议、操作系统、硬件、软件和编程语言都是异构(不同类别)的。

一个基于网络的分布式应用从设计到实现、调试、优化和监测( Monitor )都比传统的单机应用系统要复 杂和困难得多。尽管在过去的 10 多年来,面向对象的开发技术和框架思想 frameworks 获得很大发展,同时大量的原理、方法、模式和工具被用来减轻开发和配置分布式网络应用所带来的复杂程 度,但是想要达到分布式应用的理想境界,人们还面临着很多必须解决的课题。服务的划分和跨进程 / 主机的负载均衡; 全网范围内的服务定制问题,全网范围内的资源控制问题以及全网范围内的用户管理问题

分布式网络应用所面临的困难:

一些是由于在分布式网络环境下自然产生的困难,包括

Ø 检测短暂( transient )发生的网络或主机故障,并且恢复正常

Ø 最小化通信延迟对端到端应用性能的影响

Ø 如何合理的划分一个分布式应用中各种服务

Ø 在网络环境下何地何时分布这些服务,同时为这些服务提供负载均衡

这些困难是在分布式网络环境下与生具有的,不会在短时间内消失。开发者还将为解决这些问题作大量的工 作。

以下是由于开发工具和开发技术带来的困难,包括:

Ø 缺少类型安全的、可移植的和可扩展的本地系统方法调用接口;缺少可重用的函数和类库

Ø 缺少针对跨进程和主机的远程方法调用的有效调试工具

不断涌现的网络编程概念和对网络处理能力的不断提升,使软件 的生命周期大大减短,大大增加了软件的开发费用

一、 分布式应用系统研究

1、 对目标系统 进行全面分析的理由

我们的开发人员在进行系统开发时必须掌握自己的工具,包括相关概念理论和实际编程工具。越来越多操 作系统的高级机制能够被我们所使用包括多线程和显式动态调用;同时面向对象的方法、语言、模式和中间件技术也得到越来越广泛的应用,所有的这些都为我们重 新审视和修正我们在分布式网络应用开发中使用的传统方法和技术提供了机会。

系统的分析与开发实现是一个渐进的,不断反馈改进的过程,它能够系统的考查一个应用领域来发现系统开发和设计中的一些关键挑战(问题) ,这样能够得到一个经过时间考验的解决方法 。通常一个应用需要考虑用户图形界面 GUI ,关系数据库、网络管理、操作系统和各 种不同类型的面向对象的中间件。对一个待开发应用领域的完整彻底分析能够带来以下好处:

1. 他能够有助于分辨和精确定义在该领域的关键抽象的对象空间 ,进而使得系统 的开发人员能够更加有效的通讯和交流。实际中,对问题空间( problem space )的清晰认识能够大大简化从问题空间到合适模式、模式语言、中间件的解决空 间( solution space )的 映射。

2. 它使我们对系统的考虑分为对通用问题的考虑和特定应用程序的 特定考虑。把 注意力集中在领域内系统共有的设计问题上 有助于帮助程序员看见应用和开发可重用类的 机会

2、 分布式应用 系统分析包括五个方面的问题:协议与服务、通信、服务端体系结构、并发性和可配置性。下面详细介绍:

协议和服务

定义: 协 议是规定通信实体 之间控制和 数据信息 如何交互 地一系列规则 。这些通信实体可能包括一个或多个客户、服务端或者在一个网络操作环境中对等实体的交互。服务,由服务端对外提供的、定义 良好的服务能力。

关系: 网 络服务的交互基于协议,协议为应用程序屏蔽底层通讯细节。服务协议能被一个或多个服务使用,同时他们又基于更低一层的服务协议。

我们定义的协议和服务定义所基于的协议和服务的不同会给我们的应用开发带来不同的影响。在一个分布 式应用中,开发者可以考虑和选择以下协议和服务:这一部分包括一下五个方面的内容:

l 无连接 、面向连接和请求 / 响应协议

无连接协议 :

特点 : 提供了面向消息的服务,这里每条消息都能被独立发送。

无连接协议基于“最努力”原则,对消息是否按顺序到达目的地址或者是否全部到达目的地址不提供保 证。

实例 :用 户报( User Datagram Protocol )和 IP Internet Protocol )都是无连接协议的典型。

应用原则 : 这些协议一般应用于那些需要能够容忍一定程度消息丢失的应用 ,比如 voice-over-IP 和流视频。

面向连接协议:

特点: 提供了一种可靠的、顺序的、无重复 发 送的服务。为了增强性能并确保可靠,面向连接协议在发送端和接收端间交换和保持状态信息。

实例: 传输控制协议( Transmission Control Protocol )也就是 TCP 就是一种面向连接的协议,它构成了整个 Internet 的基础。 TCP 提供了重传机制以确保较面向无连接的 IP 协议更可靠的数据传输。

应用原则: 这些协议特别适合那些无法容忍数据丢失 的 应用。

请求 / 响应协议

提供了一种可靠的、面向事务处理 的 服务,这里处理都是以单步加锁保护 的形式进行。请求 / 响应协议通常用于在诸如高速局域网这种低时延环境下短时长消息 的交互。

l 短时 长时服务

短时服务 的执行时间非常短而且相对比较固定

通常采用请求响应协议 Request/Response 协议或无连接协议比如 UDP

长时服务 的 执行时间较长而且是变化的 。长时服务的例子包括通过 FTP HTTP 传输一个大文件,通过 TELNET 访问远程主机资源。为了提供效 率和可靠性,这些服务通常是基于面向连接协议来实现的

应该注意的是: 每一个客户请求特别是发送特别频繁的请求都建立和撤销套接字 连接,会使系统(时间)开销变大而且十分浪费应该采用长时服务类型。

l 内部 与外部服务

内部服务 :在服务器收到请求时,在相同的地址空间执行

外部服务 在 不同进程地址空间中处理执行。举例来说,一个主服务分发器进程监视一系列的通讯端口。当一个连接请求从客户端到达主服务器时,这个分发进程接收该连接然后 分发新的进程在外部来处理请求服务。

应该注意的是: 内部服务会为应用系统带来潜在的不稳定性。在一个进程中的多个服务函数没有得到应有的保护,因为系统的相关共享资源容易收到不应该的破坏

l 有状态服务 无状态服务

有状态服务 缓存了一些确定的信息,比如任务状态,认证密钥,认证数目和 I/O 句柄等。这些有助于在服务端减少通讯和 计算的开销。

无状态服务 在服务器上不保留每个连接的状态信息。

应该注意的是: 有状态服务和无状态服务在效率和可靠性 之 间寻找折衷点,一个好的选择依赖于很多因素比如主机和网络故障发生的可能性和带来的影响。一些通用的网络应用服务,比如说 FTP TELNET ,不需要在连续的服务调用之间保 留永久状态信息。这些无状态服务通常配置和重配置非常简单而可靠。相反,一些服务比如 CORBA Naming Service 管理着一些必须保留状态信息的绑定,即使这些绑定服务器已经崩溃。

l 分层的 / 模块化服务 集中式服务

分层 / 模块化服务 将服务分解为一系列的与层次有关 的 服务,在各层之间交换控制和数据消息。

集中式服务 将 个服务紧密包容,他可以将各个服务模块分离好像分层一样,但是绝大多数的数据通过共享和全局变量 集 中拥有。这种系统很难以理解、维护和扩展。集中式服务比较适合那些短生命周期的原型系统。

选择两种服务分布体系来构造自己的网络应用必须在效率、扩展性和模块化程度上予以折衷考虑。为你的服 务选择分层 / 模块 化设计,有如下优势:

1. 分层增强了系统组件的可重用性。 因为更高层的应用组件能够共享使用这些较 低层的服务

2. 分层的服务使应用能够透明的增强或增加系统的服务功能。

3. 分层 / 模 块化的体系结构方便通过有选择的去掉非必须服务来获得宏观层次的性能提高

4. 模块化设计有效的提高 网络应用程序的开发实现、测试和维护的效率

同时,这种服务方式在应用到网络应用中时也有一些缺陷:

1. 分层实现的模块化为系统带来的额外开销较大。比如,在各层交互接口缓冲区大小的不匹配将 会降低系统的效率 ,而且可能导致额外的分解组装或者通讯延迟。

2. 各层间通讯必须设计合理实现优良,否则容易引起难以识别的错误。

由各层屏蔽的相关信息使得在实时系统和容错系统 中定位和管理整个分布式环境下资源变得非常困难

通信

在同一地址空间的单机应用的交互参数传递是通过函 数调用或全局变量 访问来得到的。而在网络环境下不同地址空间的各个组件间通讯是通过下列一些通信机制来完成的:

l 消息传送 共享内存

消息传送 :应用程序开发人员通常需要定义这些消息的格 式和容量 ,协议采纳方将遵循他们交换信息。协议本身也定义了在一次消息交互过程中可能的参与方数目 比如点到点、广播和多点传送,而且还定义了消息交互参与者怎 样开始、进行和结束 一次消息的传送。目前许多流行的中间件的体系结构采用了基于消息传送的通信模式,比如 CORBA

共享内存 这种方式分为两种,包括本地式共享内存和分布式共享内存

Ø 本地共享内存: 对于单机中多个线程或进程需要共享数据,这是一种不错的选择。但是这给这些应用的适用性带来了伤害 ,而且他们的实现也变得必须小心翼翼。

l 分布式共享内存: 这是一种更高层次的编程抽象,她为应用程序提供了网络的分布式虚拟内存。这种方式扩展了虚拟内存的概 念,系统提供机制保证各个进程和不同的网络接点的同步更新 。这种模型经常在底层采用消息传递机制在读写者间保持协调和同步

服务端的体系结构

单服务服务器 仅仅提供一个服务。

多服务服务器 集成一系列单服务服务器到一个管理单元 ,具有如下优势:

Ø 减少系统资源开销

Ø 简化服务端开发实现,重用有效代码

Ø 允许外部服务在不修改其他存在代码和中断服务器运行的前提下升级服务

Ø 加强了对网络服务的监控管理。这可以通过一些网络应用配置管理程序来完成的

一次性服务器 持久服务器

一次性服务器 只有在请求到来时才会启动,在触发它的请求结束后结束。

持久服务器 在他们处理的服务请求生命周期之外持续运行,他们通常在系 统启动或者被客户第一次调用时启动。

配置考虑

一个网络应用应该能够在各个阶段配置它的组成 服务 ,包括编译、静态连接、安装、启动时甚至是运行时。配置一个网络应用的步骤包括命名和定位服务、将服务连接到一个或多个应用的地址空 间。这些步骤能以静态和动态的完成,如下所讨论。

l 静态 动态 命名

应用程序能够按照他们服务的命名是静态的还是动态的分类。

静态命名服务 将服 务的名字在编译时或者( and/or )静态连接时与存在的对象代码相关。如 Echo

动态命名服务 将服务名字与对象代码的绑定推迟到服务的执行时。因此,代码即使在编写、编译甚至连接时都无需被标 识。只有到应用开始执行相应的服务时才开始标识这段代码。如 Telnet

l 静态 动态连接

应用程序还可以根据服务的连接是动态还是静态的分为静态连接和动态连接。

静态连接 在 编译时或和静态连接时建立一个完全可执行的应用程序。

动态连接 插 入或者移开对象到或者是从一个进程的地址空间。现代操作系统同时支持显式和隐式的动态连接。

l 静态 动态配置

动态配置 指 初始化能够提供动态命名服务应用的过程。当与动态连接、线程 / 进程建立机制结合,这种动态配置的应用能够 被扩展到安装 / 启动或运行。这种扩展有利于以下配置相关的问题:

Ø 功能子集: 动态配置简化了运行于一系列 OS 平台应用程序家族的 功能子集的开发步骤。举例来说,通过精细的配置服务,应用既能运行于嵌入应用中也能用于企业的网络应用。如一个网络浏览器既能运行于 PDA 上也能运行在 PC 上。

Ø 工作负载均衡 因为工作负载在运行时经常变化,因此很难确定相关应用服务的特征参数 。因 此,通过多次试验 ,对备选的 应用配置选项在网络环境下进行论证是有必要的 。比如这个特定服务(如图像处理)一个服务端和多少个客户端的搭配时最合理的。服务分配在客户 端和服务端的多少也很容易形成瓶颈。太多的服务(功能)在服务端,可能会在导致服务端的瓶颈,太多的服务(功能)在客户端,又会在客户端配置有限的情况下 形成瓶颈。

动态服务的再配置 高度可用的网络应用比如在线事务处理或实时远程过程控制等关 键任务系统可能需要灵活性很高的动态重配置管理性能。举例来说,很可能需要在不中断其他服务的基础 上,加入其他的服务或新版本的服务。重配置协议基于显示动态链接机制,能够大大增强网络应用的功能和灵活性。 因为它为整个应用带来了无需终 止其他服务进程 / 线 程就可以在运行时增加、删除、修改的服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值