PHP、Java,C應用于Web服務引擎的性能比較_第1頁
PHP、Java,C應用于Web服務引擎的性能比較_第2頁
PHP、Java,C應用于Web服務引擎的性能比較_第3頁
PHP、Java,C應用于Web服務引擎的性能比較_第4頁
PHP、Java,C應用于Web服務引擎的性能比較_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、PHP、 Java,C應用于 Web 服務引擎的性能比較Toyotaro Suzumura, Scott Trent, Michiaki Tatsubori, Akihiko Tozawa 和Tamiya Onodera于IBM東京實驗室。 摘要PHP作為Web 2.0時代一個著名的編程語言,支持靈活的服務器端軟件開發。自第5版置入一個基于C的內置函數庫后,它正式支持SOAP消息通信。在這篇 文章中,我們將定性定量地深入研究PHP作為web服務引擎與其他用Java 和C實現的服務引擎的性能對比。為達到實驗目的,我們使用Axis2,因為它是一個開源的web服務引擎,并且可以得到Java和C實現的

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

3、C實現的web 服務引擎,作者相信,通過讓人們了解PHP優秀的性能評分和高的執行效率,將會促進基于SOAP的web服務。1. 引言Web服務技術,尤其是基于WS-*的web技術,在實現面向服務的體系結構中,起著關鍵作用。然而,很難說web服務的廣泛性就和當它第一次出現時被預言的一樣。可能的原因包括:XML處理的性能問題,太多復雜的 WS-* 標準,等等。最近,在Web 2.0時代出現的技術已經出現通過人們的廣泛接受,其中程序員因使用這些技術而扮演關鍵角色。從這個觀點看,上述不受歡迎的一個最大原因之一是軟件本身的生產力和性能的劣勢。PHP被廣泛用作服務器端語言。由于PHP可以提高軟件生產力,許多

4、開源軟件和公司網站使用它。更重要的是,PHP在版本5中正式提供對SOAP支持,這樣,有助于促進基于SOAP/WS-*.的web服務的廣泛應用。在本文中,我們從定性和定量兩個方面對主要的開源引擎PHP SOAP和Axis2作了徹底的比較研究。請注意,我們不認為PHP在提供網絡支持方面優于其他編程語言,只是集中于做一個中立的比較。這篇文章的結構如下。第二部分描述了Axis2的概況和SOAP在PHP中的擴展,第三部分定性地比較了編程模型,部署模型,WS-*標準支持以及其他功能。接下來,第四部分對使用稱為StockQuote web 服務和WSTest的基準作了定量比較,在第五部分,我們對PHP, J

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

6、P和它的web服務運行,還有Axis2。2.1 PHP web服務運行Axis2作為Axis1的升級版本,是一個開源的web服務引擎。Axis2的體系結構是從頭開始重建,以提供更多性能意識和靈活性來支持各種各樣的WS - *標準。有兩種實現方法,分別是用Java寫的Apache Axis2和用C寫的Apache Axis2。許多特征可以用來區別Axis2和 Axis1,比如對各種WS-*標準的支持和web服務同步。Axis2的另一顯著特點是它的REST支持。當REST選項被啟用時,一個單獨的操作返回一個XML消息或一個SOAP信封。這項功能很重要,因為它減輕了想以SOAP 和REST 兩種方式

7、發布web服務的程序員的負擔。3. 定性比較本節從包括軟件架構、xml處理模型、WS - *標準支持、對服務供應商的編程模型和部署模型、對RESTful服務的支持和其他支持功能在內的各個角度,對PHP和Axis2所支持的網絡服務作了比較研究。3.1 軟件架構與Axis1相比,Axis2的體系結構應該更加靈活和可配置。Axis2有一個可以用來安裝附加功能的模塊,以支持各種各樣的WS-*標準。這種結構有兩種實現,Axis2 Java,正如它的名字,是用Java語言編寫的。類似的,Axis2 C是用C語言編寫的。Axis2 Java通常作為一個部署在servlet引擎的servlet,比如Apach

