最近10年来, 客户/服务器结构是软件界最引人瞩目的技术进展之一,已经成为替代以"主机—终端体系结构"为主的基本计算结构。 早期的客户/服务器结构是单服务器的局域网结构, 有些专家称之为客户/服务器结构的第一次革命。随之而来的是应用程序结构的变化,即需要将应用程序分为客户机程序和服务器程序。客户机通常是PC机,用以提供图形界面,这正是那些驻留在PC机上的以图形用户界面功能为主的操作系统的长处。服务器的规模幅度很大,既可以是大型主机,也可能是高档微机,通常用以提供访问共享资源的服务,而这些资源通常是以数据库为主。这是服务器上的操作系统近年来发展的主要推动力,现代操作系统都在向微内核、多处理器、并行处理和多线程方向发展。目标不外是提高计算效率,降低成本。
当前在客户/服务器结构方兴未艾的时候, 又兴起了所谓分布式对象的革命。其最基本的推动力在于新的硬件体系结构和新的软件体系结构满足并进一步推动了应用并进而刺激了应用的需求。
分布式对象技术是又一场革命, 有些专家称之为客户/服务器体系结构的第二次革命,是由高速、低价和宽频带的数字通讯以及成熟的网络技术、面向对象技术等来驱动的。 所谓M2O2N时代就是指近年的大规模并行处理和多媒体;面向对象和开放系统;广义的网络和通讯, 分布式对象技术正是与M2O2N紧密相关的新技术。电报、电话公司和广域网服务公司正在用光纤将整个世界连接起来。 通讯领域的专家谈论的是100兆以上的传输速度, FDDI、ATM、SDH等新技术将提供给用户高达260兆以上的传输率。PC机也已经进步到可运行包括微内核和多线程等技术的现代操作系统, 如UNIX、OS/2和Windows 2000、Windows NT等。计算机技术和通讯技术的飞速发展炒热了Internet,全球数以百万计的服务器和数以千万计的用户正在互相连接起来。这种规模空前的互连,既给出了规模空前的软件硬件的发展余地,也提出了困难程度空前的问题。问题就在于:原先的客户/服务器体系结构是为局域/广域,企业级网络设计的,它能为某些模式相对固定的应用和相对稳定的数据需求服务,但是面对着各种专业领域提出的更新的更进一步的需求却非常难于在这一新的计算体系下为一个几乎完全无序的超大规模的网络环境提出完整的解决方案。分布式对象技术就是在这样的环境下应运而生的。
简而言之,分布式对象技术是将近年来发展成熟起来的面向对象技术与网络通讯技术有机地结合起来而形成的。分布式对象技术的基本概念之一是所谓构件(componnent)概念。构件可以跨越平台、网络、语言、应用程序、工具、硬件而运行,将其描绘成一种智能的程序似乎可以多少道出一点这一概念的真谛。面向对象技术的发展不会脱离其他技术发展规律的轨道; 所有技术的成熟过程中都会经历一个技术/工业标准的形成过程,目前分布式对象技术也处于工业标准形成的阶段,例如微软公司提出的“对象构件模型”COM (Componet OBject Model) 和OMG(Object Management Group) 提出的CORBA(Common Object Request Broker Architechture)。这两个标准的作用类似于对象构件运行的总线。随着Internet的发展,已经可以看到新型的应用程序结构体系正在产生出来;其生成、创建、开发、运行和管理的方式以及其功能都将迥异于我们今天的局域网的应用程序。分布式对象构件将彻底改变生产软件的传统模式,即在软件开发的各个阶段:定义、设计、开发、集成装配、调试、测试、销售和版权控制等各个环节上,都将因网络和对象这两个主要因素的改变而发生巨变。举例而言,国外著名专家普遍都认为Internet网上开发的未来软件,应当是以对象构件为基本单位的,软件的开发者将一边在网上订购所需的构件, 一边构造目标软件; 由网上购得的对象构件,由类似于COM和CORBA这样的标准软总线提供运行所需的各种服务。如此构造的应用程序具备天生的客户/服务器的体系结构, 和天生的面向对象的技术特质,而且,不难预料,这样的应用软件其开放性是自然而然的。分布对象技术追求的目标是无缝连接,即插即用。
OMG的CORBA是从1989年启动的一个开放系统的软件总线标准发展而来的,当时的动机就是要使不同厂家生产的面向对象的软件产品能够跨越网络和操作系统。这一进程已使OMG拥有了500多家加盟的成员公司;OMG是这一领域的软件总线标准的始作俑者。OMG于1991年发表了CORBA 1.1,在1994年12月又通过了CORBA 2.0。 时至今日,已发展到了CORBA 3.0。
顾名思义, CORBA作为对象总线, 主要的功能是为客户提供对象需求的中介服务(Object Request Broker),通过CORBA的支持,客户能够以动态或静态的方式调用远程对象所封装的方法。所谓静态的调用方式,指的是客户采用的对象构件中明确定义了调用接口,客户运行的应用程序可以直接访问到某远程对象及其方法;而所谓动态的调用方式,则是指客户的应用程序在构造和生成的时刻并未确切规定或定义远程调用的对象,而是在运行时间,根据当时的需求条件,通过分布对象软总线提供的对象需求中介服务,动态地定向所要访问的对象和途径(就某种意义上讲与数据库管理系统中的动态SQL语句有一些相象之处)。
遵循CORBA的产品一般统称为对象请求代理(ORB),ORB是一种中间件,主要负责在对象之间建立起客户/服务器的关系,通过ORB,客户端即可透明地访问到一个服务器上的对象内的方法。 不论服务器对象是在同一台机器上还是在网络上。ORB的机理是首先截获客户对象发出的请求,负责找出能够对请求做出应答的对象,然后将参数传递给该服务器对象,并启动其中的方法,最后还要负责将结果返还给请求的客户方。因此客户方不必知道所请求的对象的位置,以及该对象的编程语言、操作系统等其他与对象接口无关的信息。 因此,ORB在异构的分布环境中不同机器上的应用之间提供了一种交互操作的能力; 从而实现了多个目标系统之间的无缝连接。在传统的客户/服务器应用中,开发者采用各自的设计、语言、标准和协议。而协议要依赖于实现协议的语言、网络的传送方式以及许多其他的因素。ORB则大大简化了这一开发过程。采用ORB后,穿越应用界面的协议都是用CORBA中的界面定义语言定义的。IDL是一种语言,但对各个应用而言又是唯一的,因此ORB又提供了相当的灵活性,IDL允许用户任意选择适当的操作系统,应用的运行环境,甚至语言。最重要的是, ORB允许集成现存的构件,应用软件的开发者在基于ORB开发环境中只需简单地规划对象构件,这些构件的接口都采用相同的IDL来描绘,然后书写一段打包的代码,将对象拼装起来。
在面向对象的技术中,通过继承和封装技术,面向对象技术不但提供了更为逻辑和逼真地为物理世界构造计算模型的能力,同时也提供了很好的代码复用能力;但是这些能力的赋予和取得与语言编译器结合得十分紧密。也就是说,迄今为止,面向对象技术从某个角度来看,其开放性是有一定局限的。而OMG的努力——CORBA将克服这一局限性,在CORBA体系结构中,应用程序不但可以访问和操作对象及其封装的方法,还可以通过CORBA软总线提供的对象需求中介服务而动态或静态地与远程对象连接起来,形成分布式面向对象的应用,即形成一种跨越广阔地域,且又面向对象的应用。正是因为每一个对象构件是在分布对象软总线CORBA的支持下行动的,所以创建服务器端对象的所采用的语言和编译器对于客户端而言是透明的;也就是说分布式对象构件可以不受平台、操作系统、语言等的制约,表现出高度的智能性和开放性。
显然,这是一场软件开发方法的革命;完全可以看做是软件从手工作坊走向成熟产业的转折点。其影响所及将不限于软件开发领域,必将影响到软件的整个产业,也许还将有更深刻的、远远超出软件领域的社会影响。不难看出,沿着COM或CORBA开辟的道路,我们看到了一个波浪式前进和螺旋式上升的生动例子。回顾十年前,当人们试图冲击"大型——终端"的集中计算框架而进入PC——LAN的网络计算框架时,曾经摒弃过“下装程序(DOWN LOAD)”类的作法;在“传送程序”还是“传送数据”上采用了后者;进而,为了进一步降低网络带宽的瓶颈问题,发展了“传送请求——取得结果数据”的客户/服务器技术,即所谓前文提到的客户/服务器的第一次革命。现在,随着PC能力的急速增强和网络带宽的迅速提高(回顾2.4K的Modem时代和10M带宽的局域网,ATM和FDDI乃至SD H展现的数据传送能力、速度和能力真象天方夜谭一样),分布对象技术似乎又走回了“传送程序”的老路。但实际上,已经经历了螺旋式上升的过程,不再是“传送程序”而是“传送对象”。不妨看看目前我们所熟知的PC机的状况,PC机对每个接触、使用、操纵和控制信息的人而言,愈来愈变成一个百宝工具箱——生成、书写、编辑文件;下达指令、业务处理、查询和浏览信息、决策,甚至游戏、娱乐和交友;但是这么多的功能就需要这么多的软件来执行:难怪PC机由几百兆、几千兆发展到上万兆的磁盘容量,仍然感到硬盘空间的短缺。而面对日新月异涌现出的新的功能更加强大的软件,每个PC机的用户都会有一种困惑:我的机器和软件还有没有够用的时候,我的投资到底是不是一个无底洞?业务蒸蒸日上的软件开发商也有他们的苦衷,面对数以万计的用户群,版本的更新和功能更丰富的新的软件包的分发和销售,是个非常耗时费力的沉重负担;他们只有两个选择,要么背负这些沉重负担(想像一下大软件公司的全球奔波的系统维护人员);要么令用户为软件提供者的服务和支持的跟不上而丧气。当前国际上几乎所有大软件公司正在考虑如何克服这一新形式的软件危机。
从1997年兴起的以分布对象技术为主要特色的网络计算软件的发展高潮。大批软件工程人员已投入了对象构件的开发工作,估计不久以后将有50%以上应用软件程序的开发人员将主要依靠分布对象技术,使用对象构件来开发他们的应用系统。当前的软件产业正象20多年前的硬件产业,先开发集成电路芯片(功能和集成度每2年要翻3番),在总线、接口、电气等一系列标准的指导和制约下,组装到印刷电路板上,形成各种各样功能各异的电路板——硬件系统,这些电路板又常常在成熟后再次在更高的生产技术的支持下制成芯片,周而往复。软件产业梦寐以求的产业化、标准化、集约化的生产和流通,或许已经到了我们面前。
CORBA中只负责定义接口而不具体确定代码;这些接口是用CORBA的接口定义语言(IDL)来描述的,IDL是跨语言、工具、操作系统乃至网络的。CORBA的目标是使IDL成为客户/服务器的中介和构件的标准接口。
以OMG和COM相比较, 则OMG是一更为开放的面向分布对象的体系结构,而COM的OLE的味道则不是那么纯正。Microosft的COM,OMG的CORBA在标准上的竞争是很本质的竞争;虽然OLE/COM与CORBA两者都采用了对象构件技术, 但OLE/COM并非由纯对象技术发展而来,因此与CORBA相比较,OLE/COM没有提供继承性;充其量只能算作是基于对象的,而不能算作真正是面向对象的。而CORBA真正是由面向对象技术发展而来,具备面向对象技术的各种特性, 包括继承性在内。 因此, 从技术和发展前景上看,CORBA是更好的分布对象技术产品软件总线标准。CORBA是分布对象系统的精髓, 将真正的互操作性引入了当前的计算环境。
CORBA等分布对象技术的发展,面向对象技术和网络技术的紧密结合是网络计算时代的曙光,许多专家学者都纷纷宣称网络计算时代已经到来,CORBA等新技术即为所谓网络计算时代的第一块里程碑。