Java Web服务: WS-Security的大开销

WS-Security 以现有的密码学以及 XML 加密和签名行业标准为基础,为 Web 服务应用程序提供了一组全面的安全特性,您可以通过 WS-Policy 和 WS-SecurityPolicy 来指定特定应用程序可以使用哪些特性,从而允许服务客户机自行配置以访问服务。通过跨多个平台和 Web 服务框架对这些标准的广泛支持,可以实现出色的互操作性(并且会不断改善)。

尽管能带来这么多好处,但 WS-Security 也存在一些缺点。在本 系列 的前两篇文章中,您已经知道 WS-Security 的配置有时会非常复杂,并且有时会在交换的消息中添加许多块(bulk)。那么,WS-Security 带来的收益在什么情况下才物有所值呢?在本文中,我们将深入探讨 WS-Security 以及相关 WS-SecureConversation 的运行时成本(在处理开销和添加块方面),并引申到如何应用 WS-Security 才能让应用程序受益的话题。

观察性能

为了测量应用程序在不同配置下的性能,本文将测定当客户机和服务器运行于同一系统中特定请求序列的执行时间。这种方法存在一些缺点 — 最显著的是,它将客户机和服务器处理开销结合在一起,因此不能单独测算它们 — 但它比在网络上运行测试能生成更加一致的结果。您还可以轻松地在自己的硬件和 JVM 上试运行这些测试,相关的实现代码请参见 下载。

性能测试应用程序

用于测试的应用程序是一个地震数据检索服务。它基于一个地震数据库,其中包含一段时间内世界各地发生的 93,000 多次地震的实际数据。对服务的请求将指定经度、纬度、日期或震级的范围,并且服务将按地区和时间顺序分组返回所有匹配的地震。整个数据库按索引保存在内存中,以便于快速处理请求,因此每条请求几乎所有的处理时间都花在实际的 Web 服务处理代码上(包括将转换为 XML 或从 XML 转换而来的数据绑定代码)。

清单 1 展示了一个对服务的示例请求,以及随后的响应(为适应页面宽度重新调整了格式):

清单 1. 示例请求和响应

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
   <ns1:matchQuakes xmlns:ns1="http://ws.sosnoski.com/seismic/types">
    <ns1:min-date>2001-08-08T16:31:05.752+00:00</ns1:min-date>
    <ns1:max-date>2001-08-14T23:51:31.499+00:00</ns1:max-date>
    <ns1:min-long>160.4685</ns1:min-long>
    <ns1:max-long>178.19693</ns1:max-long>
    <ns1:min-lat>-42.423557</ns1:min-lat>
    <ns1:max-lat>-30.44976</ns1:max-lat>
   </ns1:matchQuakes>
  </soapenv:Body>
</soapenv:Envelope>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
   <ns1:results xmlns:ns1="http://ws.sosnoski.com/seismic/types" count="9">
    <ns1:result-set>
     <ns1:area-name>New Zealand Region</ns1:area-name>
     <ns1:regions count="0">
      <ns1:region ident="rgn159" index="159">NORTH ISLAND,
        NEW ZEALAND</ns1:region>
      <ns1:region ident="rgn160" index="160">OFF E. COAST OF N. ISLAND,
        N.Z.</ns1:region>
     </ns1:regions>
     <ns1:quakes count="9">
      <ns1:quake time="2001-08-11T09:52:54.000+00:00" millis="1000"
        latitude="-37.6499" longitude="177.74" depth="83.0" magnitude="4.4"
        method="ML" region="rgn160"/>
      <ns1:quake time="2001-08-11T09:52:55.000+00:00" millis="0"
        latitude="-37.71" longitude="177.77" depth="70.0" magnitude="4.5"
        method="ML" region="rgn160"/>
      <ns1:quake time="2001-08-11T15:02:47.000+00:00" millis="5600"
        latitude="-38.0429" longitude="175.632" depth="299.8" magnitude="4.6"
        method="ML" region="rgn159"/>
      <ns1:quake time="2001-08-12T07:42:41.000+00:00" millis="7000"
        latitude="-37.97" longitude="175.97" depth="289.0" magnitude="4.3"
        method="MB" region="rgn159"/>
      <ns1:quake time="2001-08-12T22:37:58.000+00:00" millis="5600"
        latitude="-38.3839" longitude="176.121" depth="163.2" magnitude="4.0"
        method="ML" region="rgn159"/>
      <ns1:quake time="2001-08-12T23:25:09.000+00:00" millis="6700"
        latitude="-39.9559" longitude="176.115" depth="76.0" magnitude="4.0"
        method="ML" region="rgn159"/>
      <ns1:quake time="2001-08-13T05:10:07.000+00:00" millis="4300"
        latitude="-37.5859" longitude="176.651" depth="189.0" magnitude="4.3"
        method="ML" region="rgn159"/>
      <ns1:quake time="2001-08-14T02:43:18.000+00:00" millis="2900"
        latitude="-38.3699" longitude="175.902" depth="193.4" magnitude="4.5"
        method="ML" region="rgn159"/>
      <ns1:quake time="2001-08-14T18:02:35.000+00:00" millis="5400"
        latitude="-37.8159" longitude="176.375" depth="193.3" magnitude="4.5"
        method="ML" region="rgn159"/>
     </ns1:quakes>
    </ns1:result-set>
   </ns1:results>
  </soapenv:Body>
</soapenv:Envelope>

