Web services web服务中的序列化成本
我的下一个项目涉及在企业框架内创建数据API。这些数据将被运行在不同软件平台上的多个应用程序使用。虽然我的同事们普遍支持SOAP,但我希望使用RESTful体系结构 大多数应用程序在每次调用时只需要几个对象。然而,其他应用程序有时需要进行几个连续调用,每个调用涉及数千条记录。我关心表现。序列化/反序列化和网络使用是我害怕发现瓶颈的地方。如果每个请求都有很大的延迟,那么企业的所有应用程序都将变得迟钝 我的恐惧现实吗?将序列化为XML或JSON等海量格式会是一个问题吗?还有其他选择吗 在过去,为了提高性能,我们不得不使用“更平坦”/更精简的文件格式(如CSV)进行这些大型数据传输。我希望如何使用web服务实现所需的性能Web services web服务中的序列化成本,web-services,rest,soap,large-data-volumes,Web Services,Rest,Soap,Large Data Volumes,我的下一个项目涉及在企业框架内创建数据API。这些数据将被运行在不同软件平台上的多个应用程序使用。虽然我的同事们普遍支持SOAP,但我希望使用RESTful体系结构 大多数应用程序在每次调用时只需要几个对象。然而,其他应用程序有时需要进行几个连续调用,每个调用涉及数千条记录。我关心表现。序列化/反序列化和网络使用是我害怕发现瓶颈的地方。如果每个请求都有很大的延迟,那么企业的所有应用程序都将变得迟钝 我的恐惧现实吗?将序列化为XML或JSON等海量格式会是一个问题吗?还有其他选择吗 在过去,为了提
虽然我更喜欢针对REST的回复,但我也很想听听SOAP用户可能会如何处理这个问题。REST的一个优点是,您可以自由使用任何您喜欢的媒体类型。为什么不继续使用text/csv?您还可以启用HTTP压缩以进一步减少带宽消耗
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的理解与现实相去甚远。我可以向你保证,你认为是什么,它不是。虽然我认为曼纽尔的回答更直接地回答了这个问题,但我真的很喜欢你的建议,并正在考虑实施它。谢谢