PHP、Java和C语言中Web服务引擎的性能的比较外文翻译资料

 2022-08-06 09:08

英语原文共 15 页,剩余内容已隐藏,支付完成后下载完整资料


PHP、Java和C语言中Web服务引擎的性能的比较

Toyotaro Suzumura博士, Scott Trent博士, Michiaki Tatsubori博士, Akihiko Tozawa博士 和 Tamiya Onodera博士

东京研究实验室, IBM 研究所,

日本,神奈川县242-8502,大和市,1623-14 Shimotsurusma

{toyo, trent, mich, atozawa,tonodera}@jp.ibm.com

摘要

PHP在网页2.0时代作为一个程序语言而为人熟知,它实现了服务端软件的敏捷开发。自从第5版以后,它通过内置的C基础库,正式的开始支持SOAP消息传递。在这篇论文中,我们深入研究了同样作为web服务引擎,PHP相比较Java和web在各方面不同。为了这个目的,我们使用了Axis2,因为它是一个开源的web服务引擎,并且同时支持Java和C语言。根据报告得出,PHP作为一个Web服务引擎,在涉及小型有效载荷的Web服务方面,其性能与Axis2 Java不相上下,而在涉及大型有效载荷的Web服务方面,其性能大大超过Axis2 Java 5-17倍。这种性能上的差异是由于PHP运行时所依赖的内部的SOAP引擎是用C语言实现的,且采用的是单片架构,而Axis2采用的是更加模块化的架构,可以灵活地插入各种WS-*标准的处理程序,而且Axis2采用的是不同的数据绑定机制,称为ADB(Axis2数据绑定)。本文是首次尝试对PHP、Java和C语言实现的Web服务引擎进行比较,作者认为通过让人们知道其不错的性能分数和高生产率的特点,能够促进PHP中基于SOAP的Web服务的开发。

1 介绍

网络服务技术,尤其是基于WS-*的网络服务技术,在实现面向服务的架构中起到了关键作用。然而,没人一开始就能断言网络服务的应用会多么多么广泛。可能的原因包括XML处理的性能问题,太多复杂的WS-*标准等。最近在Web 2.0时代看到的技术都是通过社区驱动的方式产生的,普通程序员在使用的过程中扮演着关键的角色。从这个角度来看,上述不受欢迎的最大原因之一就是软件生产力和性能上的劣势。

PHP语言作为一种流行的服务器端语言被广泛使用[7]。由于它可以高效的开发软件,大量的开源软件和公司的网站都使用PHP。除此以外,PHP在第5版中正式提供了对SOAP的支持,这有助于促进基于SOAP/WS-*的Web服务的广泛使用。

在本文中,我们从定性和定量的角度对PHP和Axis2(主要是通过开源SOAP引擎实现)进行彻底的对比研究。请注意,我们并不倾向于PHP比其他支持Web服务的编程语言更好,而是专注于中立的比较。

本文的结构如下。第2节对Axis2和PHP中SOAP扩展进行概述。第3节对编程模式、部署模式、WS-*标准支持和其他功能方面进行定性比较。接下来的第4节中对使用名为StockQuote的网络服务和WSTest的基准进行定量比较,在第5节中,我们总结了PHP、Java和C语言在网络服务运行时的对比结果。在本文的最后两段,也就是第6节,将介绍相关的工作,同时在第7节介绍了结论和未来的工作。

2. Web服务运行时概述

本文的主要目的是展示PHP SOAP引擎与各种编程语言实现的Web服务引擎有何不同。如今,有很多商业产品和开源软件都提供了网络服务引擎,但在本文中,我们使用的是Axis2项目提供的两个引擎,一个是基于Java的实现,一个是基于C的实现。

正如本文后面所详细描述的那样,从软件生产效率和部署的便利性来看,基于C语言的实现并不比基于Java和PHP等语言的运行时更直接。但是,我们主要用它来进行性能比较以了解最佳的性能。接下来我们将对PHP和Asis2以及它们的Web服务运行时进行简单的概述。

