【发布时间】:2017-12-06 06:03:18
【问题描述】:
目标是引入一种在延迟和网络吞吐量方面更好的传输和应用层协议。目前,该应用程序使用 REST 和 HTTP/1.1,我们会遇到高延迟。我需要解决这个延迟问题,我愿意使用 gRPC(HTTP/2) 或 REST/HTTP2。
HTTP/2:
- 多路复用
- 单 TCP 连接
- 二进制而不是文本
- 标题压缩
- 服务器推送
我了解上述所有优势。 问题 1:如果我使用 REST 和 HTTP/2,我相信与 REST 和 HTTP/1.1 相比,我将获得显着的性能提升,但这与 gRPC(HTTP/2) 相比如何?
我还知道 gRPC 使用 proto 缓冲区,这是用于在线传输结构化数据的最佳 二进制序列化 技术。 Proto 缓冲区还有助于开发一种与语言无关的方法。我同意这一点,我可以使用 graphQL 在 REST 中实现相同的功能。但我担心的是序列化:问题 2: 当 HTTP/2 实现此 二进制功能 时,使用 proto 缓冲区是否会带来额外的优势在 HTTP/2 之上?
问题 3:就流式传输、双向用例而言,gRPC(HTTP/2) 与(REST 和 HTTP/2)相比如何)?
互联网上有很多博客/视频将 gRPC(HTTP/2) 与(REST 和 HTTP/1.1)进行比较,例如 this。如前所述,我想知道比较 GRPC(HTTP/2) 和(REST 与 HTTP/2)的区别和好处。
【问题讨论】:
-
你最后用了什么?有没有 HTTP2+REST 的框架?
-
@knocte 我最终使用了 gPRC。它很好地减少了延迟。关于 HTTP/2+REST,没有特定的框架,你需要在你使用的服务器中更改设置。假设您正在使用 nginx,请查看文档以查看设置 HTTP/2 的步骤。
-
并且您必须确保 HTTP/1.1 重用连接。否则搜索“tcp 冷启动”。 gRPC 默认重用连接。
标签: rest http google-cloud-platform http2 grpc