PHP、Java,C應(yīng)用于Web服務(wù)引擎的性能比較_第1頁(yè)
PHP、Java,C應(yīng)用于Web服務(wù)引擎的性能比較_第2頁(yè)
PHP、Java,C應(yīng)用于Web服務(wù)引擎的性能比較_第3頁(yè)
PHP、Java,C應(yīng)用于Web服務(wù)引擎的性能比較_第4頁(yè)
PHP、Java,C應(yīng)用于Web服務(wù)引擎的性能比較_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、PHP、 Java,C應(yīng)用于 Web 服務(wù)引擎的性能比較Toyotaro Suzumura, Scott Trent, Michiaki Tatsubori, Akihiko Tozawa 和Tamiya Onodera于IBM東京實(shí)驗(yàn)室。 摘要PHP作為Web 2.0時(shí)代一個(gè)著名的編程語(yǔ)言,支持靈活的服務(wù)器端軟件開發(fā)。自第5版置入一個(gè)基于C的內(nèi)置函數(shù)庫(kù)后,它正式支持SOAP消息通信。在這篇 文章中,我們將定性定量地深入研究PHP作為web服務(wù)引擎與其他用Java 和C實(shí)現(xiàn)的服務(wù)引擎的性能對(duì)比。為達(dá)到實(shí)驗(yàn)?zāi)康?,我們使用Axis2,因?yàn)樗且粋€(gè)開源的web服務(wù)引擎,并且可以得到Java和C實(shí)現(xiàn)的

2、不同版本。我們報(bào)告過(guò)php作為web服務(wù)引擎與Axis2 Java相比,在涉及小的有效荷載方面極具競(jìng)爭(zhēng)力,在更大的荷載方面,PHP web引擎甚至超過(guò)Axis2 Java的5-17倍。正如作者預(yù)期的,Axis2 C性能最佳,但實(shí)驗(yàn)表明,在大荷載情況下,PHP的性能接近于Axis2 C。這種性能差異來(lái)自一個(gè)事實(shí),即PHP的SOAP引擎在運(yùn)行時(shí)用C實(shí)現(xiàn)了單片 架構(gòu),而Axis2給靈活的insertation處理程序使用了一個(gè)更加模塊化的,遵循配套設(shè)置WS - *標(biāo)準(zhǔn)的處理架構(gòu)。此外Axis2還使用一種不同的數(shù)據(jù)綁定機(jī)制ADB(Axis2的數(shù)據(jù)綁定)。這篇文章是首次嘗試比較用PHP、 Java 和

3、C實(shí)現(xiàn)的web 服務(wù)引擎,作者相信,通過(guò)讓人們了解PHP優(yōu)秀的性能評(píng)分和高的執(zhí)行效率,將會(huì)促進(jìn)基于SOAP的web服務(wù)。1. 引言Web服務(wù)技術(shù),尤其是基于WS-*的web技術(shù),在實(shí)現(xiàn)面向服務(wù)的體系結(jié)構(gòu)中,起著關(guān)鍵作用。然而,很難說(shuō)web服務(wù)的廣泛性就和當(dāng)它第一次出現(xiàn)時(shí)被預(yù)言的一樣??赡艿脑虬ǎ篨ML處理的性能問(wèn)題,太多復(fù)雜的 WS-* 標(biāo)準(zhǔn),等等。最近,在Web 2.0時(shí)代出現(xiàn)的技術(shù)已經(jīng)出現(xiàn)通過(guò)人們的廣泛接受,其中程序員因使用這些技術(shù)而扮演關(guān)鍵角色。從這個(gè)觀點(diǎn)看,上述不受歡迎的一個(gè)最大原因之一是軟件本身的生產(chǎn)力和性能的劣勢(shì)。PHP被廣泛用作服務(wù)器端語(yǔ)言。由于PHP可以提高軟件生產(chǎn)力,許多