2.1 PHP的Web服务运行时

PHP从第5版开始正式支持SOAP,并提供了基于C语言的扩展。之前版本的SOAP引擎可以从用PHP实现的PEAR(PHP Extension and Application Repository)或用C实现的PECL(The PHP Extension Community Library)中获得。然而,PHP可以在Alternative PHP Cache(APC)中缓存中间操作码,此外,标准的'扩展'库集大部分是用C语言实现的。这些特性使PHP不同于其他动态脚本语言,如Ruby和Python。

2.2. Apache Axis2

Axis2是一个开源项目,它提供了一个网络服务引擎。为了提供更强的性能和灵活性来支持各种WS-*标准,Axis2的架构从头到尾进行了重建。Axis2有两个应用:一个是用Java编写的Apache Axis2/Java,另一个是用C编写的Apache Axis2/C。Axis2的许多特性与Axis1不同,比如支持各种WS-*标准和异步Web服务。Axis2的另一个显著特点就是它支持REST。当启用REST选项时,单个操作返回的值都是XML消息或SOAP信封。这个功能很重要,因为它减轻了那些希望以SOAP和REST风格发布其Web服务的程序员的负担。

3. 性能的对比

本节从软件架构、XML处理模式、WS-*标准支持、服务器提供商的编程模式和部署模式、对RESTful服务的支持等多个角度对PHP和Axis2提供的Web服务支持进行比较。

3.1 软件架构

Axis2的架构基于这样一个理念,即与Axis版本1相比,Axis2的架构应该更加灵活和可配置。因此Axis2架构采用模块化架构,可以使用模块安装附加功能,以支持各种WS-*标准。这种架构有两种实现方式:一种是Axis2 Java,顾名思义,就是用Java编写,另一种是Axis2 C,则用C编写。Axis2 Java通常作为servlet引擎(如Apache Tomcat)中的servlet部署。而Axis2 C却可以作为一个共享库部署在Apache HTTP服务器中,称为mod_axis2.so。

与Axis2相比,PHP中的SOAP支持是通过单片架构为基础,以C语言编写的扩展(PHP运行环境中的内置库)的方式实现。该扩展通过已定义的C接口直接被PHP进程中的核心运行环境中的引擎调用。PHP语言从一个能够缓存中间代码的解释器(APC缓存)中编译得到。而JAVA语言有一个即时编译器。两种主要连接PHP运行环境和HTTP服务器的方法是mod_php中的共享库方法和FastCGI服务器方法。当使用mod_php,PHP会运行在一个HTTP服务器进程中。有了FastCGI,多个PHP进程就可以作为独立的外部进程被生成,并通过FastCGI协议与HTTP服务器通信。

在自动内存管理方面,PHP使用的是引用计数,而Java使用的是垃圾收集。所以PHP的运行时性能中已经包含了内存管理的成本,但Java中的垃圾收集有一个问题,就是你无法预测它何时发生,这有时会带来糟糕的后果。

3.2. XML解析器和处理模型

众所周知,XML处理(尤其式序列化和去序列化的)是影响Web服务引擎整体性能的一个关键因素。Axis2的XML处理模型是基于AXIOM(Axis Object Model),它为SOAP提供了一个简单的API。AXIOM基于StAX API(Streaming API for XML),而Axis2 Java使用Woodstox,用C语言实现的Axis2和Axis2 C都使用libxml2来处理SOAP消息。这个XML解析器和PHP中的SOAP引擎是一样的。

PHP中的SOAP引擎是通过一个基于C的扩展来实现的,它使用了libxml2(PHP 5.2.5中的libxml-2.5.4)[11]。LibXML2是一个C库,它提供了一个流式的pull-parser和一个类似SAX的接口以及一个类似DOM的方法,但是PHP中的SOAP扩展只使用了SAX接口而不是流式API。[8]中的文章介绍了用C语言编写的Libxml2 XML解析器和其他XML解析器包括Woodstox[10](用Java编写的StAX Pull Parser)之间的性能比较。本文的结果表明,用C语言实现的类似SAX的LIBXML2在所有基准测试中表现最好,其文档大小从小尺寸文档(4.5KB、13.5KB、50KB、95KB)到大尺寸文档(455KB、905KB、4000KB)不等。对于其它大多数文档大小,它提供的吞吐量是其他XML解析器的三分之一到两倍。在[10]中也报道了创建AXIOM或DOM等对象模型的处理速度,这表明LIBXML2比其他所有实现都要快得多。

