Chinaunix首页 | 论坛 | 博客
  • 博客访问: 370643
  • 博文数量: 37
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 1266
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-16 19:52
文章分类

全部博文(37)

文章存档

2011年(1)

2010年(7)

2009年(12)

2008年(17)

我的朋友

分类: C/C++

2008-03-01 00:17:05

面向对象分布式开发系统理论篇(上) 

来自:天极论坛 作者:陈立峰 [2004/03/15] 

摘 要 
  在Web 应用开发中,之所以能够利用对象的概念,方便地创建灵活,稳定的Web 服务,归功于J2EE 的多层体系结构。而在传统软件(非Web 应用),如何利用面向对象技术,是本文的主要目的。本文基于一个分布式的开发工具模型 – SoftEngine, 简要阐述了分布式系统的基本技术及特征,包括:任务驱动,分布式对象,流水线式设计模式,以及数据安全等关键技术 。 

  1. 前言 
  自从有了J2EE 体系结构,基于诸如:BEA WebLogic, IBM WebSphere 以及Sun ONE 等多层结构的应用服务器,Web 开发已变得如此的便捷、高效。Web 程序工程师也不在过多的关心如何解决系统稳定性、高负荷等问题,而精力更多地集中在如何实现应用逻辑。比如:现在,很少有人在采用了上述的中间件产品后,还问津系统是否稳定、如何扩容等问题。因为J2EE 体系,已经解决了这些繁琐的技术难点。 

  而其他的、非Web 方式的传统软件开发工程师就没有如此的幸运了。特别在一些基础分布式系统、实时系统及数据传输系统的开发项目,基于Web 方式的应用已无法解决。J2EE 已无法提供更多的帮助。此时,只能依靠程序员从系统最基本的功能开始开发。除功能外,系统性能好坏,完全取决于开发人员的素质及经验。在短时间内构造出如同Web 应用一样稳定、高效的系统,简直成为一种梦想。 

  为了实现这个梦想,软件的“总线结构”孕育而生。所谓总线结构,就是所有的功能部件以相同的方式连结在一个用来相互通信的结构性部件上。由此带来的好处是,部件的内部设计被独立出来,再也不必考虑部件之间的互连问题,设计人员可以专注于部件的功能设计 。

2. 分布式系统所应具有的体系结构 
  一个分布式计算系统(distributed computing system ),就好比现实生活中的一个公司。其中,某些职员负责日常的内部事务保证公司正常运作;某些职员负责对外联系工作,保持与其他公司的关系;在公司员工之间定义了一定的工作流程,通过固定格式的表单提交任务及交换信息。在公司运作中,只要员工的职责及工作流程保持不变,其他的可变因数,如:工作的物理位置或交换信息的不同,都不会造成本质的变化。 

  因此,在分布式系统中,需要定义出不同的职能对象。这些对象是可分布的。对象之间还需定义各种内容的信息/ 消息体。以SoftEngine 为例,定以了三种最基本的元素对象: 
  功能对象(Function Object) ,负责内部功能操作。
  服务对象(Serve Object) ,具备通讯能力。
  任务对象(Task Object) ,在功能及服务对象间传递信息。 
  对象间的协调、信息传递等复杂的操作,被封装在SoftEngine 的内核。通过简单的接口对象,演变出各种不同的应用系统。如下图,所示的体系结构 : 



图表 1 The Architecture Of SoftEngine 
  Components Area 组件局域 是一个开放式的区域。为应用组件提供了三种主要的接口: 功能接口(Function Interface)、服务接口(Serve Interface)、任务接口(Task Interface) 。继承了面向对象的特点,组件局域具备了许多“软总线”的特性,可以灵活地加载、卸载应用对象 。 
  SoftEngine Kernel 内核 是SoftEngine 的核心部分,封装了大部份的内部操作,如: 对象间的协作、任务传递和对象的分布管理等。其中最主要有两个部件: 任务通道(Task Channel)和通讯通道(Communication Channel) ,用于安全,有效,准确地传输数据 。 
  Task Channel 任务通道 直接连接每个对象,传输任务信息从一个对象到另一个对象 。 
  Communication Channel 通讯通道 连接每个分布的SoftEngine 内核。传输任务信息从一个SoftEngine 到另一个SoftEngine 系统 。 
  Singleton Model 独体运行模式. 如果应用系统不需要分布,也就是说:所有的应用组件发布在同一个SoftEngine 环境中,那么这个单独运行的模式叫独体运行模式 。 
  Group Model 群体运行模式. 基于独体运行模式,应用组件被分布在不同的SoftEngine 系统。彼此之间通过通讯通道连接在一起,形成一个分布的系统,称之为: 群体运行模式 。 
  SoftEngine 的体系结构,以多态的方 式 ( 独体Singleton / 群 体 Group ) 存在。独体充分表现了软总线的特性;而多个独体组成的群体表现出分布式的系统特性。 
  从独体上看:是软总线结构的应用软件,其中的每个模块(对象Object )以插件的方式,通过系统提供得接口及配置文件,发布在系统上。对象彼此之间,通过任务通道(Task Channel)协调工作在一起,而Object 之间的构件操作被封装在SoftEngine Kernel 内。 
  从群体上看:是一个分布式的结构,每个独立运行的SoftEngine 系统,通过Kernel 的通讯通道(Communication Channel)彼此连接,协调工作,成为一个完整的强大的分布式系统 。