在测试中,客户机将查询范围调整为整体地震数据集的一部分,并生成一系列伪随机请求。每次使用相同输入参数运行客户机所生成的请求序列都是相同的,这允许我们测试不同的 Web 服务配置。通过更改客户机的输入参数(用于更改请求所使用的查询范围),可以轻松地测试不同的结果消息大小。

时间: 2024-12-31 10:45:32

Java Web服务: WS-Security的大开销的相关文章

Java Web服务: CXF性能比较

简介:Apache CXF 与 Apache Axis2 及 Metro 共享一些底层组件,但在完全不同的架构中结合了这 些组合.Dennis Sosnoski 将继续他的 Java Web 服务 专栏,比较 CXF.Metro 和 Axis2 栈在有无 WS -Security 的情况下的性能表现. Apache CXF Web 服务栈建立在与本系列早期文章讨论的 Apache Axis2 及 Metro 栈相同的一些技术 的基础之上.与 Axis2 类似,它使用 Apache WSS4J W

Java Web服务: WS-SecureConversation性能

看看 Web 服务栈 WS-SecureConversation 性能相比较有何不同 简介:WS-SecureConversation 能让您保证正在进行的 Web 服务消息交换的安全,同时花费比普通 WS-Security 更少的处理开销.在本文中,您将学习如何配置 WS-SecureConversation 并将其用于三个 主要的开源 Java Web 服务栈:Apache Axis2.Metro 和 Apache CXF.还将看到这三个栈的 WS -SecureConversation 性

实例jie如何提高Java Web 服务性能优化实践

本文介绍如何提升 Java Web 服务性能,主要介绍了三种方法:一是采用 Web 服务的异步调用,二是引入 Web 服务批处理模式,三是压缩 SOAP 消息.重点介绍在编程过程中如何使用异步 Web 服务以及异步调用和同步调用的差异点.本文还示范了如何在项目中使用以上三种方法,以及各种方法所适合的应用场景. Java Web 服务简介 Web 服务是一种面向服务架构的技术,通过标准的 Web 协议提供服务,目的是保证不同平台的应用服务可以互操作.Web 服务(Web Service)是基于 X

Java Web服务: WS-Trust和WS-SecureConversation

了解 WS-SecureConversation 如何能改善 Web 服务的安全性能 简介:WS-Security 为 SOAP 消息交换添加了企业级的安全特性,但却有大量的性能损失.WS-Trust 构建于 WS-Security 基础上,提供了一种交换安全令牌的方式,WS-SecureConversation 构建于 WS-Security 和 WS-Trust 基础上,改善了进行中的消息交换的性能.Dennis Sosnoski 将继续他的 Java Web 服务 专栏系列,本期文章将介绍

Java Web服务,第3部分: Axis2数据绑定

相关文章: Java Web服务,第1部分: Java Web服务在未来一年内的发展 Java Web服务,第2部分: 深度探索Axis2:AXIOM Apache Axis2 Web 服务框架一开始就设计用于支持多种 XML 数据绑定方法.当前的版本 提供对 XMLBeans 和 JiBX 数据绑定以及专门针对 Axis2 开发的自定义 Axis 数据绑定 (Axis Data Binding,ADB)的全面支持.本文将说明如何将这些不同的数据绑定方法与 Axis2 结合使用,并说明为什么可能

Java Web服务,第1部分: Java Web服务在未来一年内的发展

2006 年将是 Web 服务(特别是 Java Web 服务)发展标志性的一年.新的第三代框架即将撩开面纱,这些框架将为 doc/lit SOAP 提供更好的支持,并能带来潜在的性能提高.同时,第四代 WS-* 标准也最终开始形成一组可互操作的层,对 SOAP 和 WSDL 进行扩展,以支持核心企业需求. 这篇文章是我的 Java Web 系列的第 1 部分,我将讨论以下 Web 服务目前的状态和在 2006 年即将发生的主要变化,并将简单说明新框架和技术如何相关和交互.后续文章将深入讨论其中

部署Java Web服务

引言 在过去数年里,随着万维网联盟(World Wide Web Consortium,W3C)更新了核心规范,并引入了弥补 Web服务最初缺陷的新规范,Web服务发生了大量的变化.W3C 的Web Services Activity 小组所维护的规范以独立于供应商的方式将 Web服务作为一组 XML 规范进行处理. 同时,Java Community Process (JCP) 也在维护自己的规范集,以将 W3C 的建议合并到 Java 语言中.Java APIs for XML(JAX-RP

Java Web 服务: 比较 Metro 与 Axis2 性能

Metro Web 服务堆栈是基于 JAXB 2.x 数据绑定和 JAX-WS 2.x Web 服务标准的参考实现,但它使用额外的组件来提供由 JAX-WS 定义的基本支持以外的特性.WS-Security 与其他 SOAP 扩展技术由 Web Services Interoperability Technologies (WSIT) 项目实施,实际的 WS-Security 处理由另一个附加组件实现:XML and WebServices Security Project (XWSS). 关于

Java Web服务: Metro简介

Metro Web 服务栈是由 Sun Microsystems 开发的一个开源工具.它将 JAXB 2.x 数据绑定和 JAX-WS 2.x Web 服务标准的参考实现与其他与 XML 相关的 Java 标准相结合.Metro 还包括一些附加组件,以 支持基本 JAX-WS 服务的定义和使用以及 SOAP 消息交换的各种 WS-* 扩展. Metro 既可以用作独立的 Web 服务栈,也可以用作开源 Glassfish 应用服务器中的集成组件.如果 使用 Glassfish,尤其是在拥有配置基