客户端-服务器技术是支持应用系统的软件技术演化的结果。特别地,客户端-服务器技术的演化已经成为信息技术扩展的一个重要因素,它伴随着应用程序业务流程的范围的不断增长。最初的技术集中于文件共享。文件共享目前仍然是Internet中占有统治地位的范式,它使用HTTP等协议支持可用的全球文件系统的访问。文件服务器技术演化为数据库服务器技术,形成了第二代占有统治地位的能力。我们要重点注意,文件服务器技术与分布式计算技术的演化紧密相关。
最近客户端-服务器技术正在逐渐被N层面向对象解决方案所代替。基于Java应用程序服务器,N层解决方案包含了对瘦客户端用户界面的支持,同时增强了可伸缩性和可靠性。
最成功的网络技术之一来自于太阳微系统公司,称为网络文件服务器。太阳微系统公司通过提供在任意平台上的实现源代码的免费参考技术访问权成功地成为了实际的标准。网络文件服务器技术是基于开放式网络计算的,这是太阳微系统公司的另一项技术,它是第一代成功的分布式计算机技术之一。网络文件服务器是基于面向过程的技术,受到C编程语言的约束,就像其它的重要的远程过程调用技术(分布式计算环境)一样。这两种技术都导致了文件共享能力被广泛地实现了。数据库服务器技术利用这些下层的分布式计算能力来提供不同的客户端平台对数据库系统的远程访问。
在数据库时代产生过程中另一项重要的技术是事务处理监视器。事务处理监视器使我们能够通过分布式系统实现一致的和可靠的数据完整性维护。事务处理监视器技术成为分布式技术的一种重要的附加能力,确保了执行的性能和完整性。
群件(Groupware)技术也出现在80年代末90年代初,它是从电子邮件开始的,演化成更高形式的交互能力,其中的一些目前还能在Internet上看到(例如聊天室和视频会议)。最近,面向对象、分布式计算和Internet技术已经结合在一起以支持自适应的计算环境,其范围可以扩展到了全部的计算机。这一代技术主要受到基于太阳微系统公司的Java和微软的.Net平台的应用程序服务器的支持。
客户端-服务器技术最初是由基于主机的技术演化而来的。基于主机的技术是单处理器系统的自然而然的产物,可以追溯到计算的起源。在主机技术中,系统中的数据的处理和管理都是集中完成的。主机被很多外围客户终端围绕着,而这些终端仅仅简单地支持信息的表现。在客户端-服务器技术时代,客户端计算机成为了重要的处理资源。在个人计算机革命中客户端系统的处理速度不断上升,现在其处理速度可以与以前的小型机和大型机竞争了,甚至于超越了它们。最初为了支持部门和企业的数据访问,客户端-服务器技术支持了通过局域网连接到后端大型机、小型机和工作站服务器系统。在软件层中支持这种通讯的技术称为中间件(middleware)。
"天赋可能就是用简单的方式表达深刻的事情。"--Charles Bukowski
历史
最初,中间件是作为支持PC和服务器平台之间的客户端-服务器网络通讯的常规能力安装。随着技术的发展,中间件被逐渐嵌入操作系统中,这样它就变成了客户端平台和服务器平台的一种普通的能力。嵌有中间件的客户端系统现在支持对本地和通过网络运行的应用程序的服务。客户端-服务器技术向嵌入能力的演化给应用系统的执行增加了少量的挑战。实际上,目前客户端-服务器的演化有多种不同的情形,包括大型机平台的复苏(成为了IBM的重要业务),以及称为网络计算机的能力开始类似大型机时代的哑终端了(图5)。
图5.客户端服务器技术的起源
对象技术是围绕客户端-服务器能力组织起来的。对象技术分成了主要的两类。其中一些被组织起来用于为软件开发的过程服务。这种技术的例子包括面向对象的分析和面向对象的设计。面向对象的分析由当前和未来的业务流程的模型的信息技术能力的定义所组成。面向对象建模为业务实体和业务流程的表现提供了丰富的能力。这与面向过程和关系数据库技术不同,它们要求应用程序设计者把业务环境的表现按照控制流和数据表现的技术约束进行折衷。由于过程中状态信息的简单自然的通信,面向对象分析提供了模拟现实的机制,而它相对容易与最终用户沟通。由于与最终用户的沟通更容易了,面向对象系统的设计和确认就更容易实现了。
面向对象设计是另一种主要的软件阶段,它已经被软件程序市场成功地商业化了。面向对象的设计由支持软件缺陷的减少和软件能力的快速原型方法的软件结构规划和能力共同组成。
对象技术的其它的主要种类集中在实现上。在它的中心是面向对象中间件技术。面向对象中间件支持分布式计算和多种不同的软件技术(包括操作系统、编程语言和数据库)的集成。面向对象的编程语言是对象范式的直接表达。面向对象的编程语言支持数据和过程的封装,采用组件对象中的抽象数据类型的形式。现在有多种面向对象的编程语言,就像有很多面向过程的编程语言一样。占有支配地位的面向对象的编程语言包括C++、Java语言和C#,但是还有大量的团体支持Eiffel和其它语言。面向对象的中间件允许这些语言交互操作来构成应用程序。面向对象的编程语言是实现应用软件的一种可能的选择。我们也可能利用面向对象的分析和设计来支持在面向过程语言的编程。这种情形经常发生,因为很多团体的开发环境都把面向过程的语言(例如C编程语言和COBOL)作为自己的主流语言。
面向对象的一个最重要的特性是开发者不需要关心下层的实现。如果下层的实现是面向过程或面向对象的,只要应用程序被正确地封装了,都没有任何问题。分布式对象中间件支持不透明的封装属性,使这种操作成为可能。商业软件与传统的和面向对象的应用程序的集成也被这些封装属性的结果所激活(图6)。
图6.中间件的角色
面向对象的中间件技术可以被看作是面向过程开发的副产品。从操作系统开始,支持进程间通讯的面向过程的技术就已经被添加进来以激活文件共享和客户端-服务器能力的演化(图7)。这些技术包括远程过程调用(RPC)技术(例如开放式网络计算,ONC)和分布式计算环境(Distributed Computing Environment ,DCE)。RPC技术领先于套接字层的技术,而该技术是传递消息的一种更简单的方式。目前,所有这些技术仍然在应用系统中和Internet上被活跃地使用着。面向对象的中间件技术提供了下一代的能力,它把更多的应用程序功能打包到下部构造之中了。
图7.中间件参考模型
分布式组件
我们注意到了一些有趣的东西:前一代的进程间通讯技术在市场上销售的时候都承诺了全部应用程序的互通性。目前面向组件的技术也采用了相同的方式。分布式的面向对象的中间件拥有克服前一代技术的缺陷的优点。我们发现即使远程过程调用技术激活了分布式软件的集成,但是为了认识系统,这些技术的原始层次还是要求牢固的应用程序设计。否则,一旦实现这些系统,它们往往相当地脆弱,并且难于维护。
1996年微软发布DCOM,把它作为在Internet上使用的多媒体中间件技术。DCOM仍然暴露了很多更低层次的原始的细节信息,它意味着远程过程调用的衰落。DCOM添加了一些面向对象的能力和支持C++编程的普通集成。简单地添加支持C++的能力不一定能够克服DCOM的前任(叫做分布式计算环境)中的面向过程的程序给分布式系统开发者暴露了过多的复杂性这个缺陷。但是,有了当前版本的产品--微软.Net后,微软建立一种企业开发环境,它能够顺利地与更加成熟的J2EE应用程序服务器竞争了。
通用对象请求代理架构(Common Object Request Broker Architecture)是从下向上设计的用于支持分布式面向对象计算的第一种技术。图8显示了在技术市场上,微软的技术基础与所有其它厂商的信息技术实际上是隔离的。其它厂商支持多种开放系统技术,它是大家一致同意的标准步骤的结果。CORBA是被广泛接受了,它是不受厂商约束的分布式对象中间件的标准。CORBA在很多方面都简化了分布式计算。其中最重要的进步是CORBA提供了语言的无关性,允许不同环境中的多种编程语言使用对象消息交互操作。
图8.分布式技术
在中间件层之上还有一些其它的技术,它们支持了应用程序功能的进一步集成。在微软技术基础中,这些技术都被归组为一个品牌名称--.Net。.Net技术包含了对中间件能力的彻底改造,它删除了接口定义语言。目前CORBA能力已经广泛地使用了,并且它支持来自多个厂商平台的多种编程语言的集成。
CORBA技术是一家开放系统联盟(叫对象管理工作组,OMG)的产品。OMG拥有大约700个成员组织,包含了所有主要的信息技术厂商,例如太阳微系统公司、惠普、IBM、网景和微软。OMG通过把焦点聚集在编程接口的标准化上解决了应用软件互通性的问题。有了上一代远程调用技术后,唯一被广泛采用的标准接口是网络文件服务器,它是移动媒介交换之上的最原始的软件互通性形式。最终用户提供自己的需求并与开放系统程序交互是很重要的,因为它们决定了最终用户系统的开发将使用的技术的形式。特别地,富有经验的技术用户可以鼓励开放系统社团和软件厂商提供更加完整的能力以开发复杂系统。这将减少技术风险并为应用程序开发者创造更多的方法。
CORBA技术围绕组件标准化了的对象请求调用(图9)。在对象管理架构(它是OMG范式的路线节点)中有几种类型的对象。对象请求代理是很重要的,因为所有其它类型的对象都要通过它来通讯。对象管理架构是一种概念上的分层的架构,它包含的域应用程序(domain application)实现的特征的水平正在不断地增长。对象技术包含的大多数通用的能力都通过对象请求代理被标准化了。下一层次的能力被称为CORBA服务,它为系统的实现提供启用功能。CORBA服务的功能比得上当前操作系统的服务,而操作系统的服务一般却被捆绑在平台上。CORBA服务迈出了分布式操作能力(它支持应用软件和业务软件跨平台、跨环境的集成)向前的第一步。
图9.对象管理架构
目前CORBA技术已经可以广泛地使用了,而且事实上它是每种操作系统平台上都可以使用的主流技术。某些更加创新的平台,包括Netscape Communicator(客观的说,它可以被看作是一种操作系统平台),都集成了CORBA和所有的可交付使用的许可。微软也通过发布规范(使它与微软下部构造工作可以交互作用)支持CORBA技术市场。OMG为COM和COM+代的微软技术制定了交互作用规范。这些标准在目前主要的CORBA执行系统上的产品中都是可以使用的。
此外,第三方厂商也提供了对CORBA的直接支持。这些厂商包括Black and White software(它提供图形化用户界面工具包)、数据库厂商、系统管理厂商和专业市场厂商(例如实时和计算机辅助软件工程工具)。CORBA提供了接口定义语言(IDL),它是面向对象的关键的基本能力。接口定义语言是定义软件边界的符号。IDL是一种规范语言,它允许我们描述应用系统的计算机软件架构,并包含了供交互操作能力的国际标准。
CORBA的接口定义语言已经被国际标准化组织采用了,并作为电信系统的正式的标准副本。IDL是国际标准DIS14750。同样地,IDL是软件架构中定义应用程序编程接口的通用符号。因为IDL是独立于编程语言的,单一规范对于定义任何语言或平台环境上的软件接口都是足够的。IDL接口支持面向对象的设计和传统软件的集成。由于对象管理工作组是开发软件接口的面向对象的标准规范的唯一的权威社团,IDL与对象技术开放系统是同义的。
IDL支持支持多种编程语言和计算平台不同组合的集成(图10)。有了IDL,任何人都可以指定软件接口,它很容易编译并集成到可用的编程语言中。这些能力在商业中也是可以使用的,并且一般支持分布式的通讯。
图10.接口定义语言的技术独立性
这一部分讨论了主流技术是如何演化为客户端-服务器技术、以及中间件是如何提供分布式计算软件能力的。由于客户端-服务器技术与对象技术已经结合在一起了,现在可以提供面向对象的能力,它可以使传统系统跨越所有的编程环境。此外,CORBA和微软的COM+之间的互通性覆盖了很多组织的流行的桌面平台。支持开放式系统的厂商也支持CORBA。占统治地位的Internet厂商都在交付CORBA,并把协议堆栈与众多获许可的人相关联。CORBA是面向对象中间件的标准。其产品现在可以使用了,它作为让应用程序开发能够进行的水平的(horizontal)服务规范。OMG正在开发垂直的规范,它将为应用程序级的互通性提供直接的支持。
ISO已经把CORBA IDL名称作为跨越多种平台的软件接口定义的标准。
面向对象是现实世界的信息和业务流程建模的普通的范式。对象技术支持不同种类的和分布式的信息技术(包括传统系统)的集成(图11)。把面向对象和组件技术结合在一起就能进行大型系统概念的创建,而它正在变成应用程序公司和终端用户的竞争优势。
图11.对象技术的互通性全景