Web 服务中序列化的成本

srm*_*ark 5 rest soap web-services large-data-volumes

我的下一个项目涉及在企业框架内创建数据 API。这些数据将由在不同软件平台上运行的多个应用程序消耗。虽然我的同事普遍喜欢 SOAP,但我想使用 RESTful 架构。

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

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

过去,为了提高性能,我们必须使用“更扁平”/更精简的文件格式(例如 CSV)来进行这些大型数据传输。我如何希望使用 Web 服务获得所需的性能?

虽然我更喜欢针对 REST 的回复,但我也有兴趣了解 SOAP 用户可能如何处理这个问题。

man*_*ana 1

我们提供 XML 和 JSON。您提到的渲染时间确实可能是一个问题。在服务器端,我们有 JAXB,当涉及到 marshall XML 时,其标准 sun 实现有点慢。XML 的缺点是冗长,但在互操作性方面也很好,并且具有模式 + 显式版本控制。

我们通过多种方式补偿了冗长(尤其是限制结果集):

  • 如果您有一个包含项目的容器,请在 xml 响应中提供分页(页面大小和页码,例如 /items?page=0&size=3)。客户端本身可以通过减小页面大小来减小大小。
  • 提供折叠元素,例如多个客户只对整个项目的一个数据字段感兴趣。使用参数(例如 /items?select=name)执行此操作,然后只有嵌套元素“name”包含在 item 元素的内联中。这极大地减小了尺寸。

通常赋予客户端使用结果集限制的权力。他们肯定会使用它,因为它也加快了他们的响应时间:)

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