收藏

几种流行Webservice 框架性能对比2018-06-25

2018-06-25  本文已影响57人  3479da3be4fa

******************************************************************************************

关注凡猫学院:加微信+17031115530,拉测试微信群交流

关注凡猫学院:加微信+17031115530,拉测试微信群交流

*******************************************************************************************

几种流行Webservice 框架性能对比

1 摘要

开发webservice 应用程序中离不开框架的支持,当open-open 网站列举的就有30 多种,这

对于开发者如何选择带来一定的疑惑。性能Webservice 的关键要素,不同的框架性能上存

在较大差异,而当前在官方网站、网络资料中可以方便的找到各自框架的介绍,但是很少有

针对不同框架性能测试数据。本文选择了比较流行几个框架:Apache Axis1、Apache Axis2、

Codehaus XFire、Apache CXF 等,采用java 作为测试用例,通过本机和远程两种进行测试

方式,对这几种框架进行了性能测试,并对测试结果分析和性能比较,最后并对性能优异的

框架进行了推荐。

关键词:Axis1、Axis2、XFire、CXF、Spring、SOAP、StAX、WSD

2 框架介绍

2.1 Apache Axis1

Axis 本质上就是一个SOAP 引擎(Apache Axis is an imp ementation of the SOAP),提供创

建服务器端、客户端和网关SOAP 操作的基本框架。但Axis 并不完全是一个SOAP 引擎,

它还包括:

是一个独立的SOAP 服务器。

是一个嵌入Serv et 引擎(例如Tomcat)的服务器。

支持WSD 。

提供转化WSD 为Java 类的工具。

提供例子程序。

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

2.2 Apache Axis2

Apache Axis2 相比Apache Axis1 更加有效、更加模块化、更加面向xm ,支持容易插件模块

扩展新功能和特性,例如安全和可靠。Apache Axis2 是基于Apache AXIOM,它是一个高性

能、pu -based XM 对象模型。Apache Axis2 的关键特性:

解析xm 更快。采用自己的对象模型和StAX (Streaming API for XM )。

更低的内存占用。

支持热部署。新服务加入到系统,无需重启服务。

微信+17031115530,拉测试微信群交流

支持异步webservice、

MEP 支持,灵活支持在WSD 2.0 定义的Message Exchange Patterns (MEPs)

更加灵活。引擎给开发人员提供了充足的自由度可扩展客户头信息处理、系统管理、

更加稳定性。

传输框架不依赖于具体协议。为集成和传输协议(SMTP, FTP, message-oriented midd eware,

etc)有一个简单和抽象,引擎核心是完全独立于具体的传输协议。

支持WSD 。支持WSD 1.1、WSD 2.0。

方便集成其他组件(Add-ons)。几个web services 已经被集成,包括:WSS4J for security

(Apache Rampart),Sandesha for re iab e messaging, Kandu a which is an encapsu ation of

WS-Coordination, WS-AtomicTransaction and WS-BusinessActivity.

良好的扩展性。

2.3 Codehaus XFire

XFire 核心是一个轻量的基于STAX 消息处理模型,用来与SOAP 消息交互,它支持不同类

型的绑定机制、容器和传输协议。

支持webservice 标准- SOAP, WSD , WS-I Basic Profi e, WS-Addressing, WS-Security, etc.

高性能SOAP STACK

可插拔绑定POJOs, XM Beans, JAXB 1.1, JAXB 2.0, and Castor support

通过Java1.5 和1.4(Commons attributes JSR 181 syntax)使用JSR 181 API 配置服务

支持多中传输协议- HTTP, JMS, XMPP, In-JVM, etc.

可嵌入的和直观的API

支持Spring, Pico, P exus, and oom

支持JBI

客户端和服务端stub 代码生成

支持JAX-WS ear y access

2.4 Apache CXF

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

JAX-RS,主要特性包括:

支持Web services 标准。包括:SOAP、the WSI Basic Profi e、WSD 、WS-Addressing、

WS-Po icy、WS-Re iab eMessaging、WS-Security、WS-SecureConversation 和WS-SecurityPo

icy.

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

容易使用。CXF 设计的简洁和直观,具有简洁APIs 迅速的构建基于代码的服务,Maven

插件使得工具集成更加容易、JAX-WS API 支持、Spring 2.x XM 使得配置更加容易。

支持二进制和遗留协议。CXF 被设计为可插拔的架构,在不同的传输协议结合下,不仅

支持XM ,也支持非XM 类型绑定,例如:JSON 和CORBA。

微信+17031115530,拉测试微信群交流

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

客户端代