8、e Tomcat。另一方面Axis2 C可作為mod_axis2共享庫,部署在Apache HTTP服務器上。與Axis2相比,PHP中的SOAP提供支持單片架構,作為用C語言編寫的擴展實現,該擴展被一個PHP過程的核心運行通過C接口直接調用。PHP是一個緩存中介碼,而Java有一個實時編譯器。聯系PHP運行和HTTP服務器的兩個主要方法是在mod_php中共享庫和FastCGI服務通道。在mod_php模式下,PHP實時運行在HTTP服務器的進程中;在FastCGI模式下,多個PHP進程可以被作為單獨的外部進程,通過定義好的FastCGI協議與HTTP服務器通信。考慮到自動內存管理,PHP使

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

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

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

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

13、因為數據是動態類型而不是在編譯時檢查。程序員可以通過一個無需編譯的靈活方法直接編輯和調試文件。3.4 WS-*標準功能支持正如前文所述,Axis2 的設計有靈活的體系結構,以支持分類WS-* 標準。相比而言,當前PHP發布所支持的SOAP 1.1, SOAP 1.2, 和WSDL 1.1規則的子集,提供了標準 SOAP擴展。但是,面向PHP 16的web服務框架已開始支持全套WS-*標準。REST支持和REST類型的服務器一樣,Axis2支持SOAP 1.1 和 SOAP 1.2。一個服務可能是公開作為 SOAP樣式以及REST類型同時服務。PHP 被認為是實現 REST 類型服務時要使用的語

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

15、務實現本身。我們在表一中展示了四種變化的測試。我們檢查了當今的許多web服務器和連接器,但是我們盡可能多的關注主流配置。對于PHP,我們選擇兩個具有代表性的HTTP服務器:使用最廣泛的Apache HTTP服務器(2.0.63),和由于其高性能,得到社會各界(包括商業網站)廣泛接受的Lighttpd (1.4.19) 10。表一中的連接器(SAPI)說明了連接PHP和HTTP服務器的一種方法。在Apache下,我們選擇了mod_php方法,PHP運行庫和它的SOAP引擎作為Apache服務器運行在同一進程。對于Lighttpd,我們選擇FastCGI作為連接器。在FastCGI的作用下,作為外