4、開源軟件和公司網(wǎng)站使用它。更重要的是,PHP在版本5中正式提供對(duì)SOAP支持,這樣,有助于促進(jìn)基于SOAP/WS-*.的web服務(wù)的廣泛應(yīng)用。在本文中,我們從定性和定量?jī)蓚€(gè)方面對(duì)主要的開源引擎PHP SOAP和Axis2作了徹底的比較研究。請(qǐng)注意,我們不認(rèn)為PHP在提供網(wǎng)絡(luò)支持方面優(yōu)于其他編程語(yǔ)言,只是集中于做一個(gè)中立的比較。這篇文章的結(jié)構(gòu)如下。第二部分描述了Axis2的概況和SOAP在PHP中的擴(kuò)展,第三部分定性地比較了編程模型,部署模型,WS-*標(biāo)準(zhǔn)支持以及其他功能。接下來(lái),第四部分對(duì)使用稱為StockQuote web 服務(wù)和WSTest的基準(zhǔn)作了定量比較,在第五部分,我們對(duì)PHP, J

5、ava, 和C在網(wǎng)絡(luò)服務(wù)運(yùn)行時(shí)的比較作了總結(jié)。通過(guò)在第六部分引進(jìn)相關(guān)工程,和在第七部分作出結(jié)論且提出未來(lái)的問(wèn)題,我們結(jié)束這篇文章。2. Web服務(wù)運(yùn)行概述這篇文章的主要目的是說(shuō)明PHP SOAP引擎是如何不同于用其他編程語(yǔ)言實(shí)現(xiàn)的web服務(wù)器。當(dāng)今有許多提供web服務(wù)引擎的商用軟件和開源軟件,在這篇文章中,我們使用Axis2的兩個(gè)引擎,一個(gè)是基于Java的實(shí)現(xiàn),一個(gè)是基于C的實(shí)現(xiàn)。正如本文后續(xù)部分詳細(xì)描述的一樣,考慮到軟件的生產(chǎn)力和易于部署,基于C的實(shí)現(xiàn)在運(yùn)行時(shí)并不比基于PHP和Java的實(shí)現(xiàn)更直接。但是,我們使用它主要是為了性能比較,從而理解可能的最好的性能。接下來(lái),我們將整體上來(lái)看一下PH

6、P和它的web服務(wù)運(yùn)行,還有Axis2。2.1 PHP web服務(wù)運(yùn)行Axis2作為Axis1的升級(jí)版本,是一個(gè)開源的web服務(wù)引擎。Axis2的體系結(jié)構(gòu)是從頭開始重建,以提供更多性能意識(shí)和靈活性來(lái)支持各種各樣的WS - *標(biāo)準(zhǔn)。有兩種實(shí)現(xiàn)方法,分別是用Java寫的Apache Axis2和用C寫的Apache Axis2。許多特征可以用來(lái)區(qū)別Axis2和 Axis1,比如對(duì)各種WS-*標(biāo)準(zhǔn)的支持和web服務(wù)同步。Axis2的另一顯著特點(diǎn)是它的REST支持。當(dāng)REST選項(xiàng)被啟用時(shí),一個(gè)單獨(dú)的操作返回一個(gè)XML消息或一個(gè)SOAP信封。這項(xiàng)功能很重要,因?yàn)樗鼫p輕了想以SOAP 和REST 兩種方式

7、發(fā)布web服務(wù)的程序員的負(fù)擔(dān)。3. 定性比較本節(jié)從包括軟件架構(gòu)、xml處理模型、WS - *標(biāo)準(zhǔn)支持、對(duì)服務(wù)供應(yīng)商的編程模型和部署模型、對(duì)RESTful服務(wù)的支持和其他支持功能在內(nèi)的各個(gè)角度,對(duì)PHP和Axis2所支持的網(wǎng)絡(luò)服務(wù)作了比較研究。3.1 軟件架構(gòu)與Axis1相比,Axis2的體系結(jié)構(gòu)應(yīng)該更加靈活和可配置。Axis2有一個(gè)可以用來(lái)安裝附加功能的模塊,以支持各種各樣的WS-*標(biāo)準(zhǔn)。這種結(jié)構(gòu)有兩種實(shí)現(xiàn),Axis2 Java,正如它的名字,是用Java語(yǔ)言編寫的。類似的,Axis2 C是用C語(yǔ)言編寫的。Axis2 Java通常作為一個(gè)部署在servlet引擎的servlet,比如Apach

