多层客户机/服务器结构分析

□华中理工大学电子科学与技术系 刘卫忠 徐重阳 蔷薇

返回

协作计算模型

C/S计算技术在信息产业中占有重要的地位。网络计算经历了从基于宿主机的计算模型到客户机/服务器计算模型的演变。

在集中式计算技术时代广泛使用的大型机/小型机计算模型是通过一台物理上与宿主机相连接的非智能终端来是实现宿主机上的应用程序。在多用户环境中,宿主机应用程序既负责与用户的交互,又负责对数据的管理;宿主机上的应用程序一般也分为与用户交互的前端和管理数据的后端,即数据库管理系统 (DBMS)。集中式的系统使用户能共享贵重的硬件设备,如磁盘机、打印机和调制解调器等。但随着用户的增多,对宿主机能力的要求很高,而且开发者必须为每个新的应用重新设计同样的数据管理部件。

80年代以后,集中式结构逐渐被以PC为主的微机网络所取代。个人计算机和工作站的采用,永远改变了协作计算摸型,从而导致了分散的个人计算模型的产生。一方面,由于大型机系统固有的缺陷,如缺乏灵活性,无法适应信息量急剧增长的需求,并为整个企业提供全面的解决方案等等。另一方面,由于微处理器的日新月异,其强大的处理能力和低廉的价格使微机网络迅速发展,已不仅仅是简单的个人系统,这便形成了计算机界的向下规模化(Downsizing)。其主要优点是用户可以选择适合自己需要的工作站、操作系统和应用程序;PC的应用程序非常丰富,且易于开发;工作站上的数据是属于个人自治的信息集合。

网络/文件服务器计算模型的产生用以解决个人PC和工作站的数据和外部设备共享问题。在一个局域网中共享数据,需要将文件存放在文件服务器上,所有用户都通过这个存储数据文件的中央节点访问数据文件。这个节点也是局域网 (LAN) 中共享外部设备的中枢。但网络/文件服务器计算模型的内在设计,使得它无法像大型机那样对多用户请求、共享数据的应用提供足够充分的服务。网络/文件服务器计算模型不提供多用户应用要求的数据并发性,当某一用户封锁一个文件便阻止了其它用户共享该文件;如果LAN中许多工作站请求和发送很多文件,网络很快就达到信息传送的饱和状态,造成瓶颈,降低整个网络的性能。

以PC机为主体的文件服务器并不能满足分布式计算的需求,而客户机/服务器技术正是一种分布式计算模式,它集中了大中型系统及文件服务器的优点,并有良好的系统开放性和可扩展性,即寻找一种适当规模化 (Rightsizing)。客户机/服务器计算模式定义了台式机如何和服务器相连,以实现数据和应用的共享,并利用台式机的处理能力将数据和应用分布到多个处理机上。这种模式当时被用于工作组和部门的资源共享。客户机/服务器系统有三个主要部件:数据库服务器、客户应用程序和网络。服务器负责有效地管理系统的资源,其任务集中于:

网络通信软件的主要作用是,完成数据库服务器和客户应用程序之间的数据传输。

传统C/S计算模型分析

客户机/服务器系统比文件服务器系统能提供更高的性能,因为客户端和服务器端将应用的处理要求分开,同时又共同实现其处理要求,对客户端程序的请求实现“分布式应用处理”。服务器为多个客户端应用程序管理数据,而客户端程序发送、请求和分析从服务器接收的数据,这是一种“胖客户机 (Fat Client)”,“瘦服务器 (Thin Server)”的网络计算模式。

