几种流行Webservice框架性能对比
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 Axis1Axis本质上就是一个SOAP引擎(Apache Axis is an implementation of the SOAP),提供创建服务器端、客户端和网关SOAP操作的基本框架。但Axis并不完全是一个SOAP引擎,它还包括: l??是一个独立的SOAP服务器。 l??是一个嵌入Servlet引擎(例如Tomcat)的服务器。 l??支持WSDL。 l??提供转化WSDL为Java类的工具。 l??提供例子程序。 l??提供TCP/IP数据包监视工具。 2.2??????Apache Axis2Apache 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.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. l??良好的扩展性。 2.3??????Codehaus XFireXFire核心是一个轻量的基于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,51)">l??可嵌入的和直观的API l??支持Spring,Pico,Plexus,and Loom l??支持JBI l??客户端和服务端stub代码生成 l??支持JAX-WS early access 2.4??????Apache CXFApache 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??容易使用。CXF设计的简洁和直观,具有简洁APIs迅速的构建基于代码的服务,Maven插件使得工具集成更加容易、JAX-WS API支持、Spring 2.x XML使得配置更加容易。 l??支持二进制和遗留协议。CXF被设计为可插拔的架构,在不同的传输协议结合下,不仅支持XML,也支持非XML类型绑定,例如:JSON和CORBA。 3??????测试准备表格?1测试基本元素
? ?
4??????性能测试4.1??????测试方法本次假定在相同网络、主机环境条件下进行测试,因此性能的差别主要是由不同框架实现机制的所决定。 l??采用两种方式测试:本机测试、远程测试。 l??服务器端分别采用:axis1、axis2、xfire、CXF,对于选定的服务器端,用不同框架对应的工具包wsdl生成客户端stub代码进行测试。 l??服务端接口内部没有复杂业务逻辑,客户端调用时,仅仅返回一个字符串。 l??每次运行,采用java循环方式调用10次服务端接口,并记录下从发起到返回结果的时间。 4.2??????测试结果限于篇幅,本文仅提供了:以CXF框架为服务端的详细测试结果,及其各个框架的综合后测试结果。 表格?3以CXF作为服务端测试详细结果
表格?4不同框架本机和远程测试结果
? 4.3??????结果分析从数据可以看出,有下面几个特点: l??客户端初次调用,初始化客户端stub对象时,大约在:600ms~2500ms。由于需要建立网络连接,初始化java相关对象,因此耗时较长。 l??客户端初始化stub后,接口初次调用,大约在:400ms~1000ms。相比后续的接口调用时间最长。 l??在第一次调用完毕后,随后的调用中,性能都明显提升。大约在:7ms~30ms。 l??本机测试与远程测试,性能上差距很微小,在高速的局域网内,性能差别几乎可以忽略。 l??在相同的服务端下,采用不同框架生成的stub代码调用时,时间上也存在一定的差异。 实际应用中,接口的调用都是在网络的不同的机器之间进行,本文也重点关注远程调用测试结果,在测试结果比较上,可以看出: l??最优组合是最差组合性能的5倍多。 n??最优的组合为:cxf客户端+ cxf服务端,6ms左右。 n??最差的组合为:axis1客户端+ axis1服务端,32ms左右。 l??CXF作为服务端,对于不同的客户端调用时,性能最佳。 5??????结束语本文对几种流行webservice框架的性能的实际测试,对开发者选择框架时提供了一个关于性能方面参考。Apache CXF是Codehaus XFire?的第二代产品,目前在不同框架中性能最佳,应该是开发者不错的选择,这与它本身的架构设计不无关系。相比其他框架,CXF具有几个突出的特性:支持JAX-WS、Spring集成、Aegi数据绑定、支持RESTful services、支持WS-*、Apache协议、代码实现简洁。Apache Axis2是Apache Axis1的第二代产品,架构上也非常不错,关键特性:支持各种规范、可插拔模块化设计、支持热部署等。与CXF相比性能也非常优异。 在服务端框架确定的场景下,最好是采用该框架生成客户端代码,这样配合性能可达到更佳。在实际的项目中,开发者在选择具体那个框架时,仍还需综合评估框架的开发组织、产品路线图、文档化程度、应用广泛度、与优异框架的集成度、灵活和扩展性等因素。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |