`

Java Web服务: CXF性能比较

    博客分类:
  • CXF
web 
阅读更多
转载:http://gocom.cc/knowledge/soa/standard/2386.html

   Apache CXF Web服务栈建立在与本系列早期文章讨论的Apache Axis2及Metro栈相同的一些技术的基础之上。与Axis2类似,它使用 Apache WSS4J WS-Security 实现。与Metro类似,它主要使用 JAX-WS 2.x Web服务配置和JAXB 2.x数据绑定(甚至使用与Metro相同的JAXB实现,但两个栈的版本不同)。但是,除了这些公共组件之外,各栈之间的差异还包括它们的处理引擎和WS-SecurityPolicy配置处理。

  在本文中,您将了解CXF与Axis2及Metro最新发行版之间的性能比较。

  关于本系列Web 服务是Java技术在企业计算中的关键因素。在本系列文章中,XML和Web服务顾问Dennis Sosnoski将讨论对于使用Web服务的开发人员起到关键作用的主要框架和技术。请关注本 系列,了解该领域的最新发展以及如何使用它们来帮助您编写项目。

  性能概述

  与之前介绍Web服务性能的文章—“WS-Security的大开销” 和 “比较Metro与Axis2性能” — 相同,本文将测量当客户机与服务器在单一系统中运行时执行特定请求序列所需的时间。这种方法将多次比较Web服务处理开销,因为它可以消除网络延时和计时造成的开销。假定客户机代码没有明显慢于服务器,因此这些数据可以表示实际服务器在高负荷下的性能。

  本文还将使用与早期文章相同的测试应用程序,即一个地震数据检索服务。该服务所使用的数据库中包含全球范围多年以来内发生的超过 93,000次地震的数据。服务请求将指定时间范围和坐标范围,而服务将返回范围内的所有地震。请参阅 “WS-Security 的大开销”,了解关于测试应用程序和示例请求/响应消息对的完整信息。

  与之前的文章相同,我们将使用两组请求序列来进行性能测试。第一组使用1,000个请求,并调整查询参数以匹配整个地震数据库的小部分数据(在1,000个请求中,仅返回816个匹配的地震条目)。第二组使用100个请求,并通过调整使它匹配数据库中的较大部分内容(在100个请求中,返回176,745个匹配的地震条目)。这两个请求序列强调了 Web 服务栈的不同性能特性。第一个序列显示了栈使用少量数据处理请求的速度,而第二个序列则强调了处理数据量的速度。每个请求序列都使用不同的安全配置运行了多次,结果中仅记录各配置表现最好的数据。

  运行测试的硬件和软件条件是:Mandriva 2009.1 64位Linux系统,Athlon X2 5400+ 处理器和4GB内存,使用Sun (Oracle) Java 1.6.0_18 32-bit JVM(对于特定的堆大小来说,它的性能稍微好于64位)。服务器代码运行在Tomcat 6.0.20上,经配置将使用1024MB大小的堆,而客户机代码则使用512MB大小的堆。Web服务栈版本如下:

  CXF 2.1.7

  Metro 2.0

  Axis2 1.5.1,以及 Rampart 1.5 发行版

  如果您希望尝试在自己的机器和JVM上进行测试,那么请下载代码。

  无WS-Security的性能

  图 1 显示了Axis2、Metro和CXF未使用任何WS-Security时的测试时间。从图中可以看出,当请求较多而响应较少时,Metro的速度显著快于Axis2和CXF(大约快 25%);而当请求较少,响应较多时,其速度与Apache栈相同。(在本文的所有图中,较短的柱表示时间更短,速度更快,即性能越好。)



图 1. 无安全框架时的测试时间

  这些结果显示了一些不同于Metro 1.5和Axis2 1.5.1之间的 早期比较 的有趣的差异。时间结果说明,至少对于测试应用程序所使用的数据来说,Metro 2.0在单位请求处理方面快于Axis2和CXF。在与XML之间的数据转换方面,三个栈的运行速度基本相同。这是 Metro和CXF的预期结果,因为它们都使用JAXB参考实现来进行转换。从这些结果中可以判断, Axis2所使用的默认Axis2 Databinding Framework (ADB)绑定实现的运行速度与JAXB相当。

  使用WS-Security时的性能

  下图展示了以下安全配置的测试时间:

  plain:无安全(与 图 1 中的值相同)

  username:针对请求的WS-Security纯文本UsernameToken

  sign:主体和头部的WS-Security 签名,使用时间戳

  signencr:主体和头部的WS-Security签名,使用时间戳和主体加密

图 2 展示了1000个请求而响应较少时的测定时间:



图 2. 响应较少时的测定时间

  图 3 显示了同样1000个请求但响应较少时的相对时间(已标准化为CXF结果):



图 3. 响应较少时的标准化时间

  在本测试中的所有安全配置中,Axis2始终是速度最慢的栈。Metro始终是速度最快的,但Metro和CXF之间的性能差异将显著小于CXF和Axis2之间的性能差异:在不同配置中,Metro大约比CXF快10%,而Axis2要比CXF慢一半还多。

  图 4 显示了100个请求但响应较多时的测定测试时间:



图 4. 响应较多时的测定时间

  图 5 显示了100个请求而响应较多时的相对时间(已标准化为CXF结果):



图 5. 响应较多时的标准化时间

  在第二项测试中,Axis2仍然慢于Metro和CXF(仍然只有CXF的一半左右),并且Metro和CXF处理少量响应消息的速度则反过来了,CXF的速度要快 15%。

  CXF 2.1.7与2.1.6

  这些测试结果反映了CXF在版本2.1.6和2.1.7之间的性能得到显著改善。代码调优对此功不可没,但重要的是修复了 “通过CXF使用WS-Security” 中所讨论的问题。CXF 2.1.6未处理UsernameToken WS-SecurityPolicy配置,除非存在一个<sp:TransportBinding> 策略或某种形式的加密或签名策略。通常,使用UsernameToken时需要提供一个增加的策略 — 特别是纯文本UsernameToken,因为如果没有传输级和消息级加密,则用户名和密码在传递过程中将是可见的。但是,从策略的角度来说,使用UsernameToken是绝对高效的(与本文的username配置相同),并且为CXF 2.1.7实现的修复将处理这个问题。作为修复的一部分,CXF 2.1.7在这种特殊情况下将跳过将WS-Security处理添加到响应消息流中的步骤。

  与 CXF 2.1.6 运行的相同测试相比,在 username 配置中删除消息流中的 WS-Security 将 CXF 的总体性能提高了几个百分比。遗憾的是,版本之间的这种改善有点失真。如果 usernaeme 测试用例使用传输级或消息加密,则响应消息流中将提供 WS-Security 处理,并造成该配置的 CXF 时间结果慢很多。但未来的 CXF 版本有希望扩展策略分析,这样仅在需求时才会在请求或响应流中配置 WS-Security,从而将性能优势扩展到更广泛的用例(包括那些只需在一个方向上签名或加密的用例)。

  结束语

  根据本文报告的测试时间,Metro 2.0在基本请求/响应处理方面快于Axis2 1.5.1或CXF 2.1.7。但是,在WS-Security处理方面,Metro的 XWSS库在总体性能上则无法与Axis2和CXF所使用的WSS4J库相提并论。

  在这些结果中,最有趣的一点可能是Axis2影响。早期测试表明,Axis2在WS-Security处理上要比Metro慢很多。这些测试结果表明,差异并非归因于WS-Security实现代码,因此必然与Axis2(以及 Rampart 安全模块)处理传递给WSS4J以及从它接收到的消息的方式相关。这证实了 “比较Metro与Axis2性能” 中所讨论的结果。与其他栈相比,Axis2运行测试所需的内存也要多很多,这在signenecr配置中尤为突出(Axis2 在客户机上大约需要800MB内存;而CXF只要48MB便足矣)。这些问题加强了Axis2浪费处理时间和内存来处理不同消息表示之间的不必要转换(WS-Security处理的一部分)的早期印象。

  接受测试的栈在使用WS-Security签名和加密方面的性能开销都很大。这种开销会对使用量较大的服务带来问题。在下一篇文章中,您将了解WS-Trust和WS-SecureConversation增件技术,该技术可以在客户机广泛使用特定服务时降低WS-Security开销。
分享到:
评论

相关推荐

    Java Web Services: up and running

    7. ** Axis2, CXF, Metro**:这些都是Java Web服务的实现框架,提供工具和库来简化开发过程。它们支持JAX-WS标准,提供了额外的功能,如安全性和性能优化。 通过阅读《Java Web Services: Up and Running》,读者将...

    java+Webservice开发(CXF)

    Java WebService开发是一种将业务逻辑暴露为Web服务的技术,它使得...总的来说,Java和CXF的结合为开发高质量、高性能的Web服务提供了一个强大的平台。通过深入学习和实践,开发者可以掌握构建健壮的分布式系统的技能。

    CXF部署web服务

    CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它主要用于构建和部署Web服务。CXF提供了一种简单的方式来实现基于SOAP和RESTful风格的Web服务,并且支持多种协议,如HTTP、JMS等。下面将详细...

    最新版CXF的jar包

    Apache CXF是一个开源的Java框架,专注于简化和构建SOAP(Simple Object Access Protocol)和RESTful(Representational State Transfer)Web服务。最新版CXF的jar包对于开发基于Web的服务至关重要,特别是针对那些...

    apache-cxf-2.4.0

    Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和Web服务。CXF这个名字是“CXF = XFire + XSB”,其中XFire是早期的项目,而XSB代表XML Web Services Bus。这个版本,"apache-cxf-2.4.0...

    cxf 源码 java websevice

    Apache CXF是一个开源的Java框架,它主要用于构建和部署Web服务。CXF允许开发者通过简单的API来创建和消费Web服务,支持多种协议和标准,如SOAP、RESTful HTTP、XML以及WS-*家族标准。在“cfx源代码!”这个主题中,...

    CXF2.6.4配java1.6版完整包和使用说明

    Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)和Web服务。这个"CXF2.6.4配java1.6版完整包和使用说明"是一个针对Java 1.6版本优化的CXF 2.6.4发行包,包含了所有必要的组件和文档,让你...

    cxf-webservice

    【标题】"CXF Webservice" 是一个基于Java的开源...综上所述,这个主题涵盖了使用CXF构建Web服务的全面知识,包括与Spring的集成、服务开发流程、安全性和性能优化等方面,对于理解和实践Java Web服务开发非常有帮助。

    Java webservice cxf客户端调用demo和服务端

    CXF允许开发者使用Java编程模型来创建和消费Web服务,这包括JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。在本示例中,我们关注的是JAX-WS,它用于构建SOAP Web服务。 ...

    apache-cxf-3.1.6所有jar包

    Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)和Web服务。这个"apache-cxf-3.1.6所有jar包"的压缩文件包含了CXF 3.1.6版本的所有核心库和依赖组件。在Java Web服务开发中,CXF扮演着重要...

    apache-cxf-2.7.7.zip

    6. **强大的测试工具**:CXF提供了一套完整的测试工具,如CXF的WS-Testing框架,可以帮助开发者测试Web服务的性能、安全性和兼容性。 7. **文档生成**:CXF可以从Java接口自动生成WSDL(Web服务描述语言),也可以...

    apache-cxf-3.0.1

    Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)中的Web服务。这个"apache-cxf-3.0.1"版本是该框架的一个特定发行版,提供了最新的Web服务支持。在描述中...

    cxf-3.1.6的所需要的包

    Apache CXF是一个开源的Java框架,它用于构建和部署Web服务。CXF允许开发者通过SOAP、RESTful API、XML以及各种协议和绑定来创建服务。在这个"**cxf-3.1.6**"的压缩包中,包含了运行CXF Web服务所需的基本组件,使得...

    web service开发 cxf框架帮助文档

    4. **高性能**:CXF优化了处理速度,提供高效的Web服务实现。 5. **丰富的功能**:支持MTOM(Message Transmission Optimization Mechanism)、SwA(SwA Attachments,用于传递二进制附件)、WS-Security等高级特性...

    CXF2.7.4完整架包

    CXF2.7.4是该框架的一个特定版本,包含了完整的库和工具,适用于开发和部署基于Java的Web服务。在这个版本中,我们可以期待一些重要的功能和改进。 1. **Web服务支持**:CXF支持多种Web服务标准,包括SOAP、RESTful...

    apache-cxf-2.5.2

    Apache CXF 是一个开源的Java框架,用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)和Web服务。这个"apache-cxf-2.5.2"版本是该框架的一个特定发行版,发布于2011年,包含了CXF框架的所有组件和...

    apache-cxf4.0.1全量JAR包

    Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和Web服务。CXF这个名字是"CXF = XFire + XWS"的组合,它继承了XFire项目,并融合了XWS项目的一些特性。CXF允许开发者以Java编程语言创建...

    cxf-3.0.0 zip

    Apache CXF 是一个开源的Java框架,用于构建和开发服务导向架构(SOA)和Web服务。这个"apache-cxf-3.0.0-milestone2.zip"压缩包包含了Apache CXF 3.0.0的第二个里程碑版本,这是一个重要的中间版本,在正式发布之前...

    CXF2.2.3完整架包

    Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)和Web服务。CXF这个名字是"CXF = XFire + XWS-Spring"的组合,它继承了XFire的功能并整合了Spring框架的支持。CXF2.2.3是该框架的一个特定...

    apache-cxf-3.0.16.zip_cxf index:0_webservice

    Apache CXF 是一个开源的Java框架,用于构建和开发Web服务。这个"apache-cxf-3.0.16.zip"文件是CXF...如果你正打算涉足Web服务开发或者希望提升现有服务的性能和可靠性,那么了解并掌握Apache CXF将会是非常有价值的。

Global site tag (gtag.js) - Google Analytics