在一个客户机/服务器应用中,客户端应用程序是针对一个小的、特定的数据集,如一个表的行来进行操作的,而不是像文件服务器那样针对整个文件进行,对某一条记录进行封锁,而不是对整个文件进行封锁,因此保证了系统的并发性,并使网络上传输的数据量减到最少,从而改善了系统的性能。客户机/服务器模型的优点主要在于系统的客户端应用程序和服务器部件分别运行在不同的计算机上,系统中每台服务器都可以适合各部件的要求,这对于硬件和软件的变化显示出极大的适应性和灵活性,而且易于对系统进行扩充和缩小。在客户机/服务器模型中,系统中的功能部件充分隔离,客户端用程序的开发集中于数据的显示和分析,而数据库服务器的开发则集中于数据的管理,不必在每一个新的应用开发中都要对一个数据库进行编码。将大的应用处理任务分布到许多通用网络连接的低成本计算机上导致了费用的极大节约。

随着信息的全球化,区域的界限已经被打破,电子商务作为Internet的强大的驱动力,迫使客户机/服务器模式从局域网 (LAN) 向广域网 (WAN) 延伸。如今,Internet已经成为全球最大的网络互联环境,在Internet的环境下实现数据的客户机/服务器计算模型正是目前的流行趋势。在这种条件下产生的网络计算模式实际上是对传统的C/S计算模式的扩充,用公式表示为:

网络计算模式 = 多层C/S + 动态计算

多层C/S结构

两层与三层C/S结构的区别

应用程序从结构上一般分为四层:形式逻辑、业务逻辑、数据逻辑和数据存储。传统的C/S计算多是基于两级模式,如图1所示,在这种模式中,所有的形式逻辑和业务逻辑均驻留在Client端,而Server则成为数据库服务器,负责各种数据的处理和维护。因此Server变得很“瘦”,被称为“瘦服务器 (Thin Server)”。与之相反,这种模式需要在客户端运行庞大的应用程序,这就是所谓的“胖客户机 (Fat Client)”。其数据流图如图2所示。图2 两层C/S结构的一般处理流程

用公式表示为:

两层网络计算模式 = 多Client +单/多Database Server + 动态计算

随着C/S结构应用范围的不断扩大和计算机网络技术的发展,这种结构带来的问题日益明显,主要表现在以下几方面:

首先,系统的可靠性有所降低。一个客户机/服务器系统是由各自独立开发、制造和管理的各种硬件和软件的混合体,其内在的可靠性不如单一的、中央管理的大型机或小型机,出现问题时,很难立即获得技术支持和帮助。

其次,维护费用较高。尽管这种应用模式在某种程度上提高了生产效率,由于客户端需要安装庞大而复杂的应用程序,当网络用户的规模达到一定的数量之后,系统的维护量急剧增加,因而维护应用系统变得十分困难。

第三,系统资源的浪费。随着客户端的规模越来越大,对客户机资源的要求也越来越高。尽管硬件不断更新,但新的操作系统和新的应用软件的不断出现,使得用户对硬件的更新仍然跟不上软件更新的速度。客户不得不在本地硬盘上装入大量的软件,但是使用的大都只是其中很少一部分(一般低于10%)。在一个拥有众多的“胖客户机”的环境中,这无疑是一种巨大的浪费。

最后,系统缺乏灵活性。客户机/服务器需要对每一应用独立地开发应用程序,消耗了大量的资源,但胖客户机的计算模式却仍然满足不了日益增长的应用的需要。在向广域网扩充(如Internet)的过程中,由于信息量的迅速增大,专用的客户端已经无法满足多功能的需求。网络计算模式从两层模式扩展到N层模式,并且结合动态计算,解决了这一问题。

目前流行的三层网络计算模式,用公式表示为:

三层网络计算模式 = 多浏览器 + 单Web 服务器+多数据库服务器+ 动态计算

如图3所示,在三层模式中,Web服务器既作为一个浏览服务器,又作为一个应用服务器,在这个中间服务器中,可以将整个应用逻辑驻留其上,而只有表示层存在于客户机上。这种结构被称之为“瘦客户机”。这种结构中,无论是应用的HTML页还是Java Applet都是运行时刻动态下载的,只需随机地增加中间层的服务 (应用服务器),即可满足扩充系统的需要。由此我们可以用较少的资源建立起具有很强伸缩性的系统,这正是网络计算模式带来的重大改进。三层C/S模式的数据流图如图4所示。