pub ic void testgetVersion() throws java. ang.Exception {

String ur = "http:// oca host:8081/boss/services/Ca cu ate";

// 客户端初时化时间

ong startTime = System.currentTimeMi is();

// 客户端stub 代码分别是axis1/axis2/xfire/cxf 框架wsd 2java 生成

Ca cu ateCa cu ateHttpportStub stub = new Ca cu ateCa cu ateHttpportStub(ur );

ong endTime = System.currentTimeMi is();

System.out.print n("c ient init time is: " + (endTime - startTime));

// 连续调用10 次

for (int i = 0; i < 10; i++) {

ong startTime1 = System.currentTimeMi is();

String ret = stub.getVersion().get_return();

ong endTime1 = System.currentTimeMi is();

System.out.print n("[" + i + "] e apsed time is: " + (endTime1 - startTime1) + "

ms");

System.out.print n("stub.getVersion() is: " + ret);

}

}

服务端代

pub ic String getVersion()

注:接口无任何业务逻辑,只返回一个字符串:"He o";

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

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

网内完成。

结果精度数字精确到小数点后两位

名词解释服务器端:部署到服务器的程序。

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

客户端初时化时间:发起接口调用时,初始化客户端java 对象所需时间。

例如:Ca cu ateCa cu ateHttpportStub stub = new Ca cu ateCa cu

ateHttpportStub(ur ); // 由框架wsd 2java 生成客户端stub

微信+17031115530,拉测试微信群交流

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

和接受SOAP 请求

Webservice 服务端

Webservice 客户端

Webservice stack

SOAP over HTTP

4 性能测试

4.1 测试方法

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

制的所决定。

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

服务器端分别采用:axis1、axis2、xfire、CXF,对于选定的服务器端,用不同框架对应的

工具包wsd 生成客户端stub 代码进行测试。

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

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

4.2 测试结果

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

测试结果。

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

本机测试结果(单位:ms)

cxf

客cxf axis1

微信+17031115530,拉测试微信群交流

第1

第2

第3

第4

第5

第1

第2

第3

第4

第5

2547 2594 2563 2578 2563 2569 422 422 407 406 421 415

.6

1

0

第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

1

0

0 16 16 15 0 0 0 0 16 0

1

0

32.8 32.8 32.8 31.2 31.2 32.1

6

29.7 29.7 28.2 29.7 28.2 29.

61

微信+17031115530,拉测试微信群交流

9

3.44

4

5.22

2

5.22

2

3.33

3

5.11

1

4.46

7

7 8.66

7

7 7 7 7.3

33

远程测试结果(单位: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

1

0

第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

微信+17031115530,拉测试微信群交流

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

1

0

0 0 0 0 15 31 16 15 16 15

1

0

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.44

4

7 7 6.88

9

6.88

9

6.24

4

31.2

2

10.4

4

10.3

3

10.4

4

8.66

7

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 结果分析

从数据可以看出,有下面几个特点:

客户端初次调用,初始化客户端stub 对象时,大约在:600ms~2500ms。由于需要建立网

微信+17031115530,拉测试微信群交流

络连接,初始化java 相关对象,因此耗时较长。

客户端初始化stub 后,接口初次调用,大约在:400ms~1000ms。相比后续的接口调用时

间最长。

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

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

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

实际应用中,接口的调用都是在网络的不同的机器之间进行,本文也重点关注远程调用测试

结果,在测试结果比较上,可以看出:

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

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

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

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

5 结束语

本文对几种流行webservice 框架的性能的实际测试,对开发者选择框架时提供了一个关于性

能方面参考。Apache CXF 是Codehaus XFire 的第二代产品,目前在不同框架中性能最佳,

应该是开发者不错的选择,这与它本身的架构设计不无关系。相比其他框架,CXF 具有几

个突出的特性:支持JAX-WS、Spring 集成、Aegi 数据绑定、支持RESTfu services、支持

WS-*、Apache 协议、代码实现简洁。Apache Axis2 是Apache Axis1 的第二代产品,架构上

也非常不错,关键特性:支持各种规范、可插拔模块化设计、支持热部署等。与CXF 相比

性能也非常优异。

在服务端框架确定的场景下,最好是采用该框架生成客户端代码,这样配合性能可达到更佳。

在实际的项目中,开发者在选择具体那个框架时,仍还需综合评估框架的开发组织、产品路

线图、文档化程度、应用广泛度、与优异框架的集成度、灵活和扩展性等因素。

******************************************************************************************

关注凡猫学院:加微信+17031115530,拉测试微信群交流

关注凡猫学院:加微信+17031115530,拉测试微信群交流

*******************************************************************************************

上一篇下一篇

猜你喜欢

热点阅读