幾種流行Webservice框架性能對照

 

 轉自【http://blog.csdn.net/thunder4393/article/details/5787121】,寫的很是好,以收藏。前端

 

 1      摘要java

開發webservice應用程序中離不開框架的支持,當open-open站點列舉的就有30多種,這對於開發人員怎樣選擇帶來必定的疑惑。性能Webservice的關鍵要素,不一樣的框架性能上存在較大差別,而當前在官方站點、網絡資料中可以方便的找到各自框架的介紹,但是很是少有針對不一樣框架性能測試數據。本文選擇了比較流行幾個框架:Apache Axis一、Apache Axis二、Codehaus XFire、Apache CXF等,採用java做爲測試用例,經過本機和遠程兩種進行測試方式,對這幾種框架進行了性能測試,並對測試結果分析和性能比較,最後並對性能優異的框架進行了推薦。web

關鍵詞:Axis一、Axis二、XFire、CXF、Spring、SOAP、StAX、WSDLspring

2      框架介紹

2.1     Apache Axis1

Axis本質上就是一個SOAP引擎(Apache Axis is an implementation of the SOAP),提供建立server端、client和網關SOAP操做的基本框架。但Axis並不全然是一個SOAP引擎,它還包含:apache

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.一、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.四、spring 2.x

client代碼

public void testgetVersion() throws java.lang.Exception {
  String url = "http://localhost:8081/boss/services/Calculate";
  // client初時化時間
  long startTime = System.currentTimeMillis();
  // clientstub代碼各自是axis1/axis2/xfire/cxf框架 wsdl2java生成
  CalculateCalculateHttpportStub stub = new CalculateCalculateHttpportStub(url);
  long endTime = System.currentTimeMillis();
  System.out.println("client init time is: " + (endTime - startTime));
 
  // 連續調用10次
  for (int i = 0; i < 10; i++) {
   long startTime1 = System.currentTimeMillis();
   String ret = stub.getVersion().get_return();
   long endTime1 = System.currentTimeMillis();

   System.out.println("[" + i + "] elapsed time is: " + (endTime1 - startTime1) + " ms");
   System.out.println("stub.getVersion() is: " + ret);
  }
 }

服務端代碼

public String getVersion()
注:接口無不論什麼業務邏輯,僅僅返回一個字符串:"Hello";

測試方法

本機接口測試,client和服務端都在A測試機上進行;

遠程接口測試,A測試機做爲client,B測試機做爲server。本次測試是在局域網內完畢。

結果精度

數字精確到小數點後兩位

名詞解釋

server端:部署到server的程序。

client:發起請求調用server上webservcie的程序。

client初時化時間:發起接口調用時,初始化clientjava對象所需時間。
好比:CalculateCalculateHttpportStub stub = new CalculateCalculateHttpportStub(url); // 由框架 wsdl2java生成clientstub

 

 

表格 2在端對端性能上,一個client驅動程序使用了一個胖clientWeb服務堆棧來發送和接受SOAP請求

Webservice服務端

Webserviceclient

Webservice stack

SOAP over HTTP

4      性能測試

4.1      測試方法

本次假定在一樣網絡、主機環境條件下進行測試,所以性能的區別主要是由不一樣框架實現機制的所決定。

l  採用兩種方式測試:本機測試、遠程測試。

l  server端分別採用:axis一、axis二、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代碼,這樣配合性能可達到更佳。在實際的項目中,開發人員在選擇詳細那個框架時,仍還需綜合評估框架的開發組織、產品路線圖、文檔化程度、應用普遍度、與優異框架的集成度、靈活和擴展性等因素。

相關文章
相關標籤/搜索