UML软件工程组织

面向对象的分布式开发系统-理论篇(1)
作者:陈立峰 本文选自:赛迪网 2003年04月14日

 

  关键字:

  分布式对象Distributed Object  任务驱动Task-Driven

  流水线式设计模式Pipelining Design Model  分布式系统Distributed System

  数据安全Data-Safety   面向对象Object-Oriented

  中间件 Middle-ware   体系结构 Architecture

  摘 要

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

  1.前言

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

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

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

  CORBA 就是这样一个比较不错的协议规范。基于CORBA ,也有一些可用于开发的中间件 。 但CORBA 不是完整的体系结构,无法像J2EE 一样为所有的Web 系统提供统一的体系。所以更显基础、低层一些。而且部份的J2EE 产品是构架在CORBA 产品之上。所以直接利用CORBA 产品做系统开发 ,还需解决以下的问题:

  ·没有统一可用的体系结构。不同的系统,都需要设计不同的体系结构。在项目开发中通常需要花费大量的时间。

  ·如果在设计的体系结构中存在薄弱点( 瓶颈点) ,还需要为这些点设计负载均衡等解决方案。

  ·众所周知,进程(Process)间的同步调用(synchronously calling )不适合实时分布式系统。基于CORBA ,还需要做一些复杂的工作,来实现异步操作。

  ·更重要的:CORBA 不是面向对象(Object-Oriented) ,在为应用提供服务时,还需要封装其复杂的分布式操作。

  ·繁重的集成测试工作。

  上述的这些问题,归根结蒂:需要一个好的体系结构,帮助程序员解决这些在每次开发中都会遇到的相同问题。参考J2EE ,不难总结出其应当具备的特点:

  ·稳定的,可平滑升级的 。

  ·具有面向对象特性,模块可重复使用 。

  ·基于组件的,软总线机制。

  ·可非程序化的可分布机制。

  ·异步的远程对象访问。

  ·事件驱动或任务驱动 。

  ·支持流水线式设计模式 。

  ·对象的负载均衡及冗余。

  按照这些想法,就一个分布式开发平台的原型( 暂命名为SoftEngine) ,本文简要讨论一些实现分布式体系结构想关的理论。在后续文章( 应用篇) 中,将以一个实际的例子: 手机短信增值业务平台的建设,来描述如何利用这些理论快速开发出,灵活、稳定、高性能的分布式应用系统 。

  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)彼此连接,协调工作,成为一个完整的强大的分布式系统 。



版权所有:UML软件工程组织