三层C/S结构的实现

三层C/S结构是将应用功能分成表示层、功能层和数据层三部分。其解决方案是:对这三层进行明确分割,并在逻辑上使其独立。原来的数据层作为DBMS已经独立出来,所以关键是要将表示层和功能层分离成各自独立的程序,并且还要使这两层间的接口简洁明了。一般情况是只将表示层配置在客户机中,如图5(1)或图5(2)所示。如果象图5(3)所示的那样连功能层也放在客户机中,与二层C/S结构相比,其程序的可维护性要好得多,但是其他问题并未得到解决。客户机的负荷太重,其业务处理所需的数据要从服务器传给客户机,所以系统的性能容易变坏。

如果将功能层和数据层分别放在不同的服务器中,如图5所示,则服务器和服务器之间也要进行数据传送。但是,由于在这种形态中三层是分别放在各自不同的硬件系统上的,所以灵活性很高,能够适应客户机数目的增加和处理负荷的变动。例如,在追加新业务处理时,可以相应增加装载功能层的服务器。因此,系统规模越大这种形态的优点就越显著。

值得注意的是:三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力很强,其作为整体来说也达不到所要求的性能。此外,设计时必须慎重考虑三层间的通信方法、通信频度及数据量。这和提高各层的独立性一样是三层C/S结构的关键问题。

在三层C/S中,表示层是应用的用户接口部分,它担负着用户与应用间的对话功能。它用于检查用户从键盘等输入的数据,显示应用输出的数据。为使用户能直观地进行操作,一般要使用图形用户接口 (GUI),操作简单、易学易用。在变更用户接口时,只需改写显示控制和数据检查程序,而不影响其他两层。检查的内容也只限于数据的形式和值的范围,不包括有关业务本身的处理逻辑。

功能层相当于应用的本体,它是将具体的业务处理逻辑地编入程序中。表示层和功能层之间的数据交往要尽可能简洁。

数据层就是DBMS,负责管理对数据库数据的读写。DBMS必须能迅速执行大量数据的更新和检索。现在的主流是关系数据库管理系统 (RDBMS)。因此一般从功能层传送到数据层的要求大都使用SQL语言。

在三层或N层C/S结构中,中间件 (Middleware) 是最重要的部件。所谓中间件是一个用API定义的软件层,是具有强大通信能力和良好可扩展性的分布式软件管理框架。它的功能是在客户机和服务器或者服务器和服务器之间传送数据,实现客户机群和服务器群之间的通信。其工作流程是:在客户机里的应用程序需要驻留网络上某个服务器的数据或服务时,搜索此数据的C/S应用程序需访问中间件系统。该系统将查找数据源或服务,并在发送应用程序请求后重新打包响应,将其传送回应用程序。随着网络计算模式的发展,中间件日益成为软件领域的新的热点。中间件在整个分布式系统中起数据总线的作用,各种异构系统通过中间件有机地结合成一个整体。每个C/S环境,从最小的LAN环境到超级网络环境,都使用某种形式的中间件。无论客户机何时给服务器发送请求,也无论它何时应用存取数据库文件,都有某种形式的中间件传递C/S链路,用以消除通信协议、数据库查询语言、应用逻辑与操作系统之间潜在的不兼容问题。

结论

和两层C/S结构相比,三层C/S结构具有更灵活的硬件系统构成,对于各个层可以选择与其处理负荷和处理特性相适应的硬件。合理地分割三层结构并使其独立,可以使系统的结构变得简单清晰,这样就提高了程序的可维护性。三层C/S结构中,应用的各层可以并行开发,各层也可以选择各自最适合的开发语言,有利于变更和维护应用技术规范。按层分割功能使各个程序的处理逻辑变得十分简单。一般而言,三层C/S结构的优势主要表现在以下几个方面: