JAX-RPC vs JAX-WS(二):用JAX-WS 2.0实现高性能的Web服务

news/2024/7/4 15:00:05
    面向服务的架构(SOA)能够使多个遗留系统或者是新的软件产品作为一个服务,对外通过Internet连接整合起来,实现服务与服务的相互通讯。Web服务技术是SOA实现的一个基础,它包含了不同的业务实体之间的复杂事务处理。XML 处理,作为Web服务技术的核心组件,包括有SOAP处理(processing),XML绑定(binding),还有XML解析。对于想要获得更好的性能的Web服务来说,理解WSDL( Web Services Description Language)的各种特点是很重要的。
   这篇文章展示了怎样使用 Java API for XML Web Services (JAX-WS) 2.0 来实现高性能的Web服务,并且提供了和 Java API for XML-Based RPC (JAX-RPC) 1.1 一些特性及性能上的比较。这篇文章的中的性能数据将会帮助你设计一个高性能的Web服务。
 
Web Services Stack Overview
   Sun的Web服务的最初实现叫做JAX-RPC 1.1(JSR 101)。这是一个基于标准的实现,但是绑定及解析层在底层上的实现也是私有的。另外,JAX-RPC 1.1没有完全包含schema规范。
   Sun的Web服务堆栈的最新版本,JAX-WS 2.0(JSR 224),完全是基于标准的。甚至是绑定层,JAXB(JSR 222, Java Architecture for XML Binding),还有解析层( parsing layer),StAX(JSR 173, Streaming API for XML)都是基于标准的并且也100%支持schema规范。

  

1 : web 服务堆栈
图1代表了JAX-RPC和JAX-WS实现。JAX-WS的优点是减轻了开发的任务并且拥有了高的性能。因为JAXB跟StAX性能上的改善,JAX-WS堆栈的性能也随着提升了。由于这种原因,JAX-WS堆栈被称为是集成堆栈( integrated stack)。
Web Services Performance
理解Web服务的性能是很重要的,因为它允许了开发人员为了性能及可测量性( performance and scalability.)设计并实现有效率的企业级Web服务。你可以用两种方式来测量Web服务的性能,这取决于你的开发模型: 端对端性能( end-to-end performance )和端点性能( endpoint performance )。
end-to-end performance
如果一个Web服务开发包括了客户端和服务器端的堆栈,那么性能测试上的测量将包括两个组件。这需要一个胖客户端,它测试了客户端的Web服务堆栈。图 2说明了端对端的性能,在这里客户端驱动使用了一个胖客户端Web服务堆栈来发送和接受SOAP请求。
2 : 在端对端性能上, 一个客户端驱动程序使用了一个胖客户端 Web 服务堆栈来发送和接受 SOAP 请求
Endpoint performance
在这种情况下,唯一的关注点是端点(endpoint),也就是服务器端的性能。对于这样测量来说,你可以使用一个由HTTP驱动的瘦客户端。图 3说明了端点性能,在这里客户端使用了薄的HTTP驱动来发送和接收SOAP请求。
3 : 在端点性能上, 客户端使用了薄的 HTTP 驱动来发送和接收 SOAP 请求
这篇文章关注的性能数据是针对端对端性能的,只是附带说明了一下端点性能。
 