3. 布式系统的关键技术 
  3.1 面向对象技术Object-Oriented 
  客户/ 服务器模式,是典型的分布式计算模型。在此模式下,客户端建立连接到服务器,通过相互约定的协议通讯,以达到交换信息的目的。SoftEngine 核心的通讯通道封装了这些复杂的底层细节。通过多层的封装技术,将底层对象与应用对象完全隔离。SoftEngine 只在组件区域为应用提供了一些抽象类作为“软总线”的接口。如下图所示: 



图表 2 Abstract class is the interface of Soft-Bus. 
Application Objects : 应用对象
System Objects: 系统对象
Infrastructure Objects: 底层对象
Abstract Class: 抽象类 
  设计一个可重用的面向对象软件不是简单的事,一个分布式的重用系统更是困难的事。在SoftEngine 的基础之上却很容做到。因为其本身的体系结构是对象化设计的,也是可重用的 。 
  在组件区域内,开发人员只需关注应用的业务,继承接口抽象类,实现所定义的业务流程,通过发布实例化的应用对象,构造应用系统。这种面向对象的开发模式,对程序员来讲是非常简单,非常有效的,也可从繁重的体力劳动(编码)中解脱出来,更多的精力用于设计工作。 
  组件区域中的应用对象,是可被重用。按照一定的发布方式,可以在不同的SoftEngine 系统中再次利用。可被重用性不再取决于编码的质量,而在于如何设计出好的应用业务逻辑流程。关于这一点,我们将在后续的流水线式设计模式中讨论。 
  3.2 任务驱动Task-Driven 
  在SoftEngine 内部采用的是任务驱动。在这里所提到的任务驱动概念,不完全相同于一些专业任务驱动论文,更接近事件驱动(Event-Driven) 。也就是说,所有的对象在没有任务时,处于空闲状态;直到有任务(事件)到达,对象的运行模式才会转变为激活状态。 
  在不同的对象间,传递任务是合作(collaborate) 的唯一方式。合作模式有两种: 
   1、完全独立的模式(Individual)
   2、松散耦合模式(Loosely Coupled) 
  下面图示了其中的不同: 



图表 3 Individual and loosely coupled collaboration 
  对象A 和对象B 有次序地处理同一个任务,对象B 必须等待对象A 的处理果。对象A 和对象B 的合作关系称为:松散藕合模式 。 
  对象B 和对象C 分别处理不同的任务。这种关系称为:完全独立的模式。也就是说,对象C 需要的任务,不总是来自于对象B ,它们之间没有必要的关联。 
  在完全独立模式,对象C 由于功能相对独立,无须等待想关数据,所以效率比较高,具有很高的实时性。但存在功能相对集中,适应性比较差,被可重用的可能性也相对减少的不足。松散耦合模式,为完成任务,将处理步骤/ 功能细分为不同的对象。使对象A 和B 的功能相对专一,适应性增强,可重用性也增加了。同时更据不同的功能效率可以方便的作负载均衡(Load balancing)调整。但是任务的多次投递,以及相对的耦合关系,也降低了局部的处理性能。就如下图所显示的两者的性能比较: 



图表 4 Performance of collaboration 
  在实际应用开发中,如果选择完全独立的模式 或 松散耦合模式,取决于在设计阶段如何定义应用的业务流程。这将在后续章节: 流水线式设计模式中再次阐述 。 
  每个被传送中的任务,都具有自己的生存周期(Live cycle),从产生到被丢弃。如下图生存周期图: 



图表 5 Live-cycle of task 
   Created : 被产生 Forward: 正向传送
   Backward: 回送 Pending: 悬挂
   Timeout: 超时 Operating:处理
   Droped:被丢弃 
  一个任务由某个功能对象产生,并传送(forward)到下一个目的对象,在那里将被处理之后,这个任务会被丢弃,或被返回(backward)到源对象。这是一个常规的任务生存周期,但如果在任务传递途中,发生如目标对象不可到达等阻碍,该任务将会被悬挂(pending) 。直到继续传送或超时(timeout)被丢弃。任务在传递中的安全问题,将会在后续的数据安全主题中讨论。

阅读(556) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:面向对象分布式开发系统理论篇(下)(ZT)

给主人留下些什么吧!~~