16、部進程的多個PHP進程通過明確定義的FastCGI協議與Apache HTTP服務器通信。我們配置FastCGI的進程數為16。接下來,對于Axis2 Java,我們使用Apache Tomcat (5.5.26)作為Servlet引擎,Axis2 Java作為Java Servlet在其中運行。對于Axis2 C,我們使用Apache 2.2.26作為HTTP服務,Axis2 C引擎作為mod_axis2,和Apache HTTP服務運行在同一個進程。4.2 實驗環境我們用一個配置 3.4 GHz 至強單處理器和 3 GB RAM、運行 Fedora 核心 7(Linux 內核 2.6.21

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

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

19、耗相同的請求消息,然后返回相同的應答消息。每個運行庫的動態web應用程序被寫入,所以它可以被送達一個web容器,如Tomcat JSP腳本、Lighttpd和Apache PHP腳本。4.4 股票報價案例比較通過一個簡單的web服務,我們對表一中SOAP引擎的性能進行了比較,包括Axis2 Java,Axis2 C, PHP+Lighttpd和 PHP+Apache。我們實驗所用的web服務是一個股票報價服務,返回SOAP請求消息指定的最新股票報價,請求消息是277字節長,并有一個表示查詢符號名稱的單獨元素。響應為649字節長,不僅包含最新的股票價格,而且包含其他信息如最新交易情況。鑒于對股票

20、報價服務的WSDL文件,每個SOAP引擎的服務骨架為Axis2而產生。由于PHP當前并不包括WSDL生成機制,我們需從零開始實現它。表2顯示了所有基于PHP的web服務編碼,表3 顯示了基于 Java 的 web 服務代碼段和從已存在的 WSDL生成的許多其他代碼。結果如圖三所示。左邊的Y軸表示吞吐量,對應Apache Bench計算出的在一秒中處理的請求數量。右邊的Y軸表示了相對于Axis2 Java,每個SOAP引擎性能的提高率。正如圖中所描述的,PHP+Lighttpd是Axis2 Java性能的86%,PHP+Apache性能是Axis2 Java的97%,Axis2 C超過Axis2

21、 Java性能的25%。由于SOAP引擎的性能主要取決于序列化和反序列化的花費,還因為這種web服務不花費過多時間在這些操作上,所以此結果清楚顯示性能差異來自其他處理過程。第一個和第二個PHP實驗的關鍵區別在于PHP運行庫是否包含用C寫的SOAP引擎擴展。這一結果說明 Apache 2.0 和 PHP5 的組合沒有Lighttpd 和PHP5組合高效。在 Lighttpd 配置中, 16個 PHP 進程獨立運行,而在 Apache 的配置中,PHP引擎被嵌入數以百計的 HTTP 進程。4.5 與WSTest的比較在下一個實驗中,我們使用WSTest 13,一個SOAP處理基準。我們使用WSTe

22、st中的echoStruct場景應答載有結構元素數組的SOAP消息。1. 整體結果圖4展示了結構數從一到十的性能實驗結果。左邊的Y軸表示用和股票報價例子相同的邏輯計算出來的吞吐量,右邊的Y軸表示與Axis2 Java相比的性能加速率。正如圖中所表現的,Apache+PHP超過Axis2 Java性能的1.87到5.97倍,PHP+Lighttpd超過1.65到5.23倍,Axis2 C也有一個大的性能提升,為2.29 到6.99倍。這表明PHP SOAP引擎相對于Axis2 C也有競爭力。圖5顯示了兩個用Axis2 Java 和 PHP處理較長的消息的結果,使用兩個不同的服務器:Lighttp

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

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

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

26、設計為高效率(但無健壯性和可移植性),但是Java的本地接口(JNI)設計偏向可移植性和健壯性而不是效率。如果我們在Java WS中使用堆棧,由于頻繁的高花費的C到Java的調用,將會產生很大的開銷。請注意用Java寫的XML解析器比用C寫的慢,因為Java處理字符串的低效和不允許(潛在的不安全類型)指針運算。但是,在更多考慮系統穩定性和生產率的專業程序員來看,Java肯定是一個好的選擇。PHP 和C股票報價web服務性能實驗演示說明Axis2 C比其他SOAP引擎表現更好。Axis2 C用C實現,這個性能評分可能是預期的,因為Axis2 被設計為高度模塊化。現在并不十分清楚Axis2 C是否

27、仍勝過用整體方法設計并用C編寫的PHP SOAP引擎,但是從生產效率、可編程角度、易于部署和調試角度來看,它遠不如其他引擎。尤其是考慮到調試,不是簡單的調試為Axis2 C編寫的web服務,因為分段錯誤的內核轉儲和原始web服務定義之間的關系并不明顯。PHP作為SOAP引擎考慮最近的編程語言流行趨勢,PHP達到了效率和性能這一語言的基本要求。即使Java也可以達到這一要求,由于PHP被用到各種web程序和SOAP,WS-*還沒有被成功用在公共領域(某些健壯的企業應用程序除外),我們認為PHP處于一個好的位置。6. 相關工作Ceccet, et al比較了EJB, Java Servlet, 和

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

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

30、 服務實現可以與本文中報告的結果不同。我們也可以比較不同的動態腳本語言,如Ruby 和 Python。此外,在將來,我們可以探索REST型服務的性能,而不是側重于基于 SOAP 的 web 服務的服務。通過HTTP Get操作進入web服務后,XML和 JSON被用作一個數據格式。我們可以比較PHP和Axis2,因為當前PHP對于REST web服務很流行。而Axis2不真正用在REST web服務,即使它不用額外的編程,就能為相同的web實現提供 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論