加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

几种流行Webservice框架性能对比

发布时间:2020-12-17 01:29:20 所属栏目:安全 来源:网络整理
导读:几种流行 Webservice 框架性能对比 1 ????? 摘要 开发 webservice 应用程序中离不开框架的支持,当 open-open 网站列举的就有 30 多种,这对于开发者如何选择带来一定的疑惑。性能 Webservice 的关键要素,不同的框架性能上存在较大差异,而当前在官方网站、

几种流行Webservice框架性能对比

1????? 摘要

开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有30多种,这对于开发者如何选择带来一定的疑惑。性能Webservice的关键要素,不同的框架性能上存在较大差异,而当前在官方网站、网络资料中可以方便的找到各自框架的介绍,但是很少有针对不同框架性能测试数据。本文选择了比较流行几个框架:Apache Axis1Apache Axis2Codehaus XFireApache CXF等,采用java作为测试用例,通过本机和远程两种进行测试方式,对这几种框架进行了性能测试,并对测试结果分析和性能比较,最后并对性能优异的框架进行了推荐。

关键词:Axis1Axis2XFireCXFSpringSOAPStAXWSDL

2????? 框架介绍

2.1????? Apache Axis1

Axis本质上就是一个SOAP引擎(Apache Axis is an implementation of the SOAP),提供创建服务器端、客户端和网关SOAP操作的基本框架。但Axis并不完全是一个SOAP引擎,它还包括:

l? 是一个独立的SOAP服务器。

l? 是一个嵌入Servlet引擎(例如Tomcat)的服务器。

l? 支持WSDL

l? 提供转化WSDLJava类的工具。

l? 提供例子程序。

l? 提供TCP/IP数据包监视工具。

2.2????? Apache Axis2

Apache Axis2相比Apache Axis1更加有效、更加模块化、更加面向xml,支持容易插件模块扩展新功能和特性,例如安全和可靠。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.1WSDL2.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? 客户端和服务端stub代码生成

l? 支持JAX-WS early access

2.4????? Apache CXF

Apache CXF是一个开源服务框架。CXF可用前端编程APIs开发服务,比如:JAX-WS and JAX-RS,主要特性包括:

l? 支持Web services标准。包括:SOAPthe WSI Basic ProfileWSDLWS-AddressingWS-PolicyWS-ReliableMessagingWS-SecurityWS-SecureConversation WS-SecurityPolicy.

l? 支持不同类型前端开发模型。CXF实现了JAX-WS APIs,支持JAX-RS开发。

l? 容易使用。CXF设计的简洁和直观,具有简洁APIs迅速的构建基于代码的服务,Maven插件使得工具集成更加容易、JAX-WS API支持、Spring 2.x XML使得配置更加容易。

l? 支持二进制和遗留协议。CXF被设计为可插拔的架构,在不同的传输协议结合下,不仅支持XML,也支持非XML类型绑定,例如:JSONCORBA

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.4spring 2.x

客户端代码

public void testgetVersion() throws java.lang.Exception {
? String url = "http://localhost:8081/boss/services/Calculate";
? //
客户端初时化时间
? long startTime = System.currentTimeMillis();
? //
客户端stub代码分别是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";

测试方法

本机接口测试,客户端和服务端都在A测试机上进行;

远程接口测试,A测试机作为客户端,B测试机作为服务器。本次测试是在局域网内完成。

结果精度

数字精确到小数点后两位

名词解释

服务器端:部署到服务器的程序。

客户端:发起请求调用服务器上webservcie的程序。

客户端初时化时间:发起接口调用时,初始化客户端java对象所需时间。
例如:CalculateCalculateHttpportStub stub = new CalculateCalculateHttpportStub(url); // 由框架 wsdl2java生成客户端stub

?

?

表格 2在端对端性能上,一个客户端驱动程序使用了一个胖客户端Web服务堆栈来发送和接受SOAP请求

Webservice服务端

Webservice客户端

Webservice stack

SOAP over HTTP

4????? 性能测试

4.1????? 测试方法

本次假定在相同网络、主机环境条件下进行测试,因此性能的差别主要是由不同框架实现机制的所决定。

l? 采用两种方式测试:本机测试、远程测试。

l? 服务器端分别采用:axis1axis2xfireCXF,对于选定的服务器端,用不同框架对应的工具包wsdl生成客户端stub代码进行测试。

l? 服务端接口内部没有复杂业务逻辑,客户端调用时,仅仅返回一个字符串。

l? 每次运行,采用java循环方式调用10次服务端接口,并记录下从发起到返回结果的时间。

4.2????? 测试结果

限于篇幅,本文仅提供了:以CXF框架为服务端的详细测试结果,及其各个框架的综合后测试结果。

?

表格 3CXF作为服务端测试详细结果

本机测试结果(单位:ms

服务器端

cxf

客户端

cxf

axis1

客户端初始化

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

服务器端

cxf

客户端

cxf

axis1

客户端初始化

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

服务器端

axis2

axis1

xfire

cxf

客户端

axis2

axis1

axis1

axis2

xfire+spring

axis1

cxf

axis1

客户端初始化

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

客户端初始化

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? 客户端初次调用,初始化客户端stub对象时,大约在:600ms2500ms。由于需要建立网络连接,初始化java相关对象,因此耗时较长。

l? 客户端初始化stub后,接口初次调用,大约在:400ms1000ms。相比后续的接口调用时间最长。

l? 在第一次调用完毕后,随后的调用中,性能都明显提升。大约在:7ms30ms

l? 本机测试与远程测试,性能上差距很微小,在高速的局域网内,性能差别几乎可以忽略。

l? 在相同的服务端下,采用不同框架生成的stub代码调用时,时间上也存在一定的差异。

?

实际应用中,接口的调用都是在网络的不同的机器之间进行,本文也重点关注远程调用测试结果,在测试结果比较上,可以看出:

l? 最优组合是最差组合性能的5倍多。

n? 最优的组合为:cxf客户端+ cxf服务端,6ms左右。

n? 最差的组合为:axis1客户端+ axis1服务端,32ms左右。

l? CXF作为服务端,对于不同的客户端调用时,性能最佳。

5????? 结束语

本文对几种流行webservice框架的性能的实际测试,对开发者选择框架时提供了一个关于性能方面参考。Apache CXFCodehaus XFire 的第二代产品,目前在不同框架中性能最佳,应该是开发者不错的选择,这与它本身的架构设计不无关系。相比其他框架,CXF具有几个突出的特性:支持JAX-WSSpring集成、Aegi数据绑定、支持RESTful services、支持WS-*Apache协议、代码实现简洁。Apache Axis2Apache Axis1的第二代产品,架构上也非常不错,关键特性:支持各种规范、可插拔模块化设计、支持热部署等。与CXF相比性能也非常优异。

在服务端框架确定的场景下,最好是采用该框架生成客户端代码,这样配合性能可达到更佳。在实际的项目中,开发者在选择具体那个框架时,仍还需综合评估框架的开发组织、产品路线图、文档化程度、应用广泛度、与优异框架的集成度、灵活和扩展性等因素。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读