8、e Tomcat。另一方面Axis2 C可作為mod_axis2共享庫(kù),部署在Apache HTTP服務(wù)器上。與Axis2相比,PHP中的SOAP提供支持單片架構(gòu),作為用C語(yǔ)言編寫的擴(kuò)展實(shí)現(xiàn),該擴(kuò)展被一個(gè)PHP過(guò)程的核心運(yùn)行通過(guò)C接口直接調(diào)用。PHP是一個(gè)緩存中介碼,而Java有一個(gè)實(shí)時(shí)編譯器。聯(lián)系PHP運(yùn)行和HTTP服務(wù)器的兩個(gè)主要方法是在mod_php中共享庫(kù)和FastCGI服務(wù)通道。在mod_php模式下,PHP實(shí)時(shí)運(yùn)行在HTTP服務(wù)器的進(jìn)程中;在FastCGI模式下,多個(gè)PHP進(jìn)程可以被作為單獨(dú)的外部進(jìn)程,通過(guò)定義好的FastCGI協(xié)議與HTTP服務(wù)器通信??紤]到自動(dòng)內(nèi)存管理,PHP使

9、用查詢計(jì)數(shù)而Java使用垃圾回收,所以PHP的運(yùn)行性能已經(jīng)考慮到內(nèi)存管理,但是Java中垃圾回收的可悲后果是,你不能預(yù)測(cè)它什么時(shí)候進(jìn)行。3.2 XML 語(yǔ)法分析和運(yùn)行模式眾所周知,XML的運(yùn)行,尤其是它的連續(xù)性和不連續(xù)性,是影響web服務(wù)引擎整體性能的關(guān)鍵因素。Axis2的XML運(yùn)行模式基于AXIOM,它對(duì)SOAP提供一個(gè)簡(jiǎn)單的API。AXIOM基于StAX API,Axis2 Java使用的Woodstox是一個(gè)遵守StAX語(yǔ)法實(shí)現(xiàn)的JSR 173。Axis2的C實(shí)現(xiàn),Axis2 C,使用libxml2處理SOAP消息。這里XML的語(yǔ)法和PHP中的SOAP引擎是相同的。PHP中的SOAP引擎

10、,是使用libxml2的基于C的擴(kuò)展實(shí)現(xiàn)。libxml2是一個(gè)C庫(kù),提供流和類似于SAX的接口和類似于DOM的方法,但是PHP中的SOAP擴(kuò)展只使用SAX接口而不是API流。8中的文章描述了用C語(yǔ)言實(shí)現(xiàn)的Libxml2 XML解析器和包括Woodstox10在內(nèi)的其他XML解析器的性能比較。這篇文章的結(jié)果表明,LIBXML2的類似SAX 的C語(yǔ)言實(shí)現(xiàn)在所有擁有多種文件大小的基準(zhǔn)中性能最好,對(duì)于普遍大小的文件,它提供相當(dāng)于其他XML解析器1/3到兩倍的吞吐量。創(chuàng)建對(duì)象模型處理速度,如AXIOM和 DOM,也在10中有報(bào)告。報(bào)告表明,LIBXML2比所有其他所有的實(shí)現(xiàn)快很多。3.3 編程模型和部署

11、模型在這部分我們就軟件可編程性和易于部署方面對(duì)這些發(fā)布的網(wǎng)絡(luò)引擎進(jìn)行比較。首先,Axis2有多種特點(diǎn),例如將對(duì)象作為傳統(tǒng)Java對(duì)象,這樣可以使程序員容易開發(fā)和發(fā)布他們的網(wǎng)絡(luò)引擎。與Axis1相比,Axis2實(shí)現(xiàn)web服務(wù)更直接。如果一個(gè)開發(fā)商擁有一個(gè)POJO,那么所有需要的文件包括WSDL、服務(wù)骨架文件、客戶端存根文件和AAR歸檔文件會(huì)用一個(gè)提供的小腳本自動(dòng)生成。但是在測(cè)試階段,這個(gè)工具將被定期用于反復(fù)修改、發(fā)布和調(diào)試編碼。Axis2 C擁有大多數(shù)Axis2 Java提供的特征。但是對(duì)于非程序員,尤其是那些沒有使用C調(diào)試器處理分割故障經(jīng)驗(yàn)的人來(lái)說(shuō),很難調(diào)試web服務(wù)實(shí)現(xiàn)和從WSDL產(chǎn)生代碼。