3.3 编程模式和部署模型

在本节中,我们将从软件生产力方面对Web服务引擎进行比较,如可编程性和部署的方便性,为了帮助那些实现和发布他们的Web服务。

首先Axis2 Java具有各种特性,例如能够将对象处理为Plain Old Java Objects(POJO),这使得程序员能够轻松开发和发布他们的Web服务。与Axis1相比,用Axis2 Java实现Web服务是相当直接了当的。如果开发者有一个POJO,那么所有需要的文件,包括WSDL、服务骨架文件、客户端存根文件和AAR(Axis2 Archive)可部署的档案文件都会通过提供的ant脚本自动生成。测试阶段,这个工具还将会被反复使用,定期修改、发布和调试代码。

最后,表2显示了在PHP中通过SOAP支持发布报价股票网络服务的代码片段。WSDL文件的位置是在SoapServer构造的参数中指定的。在发布时,只需将PHP脚本定位在适当的Web目录下即可。与Java不同,不需要服务描述文件和编译,也不需要生成存根代码。开发者只需向SoapServer注册一个处理函数即可。同时,也可以直接编写客户端代码。你可以简单地获得如下PHP代码片段所演示的结果。

$client = new SoapClient(lsquo;StockQuoteService.wsdlrsquo;);

$quote = $client-gt;getStockQuote ($symbol);

虽然在PHP中可能会出现运行时错误,但由于数据是动态类型的,不在编译时检查,所以程序员可以直接以敏捷的方式编辑和调试文件,而不用编译。

3.4 功能

WS-*标准的支持

如前一节所述,为了支持各种WS-*标准,Axis2被设计成了一个十分灵活的架构。相比之下,当前PHP发行版提供的标准SOAP扩展支持SOAP 1.1、SOAP 1.2和WSDL 1.1规范的子集。然而,WSO2 trade;发布的支持PHP的Web服务框架 [16]已经开始支持全套的WS-*。

REST的支持

Axis2支持SOAP 1.1和SOAP 1.2,以及REST风格的Web服务。一个服务可以同时以SOAP风格和REST风格服务的形式出现。PHP被认为是最适合用来实现RESTful服务的语言,因为几乎不需要额外的编码就可以非常直接的在PHP中实现这样的服务。

异步支持

JAX-WS 2.0的主要贡献是支持异步Web服务。在[11]中的PHP的SOAP扩展目前不支持这个功能——因为PHP语言本身不支持线程。可以用在Java 1.4中被引入的Java New I/O(NIO)或拓展PHP以支持线程这两种方法来替代之。

4. 量化比较

本节介绍了3个SOAP引擎之间的定量比较:PHP5中的SOAP引擎、Axis2 Java和Axis2 C。特别是对于PHP,我们还比较了Lighttpd[9]和Apache 2这两个Web服务器。

4.1. 测试方法

服务器端整体架构遵循三层架构,由Web服务器、SOAP引擎(Web服务引擎)和Web服务实现本身组成。我们准备了表1中所示的4种变体进行测试。我们研究了许多当今可用的Web服务器和连接器,但我们尽可能地把注意力放在在当前最流行的配置上。

对于PHP,我们选择了两个有代表性的HTTP服务器:最广泛使用的Apache HTTP服务器(2.0.63版本)和Lighttpd(1.4.19版本)[10]。这两个版本的服务器所展现出的超高性能,已经得到了社区的广泛认可(也包括商业领域)。表1中所示的连接器(通常称为SAPI)表示连接PHP运行时和HTTP服务器的方法。在Apache中,我们选择了mod_php方法,其

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[260472],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。