各种web与数据库接口技术的性能和瓶颈分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

web与数据库的接口技术是各网站提供internet信息服务的关键技术。除了常使用的cgi 方式外,微软先后推出了idc、isapi、asp等方式,此外,java-applet也是web与数据库接口的常用方法。

概述

cgi(common gateway interface:公共网关接口)定义了一种有关环境变量的组合、标准输入流和标准输出流的接口规范。当浏览器向web服务器发出请求时,服务器通过执行一个外部程序来处理这一应用要求。

idc(internet database connector:internet数据库连接器)使用idc文件与htx文件,idc文件负责查询数据库,htx文件负责把查询结果格式化之后,再输出到客户端。

isapi(internet server application programming interface:internet服务器应用程序接口)由两类组件组成:提供纵向功能层的isapi应用程序与提供横向功能层的isapi过滤器。当接收到一个客户端的请求时,服务器执行一个对应的isapi应用程序。isapi过滤器则可以实现所有请求所共有的某些功能要求,当过滤器中定义的事件在进程中发生时,服务器调用过滤器中相应的函数进行处理。

asp(active server pages:动态服务器页)是服务器端的脚本文件,可以是html,也可以是vbscript或javascript,asp的目的是提供可编程html页来响应web请求。

java-applet(java小应用程序)与其它方式不同,当浏览器访问页面时,客户机要从internet上下载附在网页上的applet,其中包括能访问数据库的applet。

为了进行这五种接口方式的性能与瓶颈分析,本文作者进行了大量的对比性测试,测试方法如下:

五种接口方式的评测都采用windows nt操作系统平台及iis的web服务器。数据库采用sql sever 7.0与oracle 8.0(以下分别简称“数据库s”和“数据库o”)。两种数据库中建有相同的数据表,每张表含有14个字段,并建立索引,且都有48218条相同的记录。数据来源于“上海证券交易所”的股票数据。测试时系统只运行所需测试的web请求,无其它负荷。计算机配置为pentiumⅡ400、64m sdram内存以及33.6k/isdn(64k)modem。测试分为单机测试、远程测试(通过普通电话网与isdn进行)与局域网测试三个步骤,其中局域网测试是用来研究并发访问的。由于在真正的internet上,网络环境复杂,干扰因素多,故采用10mbps的局域网环境替代。

性能分析

接口速度

在50个并发访问、数据库精确查询13条记录的情况下,cpu的总处理时间如图1所示。

图1 速度对比

可见,这五种接口方式由快到慢依次为java-applet、isapi、asp、idc、cgi。在cgi方式下,对于每一个用户请求,cgi都要求服务器执行一个外部程序,这涉及到在操作系统中创建一个新进程。而isapi不同,它对于每一个请求创建的是线程,而不是进程,故系统开销小、速度快。其次,由于cgi方式在两个调用之间进程不能保持,所以cgi在每次调用时,数据库连接资源必须重建。而isapi通过扩展与过滤器的结合,可以实现数据库资源的驻留,所以isapi 的速度要比cgi快许多。idc、asp均是线程级的开销,其速度都比cgi快,但idc、asp无法实现数据库资源的驻留,所以速度不如isapi。java-applet的速度是最快的(这里java-applet 的速度是指java-applet下载到客户端后,与数据库连接的速度),这是因为它不用在服务器端运行程序,只需数据库系统提供查询结果即可。以上评价是针对多用户,且数据库是精确查询的情况,对于用户较少和模糊查询的情况,经测试,各接口方式的接口速度差别不大。

系统开销

是在50个并发访问、数据库精确查询13条记录,各接口的系统资源开销测试。cpu执行任务期间的平均负荷、内存的最高额外开销及cpu工作量分别如表1、表2和表3所示。其中,cpu执行任务期间的平均负荷的单位为cpu满负荷的百分比,内存的最高额外开销是系统处理50个并发访问期间内存使用量的增长额,单位为m(兆),cpu的总工作量是cpu平均负荷乘以完成任务的时间所得,它反映了为完成任务所消耗的cpu资源。

从内存负荷与cpu的工作量来看,开销由小到大依次为java-applet、isapi、idc、asp、cgi。对于每一个cgi请求,均会产生一个进程的内存与cpu开销,且无法驻留数据库资源,所以开销大。isapi只产生一个线程的开销,且驻留了数据库的资源,故开销小。而idc与asp虽是线程级开销,但无法驻留数据库资源,开销要比isapi大些,但远小于cgi。而java-applet 从根本上就把运行程序移到了客户端,服务器端只需处理与客户端的jdbc连接,所以服务器端开销最小。cgi、idc与asp方式内存开销较大,在所用内存有限的情况下,服务器在用户访问高峰期会出现死机现象,所以不适合用户并发访问数量较大的网站。

安全性

这五种接口在安全性方面由高到低依次为isapi、asp、cgi、idc、java-applet。cgi、idc、asp均依赖于 microsoft在iis中实现的验证机制。而isapi则可以通过编程,加强与完善web server的安全性能,它能通过过滤器取代或增加标准验证方案,这一接口可以在每次服务器需要验证用户身份和访问权限时被调用,而且可以通过过滤器来记载比iis日志更为详细的日志记录,以供网络安全分析之用。java-applet的安全性讨论是另一层次上的讨论,因为它需考虑的并不是对web server的安全威胁,而是对客户端的威胁。java的可移植性非常好,但可移植性与安全性本身就是一对矛盾。如果用户能够从网上透明且自由地下载 java程序,这会不可避免地带来许多安全性问题。如果java-applet受沙盒模型的限制,java-applet的功能发挥可能会受到限制;如果 java-applet不受沙盒模型的限制,那么恶意删改客户端用户文件的

java-applet无异于恶性病毒。

灵活性

这五种接口在灵活性上由高到低依次为java-applet、isapi、asp、cgi、idc。idc的所有功能都依赖于sql语句,众所周知,sql语句的功能是极为有限的。cgi的灵活性较idc好,因为它可以用服务器所支持的编程语言来扩展功能。asp的灵活性又比cgi强,它不仅可以使用vb、vj之类的语言,而且asp本身也提供了功能丰富的控件,如在asa文件中,可以对session 及application对象进行处理,这是 cgi编程难以实现的。isapi不仅能够实现asp实现的所有功能,而且还能用过滤器实现许多idc、cgi和asp所无法实现的功能。java- applet的灵活性

相关文档
最新文档