几种流行Webservice框架性能对照
?
?轉自【http://blog.csdn.net/thunder4393/article/details/5787121】,寫的非常好,以收藏。
?
?1????? 摘要
開發webservice應用程序中離不開框架的支持,當open-open站點列舉的就有30多種,這對于開發人員怎樣選擇帶來一定的疑惑。性能Webservice的關鍵要素,不同的框架性能上存在較大差異,而當前在官方站點、網絡資料中能夠方便的找到各自框架的介紹,可是非常少有針對不同框架性能測試數據。本文選擇了比較流行幾個框架:Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF等,採用java作為測試用例,通過本機和遠程兩種進行測試方式,對這幾種框架進行了性能測試,并對測試結果分析和性能比較,最后并對性能優異的框架進行了推薦。
關鍵詞:Axis1、Axis2、XFire、CXF、Spring、SOAP、StAX、WSDL
2????? 框架介紹
2.1?????Apache Axis1
Axis本質上就是一個SOAP引擎(Apache Axis is an implementation of the SOAP),提供創建server端、client和網關SOAP操作的基本框架。但Axis并不全然是一個SOAP引擎,它還包含:
l? 是一個獨立的SOAPserver。
l? 是一個嵌入Servlet引擎(比如Tomcat)的server。
l? 支持WSDL。
l? 提供轉化WSDL為Java類的工具。
l? 提供樣例程序。
l? 提供TCP/IP數據包監視工具。
2.2?????Apache Axis2
Apache Axis2相比Apache Axis1更加有效、更加模塊化、更加面向xml,支持easy插件模塊擴展新功能和特性,比如安全和可靠。Apache Axis2是基于Apache AXIOM,它是一個高性能、pull-based XML對象模型。Apache Axis2的關鍵特性:
l? 解析xml更快。採用自己的對象模型和StAX (Streaming API for XML)。
l? 更低的內存占用。
l? 支持熱部署。新服務增加到系統,無需重新啟動服務。
l? 支持異步 webservice、
l? MEP支持,靈活支持在WSDL 2.0定義的Message Exchange Patterns (MEPs)
l? 更加靈活。引擎給開發者提供了充足的自由度可擴展客戶頭信息處理、系統管理、
l? 更加穩定性。
l? 傳輸框架不依賴于詳細協議。為集成和傳輸協議(SMTP, FTP, message-oriented middleware, etc)有一個簡單和抽象,引擎核心是全然獨立于詳細的傳輸協議。
l? 支持WSDL。支持WSDL1.1、WSDL2.0。
l? 方便集成其它組件(Add-ons)。幾個web services已經被集成,包含: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消息交互,它支持不同類型的綁定機制、容器和傳輸協議。
支持webservice標準- 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配置服務
l? 支持多中傳輸協議- HTTP, JMS, XMPP, In-JVM, etc.
l? 可嵌入的和直觀的API
l? 支持Spring, Pico, Plexus, and Loom
l? 支持JBI
l? client和服務端stub代碼生成
l? 支持JAX-WS early access
2.4????? Apache CXF
Apache CXF是一個開源服務框架。CXF可用前端編程APIs開發服務,比方:JAX-WS and JAX-RS,主要特性包含:
l? 支持Web services標準。包含:SOAP、the WSI Basic Profile、WSDL、WS-Addressing、WS-Policy、WS-ReliableMessaging、WS-Security、WS-SecureConversation 和WS-SecurityPolicy.
l? 支持不同類型前端開發模型。CXF實現了JAX-WS APIs,支持JAX-RS開發。
l? easy使用。CXF設計的簡潔和直觀,具有簡潔APIs迅速的構建基于代碼的服務,Maven插件使得工具集成更加easy、JAX-WS API支持、Spring 2.x XML使得配置更加easy。
l? 支持二進制和遺留協議。CXF被設計為可插拔的架構,在不同的傳輸協議結合下,不僅支持XML,也支持非XML類型綁定,比如:JSON和CORBA。
3????? 測試準備
表格 1測試基本元素
| 測試條件 | 描寫敘述 |
| 主機環境 | A測試機:CPU:1.60GHz;內存:1.37G |
| B測試機:CPU:1.83GHz;內存:1G | |
| Web服務 | axis1 1.3 |
| axis2 1.2 | |
| xfire 1.2.6 | |
| 應用環境 | jdk 1.4、spring 2.x |
| client代碼 | public void testgetVersion() throws java.lang.Exception { |
| 服務端代碼 | public String getVersion() |
| 測試方法 | 本機接口測試,client和服務端都在A測試機上進行; |
| 遠程接口測試,A測試機作為client,B測試機作為server。本次測試是在局域網內完畢。 | |
| 結果精度 | 數字精確到小數點后兩位 |
| 名詞解釋 | server端:部署到server的程序。 |
| client:發起請求調用server上webservcie的程序。 | |
| client初時化時間:發起接口調用時,初始化clientjava對象所需時間。 |
?
?
| 表格 2在端對端性能上,一個client驅動程序使用了一個胖clientWeb服務堆棧來發送和接受SOAP請求 |
| Webservice服務端 |
| Webserviceclient Webservice stack |
| SOAP over HTTP |
4????? 性能測試
4.1????? 測試方法
本次假定在同樣網絡、主機環境條件下進行測試,因此性能的區別主要是由不同框架實現機制的所決定。
l? 採用兩種方式測試:本機測試、遠程測試。
l? server端分別採用:axis1、axis2、xfire、CXF,對于選定的server端,用不同框架相應的工具包wsdl生成clientstub代碼進行測試。
l? 服務端接口內部沒有復雜業務邏輯,client調用時,只返回一個字符串。
l? 每次執行,採用java循環方式調用10次服務端接口,并記錄下從發起到返回結果的時間。
4.2?????測試結果
限于篇幅,本文僅提供了:以CXF框架為服務端的具體測試結果,及其各個框架的綜合后測試結果。
?
表格 3以CXF作為服務端測試具體結果
| 本機測試結果(單位: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 |
| 連續10次調用接口測試 | 第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 |
| 遠程測試結果(單位: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 |
| 連續10次調用接口測試 | 第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不同框架本機和遠程測試結果
| 本機測試結果(單位: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次中的初次調用值 | 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 |
| 遠程測試結果(單位:ms) | ||||||||
| client初始化 | 672.8 | 1040 | axis1 | 772 | 0 | 2994 | 2584 | 421.6 |
| 10次中的初次調用值 | 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????? 結果分析
從數據能夠看出,有以下幾個特點:
l? client初次調用,初始化clientstub對象時,大約在:600ms~2500ms。因為須要建立網絡連接,初始化java相關對象,因此耗時較長。
l? client初始化stub后,接口初次調用,大約在:400ms~1000ms。相比興許的接口調用時間最長。
l? 在第一次調用完成后,隨后的調用中,性能都明顯提升。大約在:7ms~30ms。
l? 本機測試與遠程測試,性能上差距非常微小,在快速的局域網內,性能區別差點兒能夠忽略。
l? 在同樣的服務端下,採用不同框架生成的stub代碼調用時,時間上也存在一定的差異。
?
實際應用中,接口的調用都是在網絡的不同的機器之間進行,本文也重點關注遠程調用測試結果,在測試結果比較上,能夠看出:
l? 最優組合是最差組合性能的5倍多。
n? 最優的組合為:cxfclient+ cxf服務端,6ms左右。
n? 最差的組合為:axis1client+ axis1服務端,32ms左右。
l? CXF作為服務端,對于不同的client調用時,性能最佳。
5????? 結束語
本文對幾種流行webservice框架的性能的實際測試,對開發人員選擇框架時提供了一個關于性能方面參考。Apache CXF是Codehaus XFire 的第二代產品,眼下在不同框架中性能最佳,應該是開發人員不錯的選擇,這與它本身的架構設計不無關系。相比其它框架,CXF具有幾個突出的特性:支持JAX-WS、Spring集成、Aegi數據綁定、支持RESTful services、支持WS-*、Apache協議、代碼實現簡潔。Apache Axis2是Apache Axis1的第二代產品,架構上也很不錯,關鍵特性:支持各種規范、可插拔模塊化設計、支持熱部署等。與CXF相比性能也很優異。
在服務端框架確定的場景下,最好是採用該框架生成client代碼,這樣配合性能可達到更佳。在實際的項目中,開發人員在選擇詳細那個框架時,仍還需綜合評估框架的開發組織、產品路線圖、文檔化程度、應用廣泛度、與優異框架的集成度、靈活和擴展性等因素。
?
總結
以上是生活随笔為你收集整理的几种流行Webservice框架性能对照的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下的字符处理命令之tr命令详解
- 下一篇: java trim