转自【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.


良好的扩展性。

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 {

  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端分别採用: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

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

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

762.2

1340.6

451.6

10次中的初次调用值

546.4

568.8

484.2

434.8

987.4

281.4

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

4.467

7.333

远程測试结果(单位:ms)

client初始化

672.8

axis1

421.6

10次中的初次调用值

645.8

684.4

427.8

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框架性能对照的更多相关文章

  1. 几种流行Webservice框架性能对比

    1      摘要 开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有30多种,这对于开发者如何选择带来一定的疑惑.性能Webservice的关键要素,不同的框架性 ...

  2. 几种流行Webservice框架性能对比(转载)

    1摘要 开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有很多种,这对于开发者如何选择带来一定的疑惑.性能Webservice的关键要素,不同的框架性能上存在较大差 ...

  3. 几种流行Webservice框架

    一. 几个比较流行的Webservice框架: Apache Axis1.Apache Axis2.Codehaus XFire.Apache CXF.Apache Wink.Jboss  RESTE ...

  4. 几种流行Webservice控制框架

     转会[http://blog.csdn.net/thunder4393/article/details/5787121],写的非常好,以收藏. 1      摘要 开发webservice应用程序中 ...

  5. 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较

    几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较 来源   XFire VS Axis XFire是与Axis2 并列的新一代WebService平台.之所 ...

  6. PHP5.5四种序列化性能对照

    json_encode,serialize,igbinary,msgpack四种序列化方式,在之前已经有过相关的測试,PHP5.5这方面的測试临时没有,这次測试基于PHP5.5,而且測试用例,http ...

  7. WebService—规范介绍和几种实现WebService的框架介绍

    一.关于SOA(面向服务架构)思想   1.关于协议   2.SOA 的诞生 SOA(Service-Oriented Architecture)面向服务架构是一种思想,它将应用程序的不同功能单元通过 ...

  8. OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测

    文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 网页性能是一个丰富且又复杂的话题.在本帖中,我们会将讨论的范围局限在前端 JavaScript 框架上,探究相对于另外一种框架而言 ...

  9. 【转】10种简单的Java性能优化

    10种简单的Java性能优化 2015/06/23 | 分类: 基础技术 | 14 条评论 | 标签: 性能优化 分享到: 本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加 ...

随机推荐

  1. 用Apache Kafka构建流数据平台的建议

    在<流数据平台构建实战指南>第一部分中,Confluent联合创始人Jay Kreps介绍了如何构建一个公司范围的实时流数据中心.InfoQ前期对此进行过报道.本文是根据第二部分整理而成. ...

  2. HTTP协议中的长连接和短连接(keep-alive状态)

    什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待在同 ...

  3. 关于ThinkPHP中Session不能夸模块/控制器使用的问题-网上的答案我做个补充

    1,确保c:/windows目录下有php.ini文件2,修改php.ini中的session.auto_start = 0 为 session.auto_start = 1  //设置自动开启ses ...

  4. 《Python CookBook2》 第一章 文本 - 去字符串两端的空格 && 合并字符串 && 将字符串逐字符或者逐词反转

    去字符串两端的空格 任务: 获得一个开头和末尾都没有多余空格的字符串. 解决方案: 字符串对象的lstrip.rstrip和strip 方法正是为这种任务而设计的.这几个方法都不需要参数,它们会直接返 ...

  5. 如何设置适当的ramp-up period值

    如何设置适当的值并不轻易. 首先,假如要使用大量线程的话,ramp-up period 一般不要设置成零. 因为假如设置成零,Jmeter将会在测试的开始就建立全部线程并立即发送访问请求, 这样一来就 ...

  6. 【原】Storm 入门教程目录

    Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...

  7. Django学习系列之Form基础

     Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  8. 三、python高级特性(切片、迭代、列表生成器、生成器)

    1.python高级特性 1.1切片 list列表 L=['Mli','add','sal','saoo','Lkkl'] L[0:3]  #即为['Mli','add','sal']  从索引0开始 ...

  9. arduino图形化编程——ardublock

    下载地址:http://sourceforge.net/projects/ardublock/ 项目主页:https://github.com/taweili/ardublock 运行效果图 ardu ...

  10. 第二百四十天 how can I 坚持

    在家待了一天,晚上出去买了个帽子,还有买了点排骨炖着吃了... 玩了好多局游戏. 想搞个直播,不知道能不能玩的起来. 水平太菜了,明天去小米之家玩玩. 睡觉.