几种流行Webservice框架性能对照
?
?轉(zhuǎn)自【http://blog.csdn.net/thunder4393/article/details/5787121】,寫的非常好,以收藏。
?
?1????? 摘要
開發(fā)webservice應(yīng)用程序中離不開框架的支持,當(dāng)open-open站點列舉的就有30多種,這對于開發(fā)人員怎樣選擇帶來一定的疑惑。性能Webservice的關(guān)鍵要素,不同的框架性能上存在較大差異,而當(dāng)前在官方站點、網(wǎng)絡(luò)資料中能夠方便的找到各自框架的介紹,可是非常少有針對不同框架性能測試數(shù)據(jù)。本文選擇了比較流行幾個框架:Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF等,採用java作為測試用例,通過本機和遠程兩種進行測試方式,對這幾種框架進行了性能測試,并對測試結(jié)果分析和性能比較,最后并對性能優(yōu)異的框架進行了推薦。
關(guān)鍵詞:Axis1、Axis2、XFire、CXF、Spring、SOAP、StAX、WSDL
2????? 框架介紹
2.1?????Apache Axis1
Axis本質(zhì)上就是一個SOAP引擎(Apache Axis is an implementation of the SOAP),提供創(chuàng)建server端、client和網(wǎng)關(guān)SOAP操作的基本框架。但Axis并不全然是一個SOAP引擎,它還包含:
l? 是一個獨立的SOAPserver。
l? 是一個嵌入Servlet引擎(比如Tomcat)的server。
l? 支持WSDL。
l? 提供轉(zhuǎn)化WSDL為Java類的工具。
l? 提供樣例程序。
l? 提供TCP/IP數(shù)據(jù)包監(jiān)視工具。
2.2?????Apache Axis2
Apache Axis2相比Apache Axis1更加有效、更加模塊化、更加面向xml,支持easy插件模塊擴展新功能和特性,比如安全和可靠。Apache Axis2是基于Apache AXIOM,它是一個高性能、pull-based XML對象模型。Apache Axis2的關(guān)鍵特性:
l? 解析xml更快。採用自己的對象模型和StAX (Streaming API for XML)。
l? 更低的內(nèi)存占用。
l? 支持熱部署。新服務(wù)增加到系統(tǒng),無需重新啟動服務(wù)。
l? 支持異步 webservice、
l? MEP支持,靈活支持在WSDL 2.0定義的Message Exchange Patterns (MEPs)
l? 更加靈活。引擎給開發(fā)者提供了充足的自由度可擴展客戶頭信息處理、系統(tǒng)管理、
l? 更加穩(wěn)定性。
l? 傳輸框架不依賴于詳細協(xié)議。為集成和傳輸協(xié)議(SMTP, FTP, message-oriented middleware, etc)有一個簡單和抽象,引擎核心是全然獨立于詳細的傳輸協(xié)議。
l? 支持WSDL。支持WSDL1.1、WSDL2.0。
l? 方便集成其它組件(Add-ons)。幾個web services已經(jīng)被集成,包含:WSS4J for security (Apache Rampart), Sandesha for reliable messaging,Kandula which is an encapsulation of WS-Coordination, WS-AtomicTransaction and WS-BusinessActivity.
l? 良好的擴展性。
2.3?????Codehaus XFire
XFire核心是一個輕量的基于STAX消息處理模型,用來與SOAP消息交互,它支持不同類型的綁定機制、容器和傳輸協(xié)議。
支持webservice標(biāo)準(zhǔn)- SOAP, WSDL, WS-I Basic Profile, WS-Addressing, WS-Security, etc.
l? 高性能SOAP STACK
l? 可插拔綁定POJOs, XMLBeans, JAXB 1.1, JAXB 2.0, and Castor support
l? 通過Java1.5 和1.4(Commons attributes JSR 181 syntax)使用JSR 181 API配置服務(wù)
l? 支持多中傳輸協(xié)議- HTTP, JMS, XMPP, In-JVM, etc.
l? 可嵌入的和直觀的API
l? 支持Spring, Pico, Plexus, and Loom
l? 支持JBI
l? client和服務(wù)端stub代碼生成
l? 支持JAX-WS early access
2.4????? Apache CXF
Apache CXF是一個開源服務(wù)框架。CXF可用前端編程APIs開發(fā)服務(wù),比方:JAX-WS and JAX-RS,主要特性包含:
l? 支持Web services標(biāo)準(zhǔn)。包含:SOAP、the WSI Basic Profile、WSDL、WS-Addressing、WS-Policy、WS-ReliableMessaging、WS-Security、WS-SecureConversation 和WS-SecurityPolicy.
l? 支持不同類型前端開發(fā)模型。CXF實現(xiàn)了JAX-WS APIs,支持JAX-RS開發(fā)。
l? easy使用。CXF設(shè)計的簡潔和直觀,具有簡潔APIs迅速的構(gòu)建基于代碼的服務(wù),Maven插件使得工具集成更加easy、JAX-WS API支持、Spring 2.x XML使得配置更加easy。
l? 支持二進制和遺留協(xié)議。CXF被設(shè)計為可插拔的架構(gòu),在不同的傳輸協(xié)議結(jié)合下,不僅支持XML,也支持非XML類型綁定,比如:JSON和CORBA。
3????? 測試準(zhǔn)備
表格 1測試基本元素
| 測試條件 | 描寫敘述 |
| 主機環(huán)境 | A測試機:CPU:1.60GHz;內(nèi)存:1.37G |
| B測試機:CPU:1.83GHz;內(nèi)存:1G | |
| Web服務(wù) | axis1 1.3 |
| axis2 1.2 | |
| xfire 1.2.6 | |
| 應(yīng)用環(huán)境 | jdk 1.4、spring 2.x |
| client代碼 | public void testgetVersion() throws java.lang.Exception { |
| 服務(wù)端代碼 | public String getVersion() |
| 測試方法 | 本機接口測試,client和服務(wù)端都在A測試機上進行; |
| 遠程接口測試,A測試機作為client,B測試機作為server。本次測試是在局域網(wǎng)內(nèi)完畢。 | |
| 結(jié)果精度 | 數(shù)字精確到小數(shù)點后兩位 |
| 名詞解釋 | server端:部署到server的程序。 |
| client:發(fā)起請求調(diào)用server上webservcie的程序。 | |
| client初時化時間:發(fā)起接口調(diào)用時,初始化clientjava對象所需時間。 |
?
?
| 表格 2在端對端性能上,一個client驅(qū)動程序使用了一個胖clientWeb服務(wù)堆棧來發(fā)送和接受SOAP請求 |
| Webservice服務(wù)端 |
| Webserviceclient Webservice stack |
| SOAP over HTTP |
4????? 性能測試
4.1????? 測試方法
本次假定在同樣網(wǎng)絡(luò)、主機環(huán)境條件下進行測試,因此性能的區(qū)別主要是由不同框架實現(xiàn)機制的所決定。
l? 採用兩種方式測試:本機測試、遠程測試。
l? server端分別採用:axis1、axis2、xfire、CXF,對于選定的server端,用不同框架相應(yīng)的工具包wsdl生成clientstub代碼進行測試。
l? 服務(wù)端接口內(nèi)部沒有復(fù)雜業(yè)務(wù)邏輯,client調(diào)用時,只返回一個字符串。
l? 每次執(zhí)行,採用java循環(huán)方式調(diào)用10次服務(wù)端接口,并記錄下從發(fā)起到返回結(jié)果的時間。
4.2?????測試結(jié)果
限于篇幅,本文僅提供了:以CXF框架為服務(wù)端的具體測試結(jié)果,及其各個框架的綜合后測試結(jié)果。
?
表格 3以CXF作為服務(wù)端測試具體結(jié)果
| 本機測試結(jié)果(單位:ms) | ||||||||||||
| server端 | cxf | |||||||||||
| client | cxf | axis1 | ||||||||||
| client初始化 | 第1組 | 第2組 | 第3組 | 第4組 | 第5組 |
| 第1組 | 第2組 | 第3組 | 第4組 | 第5組 |
|
|
| 2547 | 2594 | 2563 | 2578 | 2563 | 2569 | 422 | 422 | 407 | 406 | 421 | 415.6 |
| 連續(xù)10次調(diào)用接口測試 | 第1組 | 第2組 | 第3組 | 第4組 | 第5組 |
| 第1組 | 第2組 | 第3組 | 第4組 | 第5組 |
|
| 1 | 297 | 281 | 281 | 282 | 266 | 281.4 | 234 | 219 | 219 | 234 | 219 | 225 |
| 2 | 0 | 0 | 0 | 15 | 15 |
| 0 | 16 | 0 | 0 | 16 |
|
| 3 | 0 | 16 | 16 | 0 | 0 |
| 16 | 15 | 16 | 16 | 0 |
|
| 4 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 15 |
|
| 5 | 16 | 0 | 0 | 0 | 0 |
| 15 | 16 | 15 | 0 | 0 |
|
| 6 | 0 | 15 | 15 | 0 | 16 |
| 0 | 0 | 0 | 16 | 0 |
|
| 7 | 0 | 0 | 0 | 0 | 0 |
| 16 | 16 | 16 | 0 | 16 |
|
| 8 | 15 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 15 | 0 |
|
| 9 | 0 | 0 | 0 | 0 | 15 |
| 16 | 15 | 16 | 0 | 16 |
|
| 10 | 0 | 16 | 16 | 15 | 0 |
| 0 | 0 | 0 | 16 | 0 |
|
| 10次平均值 | 32.8 | 32.8 | 32.8 | 31.2 | 31.2 | 32.16 | 29.7 | 29.7 | 28.2 | 29.7 | 28.2 | 29.61 |
| 后9次平均值 | 3.444 | 5.222 | 5.222 | 3.333 | 5.111 | 4.467 | 7 | 8.667 | 7 | 7 | 7 | 7.333 |
| 遠程測試結(jié)果(單位:ms) | ||||||||||||
| server端 | cxf | |||||||||||
| client | cxf | axis1 | ||||||||||
| client初始化 | 第1組 | 第2組 | 第3組 | 第4組 | 第5組 |
| 第1組 | 第2組 | 第3組 | 第4組 | 第5組 |
|
|
| 2703 | 2547 | 2578 | 2563 | 2531 | 2584 | 406 | 406 | 422 | 407 | 422 | 412.6 |
| 連續(xù)10次調(diào)用接口測試 | 第1組 | 第2組 | 第3組 | 第4組 | 第5組 |
| 第1組 | 第2組 | 第3組 | 第4組 | 第5組 |
|
| 1 | 344 | 281 | 281 | 281 | 297 | 296.8 | 219 | 234 | 235 | 234 | 687 | 321.8 |
| 2 | 0 | 0 | 16 | 16 | 16 |
| 16 | 0 | 15 | 16 | 16 |
|
| 3 | 0 | 16 | 0 | 0 | 0 |
| 62 | 16 | 0 | 0 | 0 |
|
| 4 | 16 | 0 | 16 | 15 | 0 |
| 47 | 16 | 16 | 15 | 16 |
|
| 5 | 0 | 15 | 0 | 0 | 15 |
| 16 | 15 | 15 | 16 | 0 |
|
| 6 | 0 | 0 | 15 | 16 | 0 |
| 31 | 0 | 0 | 0 | 15 |
|
| 7 | 0 | 16 | 0 | 0 | 16 |
| 16 | 16 | 16 | 15 | 0 |
|
| 8 | 15 | 0 | 0 | 0 | 0 |
| 31 | 0 | 16 | 16 | 16 |
|
| 9 | 0 | 16 | 16 | 15 | 0 |
| 31 | 15 | 0 | 0 | 0 |
|
| 10 | 0 | 0 | 0 | 0 | 15 |
| 31 | 16 | 15 | 16 | 15 |
|
| 10次平均值 | 37.5 | 34.4 | 34.4 | 34.3 | 35.9 | 35.3 | 50 | 32.8 | 32.8 | 32.8 | 76.5 | 43.37 |
| 后9次平均值 | 3.444 | 7 | 7 | 6.889 | 6.889 | 6.244 | 31.22 | 10.44 | 10.33 | 10.44 | 8.667 | 14.22 |
?
?
表格 4不同框架本機和遠程測試結(jié)果
| 本機測試結(jié)果(單位:ms) | ||||||||
| server端 | axis2 | axis1 | xfire | cxf | ||||
| client | axis2 | axis1 | axis1 | axis2 | xfire+spring | axis1 | cxf | axis1 |
| client初始化 | 656.4 | 1138 | 1325 | 762.2 | 0 | 1340.6 | 2569 | 451.6 |
| 10次中的初次調(diào)用值 | 546.4 | 568.8 | 484.2 | 434.8 | 1022 | 987.4 | 281.4 | 225 |
| 10次平均值 | 62.48 | 66.7 | 73.44 | 57.22 | 119.2 | 120.9 | 32.16 | 29.61 |
| 后9次平均值 | 8.71 | 11.84 | 27.8 | 15.27 | 18.84 | 25 | 4.467 | 7.333 |
| 遠程測試結(jié)果(單位:ms) | ||||||||
| client初始化 | 672.8 | 1040 | axis1 | 772 | 0 | 2994 | 2584 | 421.6 |
| 10次中的初次調(diào)用值 | 645.8 | 606 | 684.4 | 427.8 | 1010 | 1190 | 296.8 | 321.8 |
| 10次平均值 | 71.58 | 70.36 | 97.82 | 60.28 | 117.2 | 139.1 | 35.3 | 43.37 |
| 后9次平均值 | 7.78 | 10.58 | 32.64 | 19.44 | 18.04 | 27.13 | 6.244 | 14.22 |
?
4.3????? 結(jié)果分析
從數(shù)據(jù)能夠看出,有以下幾個特點:
l? client初次調(diào)用,初始化clientstub對象時,大約在:600ms~2500ms。因為須要建立網(wǎng)絡(luò)連接,初始化java相關(guān)對象,因此耗時較長。
l? client初始化stub后,接口初次調(diào)用,大約在:400ms~1000ms。相比興許的接口調(diào)用時間最長。
l? 在第一次調(diào)用完成后,隨后的調(diào)用中,性能都明顯提升。大約在:7ms~30ms。
l? 本機測試與遠程測試,性能上差距非常微小,在快速的局域網(wǎng)內(nèi),性能區(qū)別差點兒能夠忽略。
l? 在同樣的服務(wù)端下,採用不同框架生成的stub代碼調(diào)用時,時間上也存在一定的差異。
?
實際應(yīng)用中,接口的調(diào)用都是在網(wǎng)絡(luò)的不同的機器之間進行,本文也重點關(guān)注遠程調(diào)用測試結(jié)果,在測試結(jié)果比較上,能夠看出:
l? 最優(yōu)組合是最差組合性能的5倍多。
n? 最優(yōu)的組合為:cxfclient+ cxf服務(wù)端,6ms左右。
n? 最差的組合為:axis1client+ axis1服務(wù)端,32ms左右。
l? CXF作為服務(wù)端,對于不同的client調(diào)用時,性能最佳。
5????? 結(jié)束語
本文對幾種流行webservice框架的性能的實際測試,對開發(fā)人員選擇框架時提供了一個關(guān)于性能方面參考。Apache CXF是Codehaus XFire 的第二代產(chǎn)品,眼下在不同框架中性能最佳,應(yīng)該是開發(fā)人員不錯的選擇,這與它本身的架構(gòu)設(shè)計不無關(guān)系。相比其它框架,CXF具有幾個突出的特性:支持JAX-WS、Spring集成、Aegi數(shù)據(jù)綁定、支持RESTful services、支持WS-*、Apache協(xié)議、代碼實現(xiàn)簡潔。Apache Axis2是Apache Axis1的第二代產(chǎn)品,架構(gòu)上也很不錯,關(guān)鍵特性:支持各種規(guī)范、可插拔模塊化設(shè)計、支持熱部署等。與CXF相比性能也很優(yōu)異。
在服務(wù)端框架確定的場景下,最好是採用該框架生成client代碼,這樣配合性能可達到更佳。在實際的項目中,開發(fā)人員在選擇詳細那個框架時,仍還需綜合評估框架的開發(fā)組織、產(chǎn)品路線圖、文檔化程度、應(yīng)用廣泛度、與優(yōu)異框架的集成度、靈活和擴展性等因素。
?
總結(jié)
以上是生活随笔為你收集整理的几种流行Webservice框架性能对照的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下的字符处理命令之tr命令详解
- 下一篇: java trim