与HTTP/2上的JSON相比,除了大小之外,gRPC还有什么性能优势吗



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

正如我目前所理解的,在单个HTTP连接上进行多个连接的流水线操作是由HTTP/2完成的,而不是由gRPC完成的。所以,除了更高效的数据序列化格式之外,与HTTP/2上的JSON相比,gRPC实际上有性能优势吗?

这里有多个方面。

协议:HTTP/1.1与HTTP/2

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

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

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

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

gRPC使用的协议缓冲区是而不是唯一有效的二进制有效负载格式。有许多替代方案,例如FlatBuffers,一种零拷贝格式,根据协议缓冲区的经验设计。另一种二进制格式是Avro,主要用于较小的负载(而不是序列化性能(。Avro格式可能在有效载荷格式的可进化性方面具有优势(参见例如设计数据密集型应用程序(。

参见例如JSON与协议缓冲区与平面缓冲区以便进行比较。

gRPC

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

最新更新