12、最后,表2展示了一個(gè)PHP支持的SOAP股票報(bào)價(jià)服務(wù)器的一個(gè)代碼片段。WSDL文件的位置被指定在SOAP服務(wù)器結(jié)構(gòu)的參數(shù)中,在發(fā)布的時(shí)候,可以簡(jiǎn)單地將PHP腳本放在適當(dāng)?shù)腤EB目錄下。不像Java中,沒有服務(wù)描述文件和編譯是必須的,生成存根代碼也不是必須的。開發(fā)人員只需為SOAP服務(wù)器注冊(cè)一個(gè)處理函數(shù),同時(shí)直接寫客戶端代碼即可。你可以通過(guò)下面的PHP代碼片段簡(jiǎn)單地獲得所描述的結(jié)果。$client = new SoapClient(StockQuoteService.wsdl);$quote = $client->getStockQuote ($symbol);雖然PHP在運(yùn)行時(shí)可能出錯(cuò),

13、因?yàn)閿?shù)據(jù)是動(dòng)態(tài)類型而不是在編譯時(shí)檢查。程序員可以通過(guò)一個(gè)無(wú)需編譯的靈活方法直接編輯和調(diào)試文件。3.4 WS-*標(biāo)準(zhǔn)功能支持正如前文所述,Axis2 的設(shè)計(jì)有靈活的體系結(jié)構(gòu),以支持分類WS-* 標(biāo)準(zhǔn)。相比而言,當(dāng)前PHP發(fā)布所支持的SOAP 1.1, SOAP 1.2, 和WSDL 1.1規(guī)則的子集,提供了標(biāo)準(zhǔn) SOAP擴(kuò)展。但是,面向PHP 16的web服務(wù)框架已開始支持全套WS-*標(biāo)準(zhǔn)。REST支持和REST類型的服務(wù)器一樣,Axis2支持SOAP 1.1 和 SOAP 1.2。一個(gè)服務(wù)可能是公開作為 SOAP樣式以及REST類型同時(shí)服務(wù)。PHP 被認(rèn)為是實(shí)現(xiàn) REST 類型服務(wù)時(shí)要使用的語(yǔ)

14、言,通過(guò)使用小的附加代碼與PHP直接實(shí)現(xiàn)這些服務(wù)。異步支持JAX-WS 2.0的主要貢獻(xiàn)是支持異步web服務(wù)。注釋11中提供的PHP實(shí)現(xiàn)SOAP擴(kuò)展當(dāng)前并不支持這一功能,因?yàn)镻HP語(yǔ)言本身不支持線程。可能的替代實(shí)現(xiàn)類似于在Java 1.4中引進(jìn)的新I/O (NIO),或擴(kuò)展PHP使其支持線程。4. 定量比較本節(jié)描述了三種SOAP引擎的定量比較:PHP5中的SOAP引擎、Axis2 Java和Axis2 C。特別針對(duì)PHP,我們也比較了Lighttpd 9 和 Apache 2兩個(gè)引擎。4.1 測(cè)試方法服務(wù)器端的整體架構(gòu)遵循三層結(jié)構(gòu):一個(gè)web服務(wù)器、一個(gè)SOAP引擎(web服務(wù)引擎)和Web服

15、務(wù)實(shí)現(xiàn)本身。我們?cè)诒硪恢姓故玖怂姆N變化的測(cè)試。我們檢查了當(dāng)今的許多web服務(wù)器和連接器,但是我們盡可能多的關(guān)注主流配置。對(duì)于PHP,我們選擇兩個(gè)具有代表性的HTTP服務(wù)器:使用最廣泛的Apache HTTP服務(wù)器(2.0.63),和由于其高性能,得到社會(huì)各界(包括商業(yè)網(wǎng)站)廣泛接受的Lighttpd (1.4.19) 10。表一中的連接器(SAPI)說(shuō)明了連接PHP和HTTP服務(wù)器的一種方法。在Apache下,我們選擇了mod_php方法,PHP運(yùn)行庫(kù)和它的SOAP引擎作為Apache服務(wù)器運(yùn)行在同一進(jìn)程。對(duì)于Lighttpd,我們選擇FastCGI作為連接器。在FastCGI的作用下,作為外

