`

几种流行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相比性能也非常优异。

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

分享到:
评论

相关推荐

    流行Webservice框架性能测试与对比研究

    内容概要:文章介绍了几种流行的Webservice框架—— Apache Axis1/Apache Axis2/Codehaus XFire/Apache CXF,并对其性能进行了对比测试和分析。采用了JAVA作为测试语言并在本地和远程环境中进行测试,最终发现Apache...

    PowerBuilder+webservice源代码

    ,只要代码写的可以的话,在INTERNET上跑,感觉还是不错的,特别是WEBSERVICE+CS框架的二合一,更有效的决绝了对高性能要求; 我觉得基于pb11的最好的web解决方案是: pb程序(webservice)+IIS for .net框架 +客户端...

    webservice接口测试代码

    Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同系统之间进行数据交换。在本场景中,"webservice接口测试代码"指的是利用编程语言编写代码来验证WebService接口的功能是否正常运行。测试是...

    webservice数据传输方式Xfire

    在描述中提到了Xfire与Axis的性能对比:“运行速度比Axis要快一到两倍”。这主要是因为Xfire的设计更注重性能优化,它避免了Axis中的一些开销,如动态代理和反射调用,转而采用直接编译的代码来执行服务。此外,...

    Flex 连接后台Java的几种方法选择

    Flex 连接后台 Java 的几种方法选择 Flex 是一种基于 Adobe Flash 平台的 Rich Internet Application(RIA)开发技术,Java 是一种流行的服务器端编程语言。连接 Flex 和 Java 后台是构建 RIA 应用程序的关键步骤。...

    Java框架面试题总结

    spring中读取xml配置文件、获取bean的几种方式** - 通过`ApplicationContext`接口的`newClassPathXmlApplicationContext(String[] configLocations)`方法加载配置文件。 - 使用`BeanFactory`的`new XmlBeanFactory...

    webservice经典资料

    本压缩包文件“webservice”很可能包含了关于Web服务的经典学习资料,这些资料可能涵盖以下几个关键知识点: 1. **Web服务基础**:讲解Web服务的基本概念,包括什么是Web服务,其工作原理,以及它在分布式系统中的...

    第十五章 开发XFire Web Service应用.pdf

    从技术角度来看,WebService主要依靠以下几种关键技术: 1. **XML(Extensible Markup Language)**:用于数据编码和交换的标准格式。 2. **SOAP(Simple Object Access Protocol)**:一种轻量级的协议,用于在...

    自整理Java关于基础和框架的面试题

    ##### 解析xml文件的几种技术 - **DOM**:文档对象模型,将整个文档加载到内存中。 - **SAX**:简单API,逐行读取文档。 - **StAX**:流式API,用于大型文档。 ##### 项目的生命周期 - **启动**、**计划**、**执行*...

    ASP.NET 入门经典 pdf

    - 解释了ServerControl的概念,并介绍了几种常用的服务器端控件。 4. **使用HTMLServerControl** - 比较了HTMLServerControl与标准ServerControl的区别。 5. **WebForm事件模型** - 分析了WebForm的事件驱动机制...

    CBX 高级程序开发手册

    下面我们将详细介绍CBX框架的几种主要应用模式。 #### 二、CBX框架的主要应用模式 ##### 1. 经典的ao与xo配合开发模式 - **特点**:利用框架服务器端的无状态对象池(pooling)和RO组件的高效数据传输能力。 - **应用...

    开源工作流的比较和描述

    本文将对几种主流的开源工作流系统进行详细介绍与对比分析。 ### 1. Shark Shark是一款基于WfMC(Work Flow Management Coalition)标准的开源工作流管理系统,支持XPDL(XML Process Definition Language)格式的...

    MapGIS-IMS7.0开发手册

    它不仅继承了MapGIS7.0的强大功能,还充分利用了.NET框架的优势,如跨平台能力、高性能和安全性等,使得开发出的应用具有更好的用户体验。 #### 二、.NET版MapGIS-IMS7.0简介 **2.1 解决方案简介** .NET版MapGIS-...

    flex 4(flash builder 4)数据绑定教程(中文版)

    本章节介绍了几种常见的方法来实现这一点: - **使用HTTPService组件**:HTTPService组件允许Flex应用程序通过HTTP协议访问远程数据。 - **使用WebService组件**:WebService组件支持SOAP协议,适用于需要跨平台互...

    asp.net专家疑难解答200问

    ASP.NET是微软公司推出的用于构建动态网站、Web应用程序和Web服务的一种强大框架。它基于.NET Framework,提供了丰富的功能和高效性能,使得开发人员能够轻松创建交互式的、数据驱动的Web应用。在“ASP.NET专家疑难...

    Flex 访问数据

    - **实现ColdFusion服务**:ColdFusion是一种流行的服务器端脚本语言,可以用来实现复杂的数据处理逻辑和服务接口。 - **实现PHP服务**:PHP是另一种广泛使用的服务器端脚本语言,特别适合于Web应用开发。通过PHP...

    最新Java面试宝典pdf版

    46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明...

Global site tag (gtag.js) - Google Analytics