The WSTest Benchmark
这篇文章使用WSTest  benchmark来测量JAX-RPC和JAX-WS性能。WSTest是一个SUN公司开发的小型的benchmark (https://wstest.dev.java.net/),用来测量基于Java技术的Web服务堆栈。WSTest被设计来模仿现实世界的Web服务处理。典型地,任何一个Web服务应用程序需要一个容器来运行。WSTest可以被部署在 GlassFish或 Tomcat. 这个benchmark 具有很高的可配置性来满足现实世界的模仿的需要,比如说很多的客户端,还有测试用例,混合web服务处理的百分比(比如说你想要一个特殊的用例被运行的时间的百分比),等等。
 
Performance Measurements
这个部分讨论简单类型性能,简单数组性能,有效载荷性能和在web服务中的绑定性能。
简单类型比如说int,short,long,float和其它的为实现一个有效的web服务奠定了最基础的构建块。任何复杂的业务结构最终都要涉及到单独的基本类型的组成。这部分比较了各种简单类型的性能上的比较,为选择一个合适的服务栈给你提供一些信息。
考虑下面 WSDL Sample 1.所示的WSDL例子
WSDL Sample 1
...
   
   
WSDL Sample 1展示了整数类型在客户和服务器端的来回回显。Code Sample 1显示了对应的web服务实现代码。
Code Sample 1
public int echoInt(int params)
{
      return params;
}
 同样地,在WSDL中改变不同的基本类型会产生相应的web服务实现代码。表1比较了基于JAX-RPC1.1和JAX-WS 2.0,使用用Java技术的基本类型以及在WSDL中定义的对应的XSD基本类型:
表1
XSD Type
JAX-RPC 1.1
JAX-WS 2.0
xsd:boolean
boolean
boolean
xsd:short
short
short
xsd:int
int
int
xsd:long
long
long
xsd:integer
BigInteger
BigInteger
xsd:float
float
float
xsd:double
double
double
xsd:decimal
BigDecimal
BigDecimal
xsd:date
Java.util.calendar
Javax.xml.datatype.XMLGregorianCalendar
xsd:time
Java.util.calendar
Javax.xml.datatype.XMLGregorianCalendar
xsd:datetime
Java.util.calendar
Javax.xml.datatype.XMLGregorianCalendar
 

图 4中的图表表示了XSD基本类型的性能对比。X轴指示的是XSD基本类型,比如说boolean,short,等等。Y轴指示了吞吐量,每秒钟的处理事务。
 
4 : XSD 基本类型性能
注意当选择boolean,short,int,long,integer;float,double,decimal或者date,time,datetime类型时在性能上都差不多。但是scale/precision set――比如说对于float,double,还有decimal的小数点后位数的个数能够影响序列化,反序列化,还有有效载荷的代价,所有的这些会对性能有直接的影响。同样地,最好是使用xsd:decimal/BigDecimal类型来避免为完成所有的金钱计算的数值。(Also, it is best to use the xsd:decimal/BigDecimal type to avoid rounding off decimal values for all monetary calculations.)
图 4中的图表暗示了当不强调绑定层时所有的基本类型都表现出了同样的性能。
 
(未完待续)



http://www.niftyadmin.cn/n/3651867.html

相关文章

【OSPF】【开篇大吉】

最近换了工作,发现好多知识都不了解,先从OSPF开始吧,每天学习一点点,记录OSPF的学习过程

利用EasyRTSTClient推海康视频流到EasyDarwin

一切都是为了好玩而已 因为前面花了点时间研究了一下EasyDarwin的相关数据结构和流传输的方式,所以,后面做起事情来就方便多了,但也还是有很多不清楚的地方,不过,这并不影响我的使用。 准备工具: &#xf…

JAX-RPC vs JAX-WS(二):用JAX-WS 2.0实现高性能的Web服务(续)

Primitive Array Performance就像你在基本类型的例子中所注意到的,那个例子并没有强调绑定层。如果你来回发送的只是基本类型的数据,那么基本类型的性能就被容器的性能隐藏了,比如说连接方面的处理,任务时序的安排,等等…

能强注塑

能强注塑 点击打开链接

JAX-RPC vs JAX-WS(一)简介

JAX-RPC vs JAX-WSIntroduction原文链接:http://www-128.ibm.com/developerworks/webservices/library/ws-tip-jaxwsrpc.htmlJAX-WS 2.0是JAX-RPC 1.1的后续版本。这篇文章介绍一系列这两种编程模型的对比:介绍Web服务已经出现了好长一段时间了。首先有的…

架构师之路

架构师(Architecture)是目前很多软件企业最急需的人才,也是一个软件企业中薪水最高的技术人才。换句话说,架构师是企业的人力资本,与人力资源相比其能够通过架构、创新使企业获得新的产品、新的市场和新的技术体系。那…

理解web服务模式(一):应该采用哪一种 WSDL样式?

RPC/编码、RPC/文字、文档/文字?应该采用哪一种?WSDL 绑定样式可以是RPC 样式或文档样式。用法可以是编码的,也可以是文字的。您如何决定使用哪一种样式/用法的组合呢?本文将帮助您解决这个问题。Web 服务是通过WSDL 文档来描述的…

软件设计模式的非软件例子(二)

结构性模式--处理类与对象的组合作者总结了七个结构型模式,这些模式的例子可以在工具、住宅配线、数学、节日传统、零售目录和银行业中找到。适配器(Adapter)举例适配器模式允许将一个类的接口转换成客户期望的另一个接…