16、部進(jìn)程的多個(gè)PHP進(jìn)程通過(guò)明確定義的FastCGI協(xié)議與Apache HTTP服務(wù)器通信。我們配置FastCGI的進(jìn)程數(shù)為16。接下來(lái),對(duì)于Axis2 Java,我們使用Apache Tomcat (5.5.26)作為Servlet引擎,Axis2 Java作為Java Servlet在其中運(yùn)行。對(duì)于Axis2 C,我們使用Apache 2.2.26作為HTTP服務(wù),Axis2 C引擎作為mod_axis2,和Apache HTTP服務(wù)運(yùn)行在同一個(gè)進(jìn)程。4.2 實(shí)驗(yàn)環(huán)境我們用一個(gè)配置 3.4 GHz 至強(qiáng)單處理器和 3 GB RAM、運(yùn)行 Fedora 核心 7(Linux 內(nèi)核 2.6.21

17、)的IBM IntelliStation M Pro作為服務(wù)器。Tomcat配置為使用IBM Java虛擬機(jī):J9 VM 1.5.0 Build 2.3。我們用一個(gè)使用 2.4 GHz 至強(qiáng)雙核處理器、 1GB內(nèi)存、運(yùn)行 Fedora 核心 7的 IBM IntelliStation M Pro 作為客戶端。服務(wù)器和客戶端通過(guò)0.14毫秒延遲的千兆以太網(wǎng)連接。Apache Bench 2.0.40用來(lái)測(cè)試吞吐量。Apache平臺(tái)被配置為使用100個(gè)并發(fā)連接,且HTTP keep-alive選項(xiàng)被置上。4.3 未使用SOAP引擎的web服務(wù)器比較在這個(gè)實(shí)驗(yàn)中,考慮到未使用SOAP引擎的web服務(wù)

18、器性能特征,我們做了兩個(gè)實(shí)驗(yàn)。我們比較了服務(wù)包含相同SOAP消息的靜態(tài)HTML文件時(shí)的服務(wù)器性能,該消息用于在下一節(jié)描述的股票報(bào)價(jià)。結(jié)果如圖一所示。由于Lighttpd 旨在為服務(wù)靜態(tài)文件提高最佳性能,所以性能最好。例如,使用sendfile系統(tǒng)調(diào)用避免用戶和核心空間的冗余拷貝。Apache 2.2的表現(xiàn)比Apache好百分之七,比Tomcat 5.5優(yōu)70%。圖二描述了在每個(gè)沒有SOAP的配置中運(yùn)行動(dòng)態(tài)web程序的性能比較。這項(xiàng)實(shí)驗(yàn)的目的在于顯示每個(gè)沒有SOAP引擎的配置的初始開銷。這個(gè)實(shí)驗(yàn)使用的web程序和在下一節(jié)中的股票報(bào)價(jià)服務(wù)一樣,通過(guò)HTTP POST方法從Apache 平臺(tái)客戶端消

19、耗相同的請(qǐng)求消息,然后返回相同的應(yīng)答消息。每個(gè)運(yùn)行庫(kù)的動(dòng)態(tài)web應(yīng)用程序被寫入,所以它可以被送達(dá)一個(gè)web容器,如Tomcat JSP腳本、Lighttpd和Apache PHP腳本。4.4 股票報(bào)價(jià)案例比較通過(guò)一個(gè)簡(jiǎn)單的web服務(wù),我們對(duì)表一中SOAP引擎的性能進(jìn)行了比較,包括Axis2 Java,Axis2 C, PHP+Lighttpd和 PHP+Apache。我們實(shí)驗(yàn)所用的web服務(wù)是一個(gè)股票報(bào)價(jià)服務(wù),返回SOAP請(qǐng)求消息指定的最新股票報(bào)價(jià),請(qǐng)求消息是277字節(jié)長(zhǎng),并有一個(gè)表示查詢符號(hào)名稱的單獨(dú)元素。響應(yīng)為649字節(jié)長(zhǎng),不僅包含最新的股票價(jià)格,而且包含其他信息如最新交易情況。鑒于對(duì)股票

