【问题标题】:Are there any performance benefits to gRPC compared to JSON over HTTP/2 other than size?与基于 HTTP/2 的 JSON 相比,gRPC 是否有任何性能优势,而不是大小?
【发布时间】:2020-06-07 21:38:02
【问题描述】:

我读到 gRPC 比传统的 HTTP API 性能更高,因为它使用协议缓冲区进行更紧凑的序列化。另一个性能声明是,与 HTTP/1.1 JSON API 不同,它支持流水线。

据我目前了解,通过单个 HTTP 连接进行多个连接的流水线化是由 HTTP/2 而不是 gRPC 完成的。那么,除了更高效的数据序列化格式之外,与基于 HTTP/2 的 JSON 相比,gRPC 是否真的有性能优势?

【问题讨论】:

    标签: performance grpc http2


    【解决方案1】:

    这里有多个方面。

    协议:HTTP/1.1 与 HTTP/2

    与 HTTP/1.1 相比,HTTP/2 有许多改进,但在某些用例中也存在缺点。一些改进的例子:

    • HTTP/2 是二进制协议,而 HTTP/1.1 是文本协议
    • HTTP/2 可以对发送到不同端点但发送到同一服务器的多个请求重用 TCP 连接。
    • HTTP/2 改进了带有HPACK 的标头压缩功能。如果您例如,这很有用。在连续的 API 请求中发送相同的 Authorization: Bearer <JWT-token>

    有效负载格式:JSON 与协议缓冲区

    这可能会影响有效负载大小,但序列化和反序列化性能可能更重要。另一个重要方面是开发人员工具和生产力。

    gRPC 使用的协议缓冲区不是唯一有效的二进制有效负载格式。有很多选择,例如FlatBuffers,一种零拷贝格式,根据协议缓冲区的经验设计。另一种二进制格式,主要用于较小的有效负载(不是序列化性能)是Avro。 Avro 格式可能有利于有效载荷格式的可演化性(参见例如Designing Data-Intensive Applications)。

    参见例如JSON vs Protocol Buffers vs FlatBuffers 进行比较。

    gRPC

    gRPC 是比纯粹使用 HTTP/2 更高的协议抽象。留给开发人员处理的细节更少。总而言之,选择 HTTP/2+JSON 还是 gRPC 有很多方面,这完全取决于您的用例中最重要的方面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      相关资源
      最近更新 更多