一、分布式应用系统研究
1、 对目标系统进行全面分析的理由
我们的开发人员在进行系统开发时必须掌握自己的工具,包括相关概念理论和实际编程工具。越来越多操作系统的高级机制能够被我们所使用包括多线程和显式动态调用;同时面向对象的方法、语言、模式和中间件技术也得到越来越广泛的应用,所有的这些都为我们重新审视和修正我们在分布式网络应用开发中使用的传统方法和技术提供了机会。
系统的分析与开发实现是一个渐进的,不断反馈改进的过程,它能够系统的考查一个应用领域来发现系统开发和设计中的一些关键挑战(问题),这样能够得到一个经过时间考验的解决方法。通常一个应用需要考虑用户图形界面GUI,关系数据库、网络管理、操作系统和各种不同类型的面向对象的中间件。对一个待开发应用领域的完整彻底分析能够带来以下好处:
1. 他能够有助于分辨和精确定义在该领域的关键抽象的对象空间,进而使得系统的开发人员能够更加有效的通讯和交流。实际中,对问题空间(problem space)的清晰认识能够大大简化从问题空间到合适模式、模式语言、中间件的解决空间(solution space)的 映射。
2. 它使我们对系统的考虑分为对通用问题的考虑和特定应用程序的特定考虑。把注意力集中在领域内系统共有的设计问题上有助于帮助程序员看见应用和开发可重用类的机会
2、 分布式应用系统分析包括五个方面的问题:协议与服务、通信、服务端体系结构、并发性和可配置性。下面详细介绍:
协议和服务XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />
定义:协议是规定通信实体之间控制和数据信息如何交互地一系列规则。这些通信实体可能包括一个或多个客户、服务端或者在一个网络操作环境中对等实体的交互。服务,由服务端对外提供的、定义良好的服务能力。
关系:网络服务的交互基于协议,协议为应用程序屏蔽底层通讯细节。服务协议能被一个或多个服务使用,同时他们又基于更低一层的服务协议。
我们定义的协议和服务定义所基于的协议和服务的不同会给我们的应用开发带来不同的影响。在一个分布式应用中,开发者可以考虑和选择以下协议和服务:这一部分包括一下五个方面的内容:
l 无连接 、面向连接和请求/响应协议
无连接协议:
特点: 提供了面向消息的服务,这里每条消息都能被独立发送。
无连接协议基于“最努力”原则,对消息是否按顺序到达目的地址或者是否全部到达目的地址不提供保证。
实例:用户报(User Datagram Protocol)和IP(Inte.NET 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. 各层间通讯必须设计合理实现优良,否则容易引起难以识别的错误。
由各层屏蔽的相关信息使得在实时系统和容错系统中定位和管理整个分布式环境下资源变得非常困难。来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-990476/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10752043/viewspace-990476/