20、報(bào)價(jià)服務(wù)的WSDL文件,每個(gè)SOAP引擎的服務(wù)骨架為Axis2而產(chǎn)生。由于PHP當(dāng)前并不包括WSDL生成機(jī)制,我們需從零開始實(shí)現(xiàn)它。表2顯示了所有基于PHP的web服務(wù)編碼,表3 顯示了基于 Java 的 web 服務(wù)代碼段和從已存在的 WSDL生成的許多其他代碼。結(jié)果如圖三所示。左邊的Y軸表示吞吐量,對(duì)應(yīng)Apache Bench計(jì)算出的在一秒中處理的請(qǐng)求數(shù)量。右邊的Y軸表示了相對(duì)于Axis2 Java,每個(gè)SOAP引擎性能的提高率。正如圖中所描述的,PHP+Lighttpd是Axis2 Java性能的86%,PHP+Apache性能是Axis2 Java的97%,Axis2 C超過(guò)Axis2

21、 Java性能的25%。由于SOAP引擎的性能主要取決于序列化和反序列化的花費(fèi),還因?yàn)檫@種web服務(wù)不花費(fèi)過(guò)多時(shí)間在這些操作上,所以此結(jié)果清楚顯示性能差異來(lái)自其他處理過(guò)程。第一個(gè)和第二個(gè)PHP實(shí)驗(yàn)的關(guān)鍵區(qū)別在于PHP運(yùn)行庫(kù)是否包含用C寫的SOAP引擎擴(kuò)展。這一結(jié)果說(shuō)明 Apache 2.0 和 PHP5 的組合沒有Lighttpd 和PHP5組合高效。在 Lighttpd 配置中, 16個(gè) PHP 進(jìn)程獨(dú)立運(yùn)行,而在 Apache 的配置中,PHP引擎被嵌入數(shù)以百計(jì)的 HTTP 進(jìn)程。4.5 與WSTest的比較在下一個(gè)實(shí)驗(yàn)中,我們使用WSTest 13,一個(gè)SOAP處理基準(zhǔn)。我們使用WSTe

22、st中的echoStruct場(chǎng)景應(yīng)答載有結(jié)構(gòu)元素?cái)?shù)組的SOAP消息。1. 整體結(jié)果圖4展示了結(jié)構(gòu)數(shù)從一到十的性能實(shí)驗(yàn)結(jié)果。左邊的Y軸表示用和股票報(bào)價(jià)例子相同的邏輯計(jì)算出來(lái)的吞吐量,右邊的Y軸表示與Axis2 Java相比的性能加速率。正如圖中所表現(xiàn)的,Apache+PHP超過(guò)Axis2 Java性能的1.87到5.97倍,PHP+Lighttpd超過(guò)1.65到5.23倍,Axis2 C也有一個(gè)大的性能提升,為2.29 到6.99倍。這表明PHP SOAP引擎相對(duì)于Axis2 C也有競(jìng)爭(zhēng)力。圖5顯示了兩個(gè)用Axis2 Java 和 PHP處理較長(zhǎng)的消息的結(jié)果,使用兩個(gè)不同的服務(wù)器:Lighttp

23、d 和 Apache。正如較短的消息例子一樣,PHP+Apache比PHP+lighttpd稍微優(yōu)一點(diǎn),但是兩者均超過(guò)Axis2 Java性能的5.8到17倍。圖6用相同的圖展示了Axis2 C。Axis2 C得到了期望的高分,但是對(duì)于80到100結(jié)構(gòu)的大消息,PHP+Apache在有些時(shí)候會(huì)優(yōu)于Axis2 C。2. 統(tǒng)計(jì)圖為了更好理解性能特性,我們使用十結(jié)構(gòu)消息echoStruct方案對(duì)每個(gè)SOAP 引擎構(gòu)建了統(tǒng)計(jì)圖。圖9中的CPU分項(xiàng)顯示表明,在PHP+Lighttpd下,PHP引擎使用了CPU的84%,而HTTP服務(wù)器只使用了13%。為了進(jìn)一步研究PHP進(jìn)程中的CPU使用率,圖10顯示了

