Web services web服务中的序列化成本

Web services web服务中的序列化成本,web-services,rest,soap,large-data-volumes,Web Services,Rest,Soap,Large Data Volumes,我的下一个项目涉及在企业框架内创建数据API。这些数据将被运行在不同软件平台上的多个应用程序使用。虽然我的同事们普遍支持SOAP,但我希望使用RESTful体系结构 大多数应用程序在每次调用时只需要几个对象。然而,其他应用程序有时需要进行几个连续调用,每个调用涉及数千条记录。我关心表现。序列化/反序列化和网络使用是我害怕发现瓶颈的地方。如果每个请求都有很大的延迟,那么企业的所有应用程序都将变得迟钝 我的恐惧现实吗?将序列化为XML或JSON等海量格式会是一个问题吗?还有其他选择吗 在过去,为了提

我的下一个项目涉及在企业框架内创建数据API。这些数据将被运行在不同软件平台上的多个应用程序使用。虽然我的同事们普遍支持SOAP,但我希望使用RESTful体系结构

大多数应用程序在每次调用时只需要几个对象。然而,其他应用程序有时需要进行几个连续调用,每个调用涉及数千条记录。我关心表现。序列化/反序列化和网络使用是我害怕发现瓶颈的地方。如果每个请求都有很大的延迟,那么企业的所有应用程序都将变得迟钝

我的恐惧现实吗?将序列化为XML或JSON等海量格式会是一个问题吗?还有其他选择吗

在过去,为了提高性能,我们不得不使用“更平坦”/更精简的文件格式(如CSV)进行这些大型数据传输。我希望如何使用web服务实现所需的性能


虽然我更喜欢针对REST的回复,但我也很想听听SOAP用户可能会如何处理这个问题。

REST的一个优点是,您可以自由使用任何您喜欢的媒体类型。为什么不继续使用text/csv?您还可以启用HTTP压缩以进一步减少带宽消耗


REST服务非常适合利用各种不同的数据格式。无论哪种格式最适合您的场景。

我想提供三条指导原则:

  • 一个是观察到有许多SOAP Web服务(特别是使用.NET 2.0“ASMX”技术构建的),它们发送以XML序列化的数据传输对象。当然,有许多RESTful服务发送XML或JSON。XML序列化/反序列化很少是约束因素
  • Web服务中出现瓶颈的一个常见原因是一个接口,该接口鼓励客户端应用程序通过进行数千次连续调用来获取数据(有一个术语:聊天接口)。这是您在设计Web服务接口时应该避免的,无论您决定使用哪种四个字母的首字母缩写
  • 关于REST,需要记住的一点是,它(部分)代表状态转移,这可能不适合于不希望将业务对象的状态从服务器转移到客户机应用程序的某些操作。在这些情况下,soapweb服务(如您的同事所建议的)更合适;或者可能是SOAP和REST服务的组合,其中REST服务将负责状态转移适当的操作,SOAP服务将实现操作的REST(双关语:意外:-))
    我们同时提供XML和JSON。您提到的渲染时间确实可能是一个问题。在服务器端,当涉及到marshall XML时,JAXB的标准sun实现有点慢。XML具有冗长的缺点,但在互操作性方面也很好,并且具有模式+显式版本控制

    我们通过几种方式(特别是限制结果集)对冗长进行了补偿:

    • 如果您有一个包含项目的容器,请在xml响应中提供分页(页面大小和页码,例如/items?page=0&size=3)。客户端本身可以通过减小页面大小来减小大小
    • 提供折叠元素,例如,多个客户端只对整个项目的一个数据字段感兴趣。使用参数(例如./items?select=name)执行此操作,则只有嵌套元素“name”包含在item元素的内联中。这大大减小了尺寸
    通常给客户端使用结果集的权限。他们肯定会使用它,因为它也会加快响应时间:)


    同时使用压缩,它极大地减少了冗长的XML(在我们的例子中,有效负载减少了10倍)。从客户端,您可以通过标题“Accept Encoding:gzip”来完成。如果您使用Apache,服务器配置也很简单

    @Grives先生,我认为在使用XML/JSON序列化时,由于标记的额外开销,有效负载比处理能力更重要。我很想看看其他人发表了什么。当你说有效负载时,你是指网络带宽吗?我已经更新了问题,将带宽包括在内。@Grives先生,是的,通过有效负载,我指的是带宽。正如我所说,rest和soap都允许gzip压缩(如果客户端支持它,幸运的是大多数客户端支持它),我做了一些发送xml(soap)的测试压缩,它从2mb压缩到75kb。缺点是压缩使用cpu服务器周期。我对你对“状态”的定义很感兴趣。使用RESTful web服务和SOAP服务传输对象的状态有什么不同?REST的一个缺点是,有人可以自由使用他们想要的任何媒体类型。ps:soap还允许gzip压缩。就我个人而言,我认为REST可以生成花哨的url,这对客户来说很好(如果他们真的关心的话),但对开发人员来说却是一种痛苦。@Magallans你是对的,选择是一把双刃剑,但当你明智地选择时,它是一把强大的武器。不幸的是,由于市场原因,主流对REST的理解与现实相去甚远。我可以向你保证,你认为是什么,它不是。虽然我认为曼纽尔的回答更直接地回答了这个问题,但我真的很喜欢你的建议,并正在考虑实施它。谢谢