24、XML處理占用了CPU處理時(shí)間的12%,C庫(kù)占用了21%。c 庫(kù)中的函數(shù)的進(jìn)一步分項(xiàng)數(shù)字顯示許多功能都與內(nèi)存管理相關(guān)。圖11展示了PHP+Apache的分項(xiàng)。由于mod_php PHP運(yùn)行在Apache HTTP服務(wù)器進(jìn)程中,這幅圖包含這兩部分。圖12為Axis2C的CPU分項(xiàng)顯示,圖13是Axis2 Java的CPU分項(xiàng)顯示。如圖13所表述的,垃圾回收占了CPU開銷的22%。由于PHP內(nèi)存管理涉及到計(jì)數(shù),此內(nèi)存管理開銷包含在CPU運(yùn)行引擎中。3. 內(nèi)存使用除了總吞吐量外,我們也需要考慮內(nèi)存開銷。PHP+Lighttpd下PHP對(duì)內(nèi)存的使用與產(chǎn)生的PHP進(jìn)程成正比。一個(gè)PHP進(jìn)程占用約5.5M

25、B,16個(gè)大約占用90.4MB。另一方面,在Axis2 Java下,包括web服務(wù)器、SOAP引擎和其他web實(shí)現(xiàn)在內(nèi)的所有部分運(yùn)行在擁有多個(gè)線程的一個(gè)進(jìn)程中,消耗62.1MB內(nèi)存。FastCGI的優(yōu)點(diǎn)是可以通過(guò)用FastCGI協(xié)議與HTTP服務(wù)器通信,允許不同的結(jié)點(diǎn)產(chǎn)生PHP進(jìn)程,但是如果我們只用一個(gè)結(jié)點(diǎn),Axis2 Java可以更省內(nèi)存。5. 討論在這一部分,我們將基于在前面幾部分定性定測(cè)試結(jié)果的描述,和做這些實(shí)驗(yàn)時(shí)的經(jīng)驗(yàn),對(duì)整個(gè)比較進(jìn)行總結(jié)。PHP 和 JavaPHP WEB 服務(wù)的良好性能的原因之一是它使用用C寫的最快的XML解析器libxml2。對(duì)于與C模塊的接口,PHP的擴(kuò)展API

26、設(shè)計(jì)為高效率(但無(wú)健壯性和可移植性),但是Java的本地接口(JNI)設(shè)計(jì)偏向可移植性和健壯性而不是效率。如果我們?cè)贘ava WS中使用堆棧,由于頻繁的高花費(fèi)的C到Java的調(diào)用,將會(huì)產(chǎn)生很大的開銷。請(qǐng)注意用Java寫的XML解析器比用C寫的慢,因?yàn)镴ava處理字符串的低效和不允許(潛在的不安全類型)指針運(yùn)算。但是,在更多考慮系統(tǒng)穩(wěn)定性和生產(chǎn)率的專業(yè)程序員來(lái)看,Java肯定是一個(gè)好的選擇。PHP 和C股票報(bào)價(jià)web服務(wù)性能實(shí)驗(yàn)演示說(shuō)明Axis2 C比其他SOAP引擎表現(xiàn)更好。Axis2 C用C實(shí)現(xiàn),這個(gè)性能評(píng)分可能是預(yù)期的,因?yàn)锳xis2 被設(shè)計(jì)為高度模塊化?,F(xiàn)在并不十分清楚Axis2 C是否

27、仍勝過(guò)用整體方法設(shè)計(jì)并用C編寫的PHP SOAP引擎,但是從生產(chǎn)效率、可編程角度、易于部署和調(diào)試角度來(lái)看,它遠(yuǎn)不如其他引擎。尤其是考慮到調(diào)試,不是簡(jiǎn)單的調(diào)試為Axis2 C編寫的web服務(wù),因?yàn)榉侄五e(cuò)誤的內(nèi)核轉(zhuǎn)儲(chǔ)和原始web服務(wù)定義之間的關(guān)系并不明顯。PHP作為SOAP引擎考慮最近的編程語(yǔ)言流行趨勢(shì),PHP達(dá)到了效率和性能這一語(yǔ)言的基本要求。即使Java也可以達(dá)到這一要求,由于PHP被用到各種web程序和SOAP,WS-*還沒有被成功用在公共領(lǐng)域(某些健壯的企業(yè)應(yīng)用程序除外),我們認(rèn)為PHP處于一個(gè)好的位置。6. 相關(guān)工作Ceccet, et al比較了EJB, Java Servlet, 和

28、 PHP215。他們也報(bào)告PHP表現(xiàn)最為優(yōu)秀。但是報(bào)告中進(jìn)行的實(shí)驗(yàn)為基準(zhǔn)測(cè)試電子商務(wù)應(yīng)用程序,使用傳統(tǒng)的 web 應(yīng)用程序負(fù)載如 TPC W,因此這個(gè)檢測(cè)結(jié)果不適用于需要大量XML處理的web服務(wù)引擎的性能比較。正如3.2節(jié)所描述的,8中的文章報(bào)告了各種XML解析器的性能比較,但是他們主要集中于XML處理,所以不包括終端到終端情況的性能比較。許多IT供應(yīng)商提供高性能的web服務(wù)和性能基準(zhǔn)測(cè)試報(bào)告,如 IBM WebSphere 應(yīng)用程序服務(wù)器。我們的研究報(bào)告集中于不同的編程語(yǔ)言對(duì)性能的影響。對(duì)優(yōu)化XML處理性能做了一些努力417,尤其是對(duì)于基于Java的web服務(wù)引擎。7. 結(jié)論及未來(lái)工作本文

29、描述了用PHP、Java、C實(shí)現(xiàn)的web服務(wù)引擎的比較。由于不同的架構(gòu)和不同的編程語(yǔ)言,實(shí)驗(yàn)結(jié)果表明,PHP相對(duì)于基于Java和C的實(shí)現(xiàn)是高效的,且提供用戶高的軟件生產(chǎn)力。我們的貢獻(xiàn)將為廣大程序員提供更多的認(rèn)識(shí)-除了當(dāng)前流行的REST型web服務(wù)器外,PHP是一個(gè)發(fā)布基于SOAP/WS-* web服務(wù)的可行選擇。幾個(gè)話題可以進(jìn)行進(jìn)一步討論。第一,我們可以擴(kuò)展 web 服務(wù),如在其他情況下的各種WSTest 或更多的現(xiàn)實(shí)世界情景,也包括業(yè)務(wù)邏輯和數(shù)據(jù)庫(kù)訪問(wèn)。此外,我們還可以探索更多的服務(wù)器配置。在本文中我們只使用 Axis2 Java 和它的默認(rèn)數(shù)據(jù)綁定,ADB,但在 Java 中的其他 web

30、 服務(wù)實(shí)現(xiàn)可以與本文中報(bào)告的結(jié)果不同。我們也可以比較不同的動(dòng)態(tài)腳本語(yǔ)言,如Ruby 和 Python。此外,在將來(lái),我們可以探索REST型服務(wù)的性能,而不是側(cè)重于基于 SOAP 的 web 服務(wù)的服務(wù)。通過(guò)HTTP Get操作進(jìn)入web服務(wù)后,XML和 JSON被用作一個(gè)數(shù)據(jù)格式。我們可以比較PHP和Axis2,因?yàn)楫?dāng)前PHP對(duì)于REST web服務(wù)很流行。而Axis2不真正用在REST web服務(wù),即使它不用額外的編程,就能為相同的web實(shí)現(xiàn)提供 REST 和 SOAP 功能。參考資料1 Alex Ng, Shiping Chen, and Paul Greenfield, “AnEvalu

31、ation of Contemporary Commercial SOAPImplementations”, AWSA (Australasian Workshop onSoftware and System Architecture) 20042 Emmanuel Cecchet, Anupam Chandra, et.al,“Performance Comparison of Middleware Architecturesfor Generating Dynamic Web Content”, Middleware 20033 Subramanyam S., et al., “Desig

32、ning a web servicesbenchmark”, In ICWS03. International Conference onWeb Services, Las Vegas, USA.4 Toyotaro Suzumura, Satoshi Makino and NaohikoUramoto, “Optimizing Differential XML Processing byLeveraging Schema and Statistics”, ICSOC 2006,Springer, Lecture Notes in Computer Science, pp. 264-p2765 Srinath Perasa, Chathura Herath, Jaliya Ekanayake, et.Al. “Axis2, Middleware for Next Generation

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論