目标是引入一种性能更好的传输和应用层协议latency and 网络吞吐量。目前,该应用程序使用REST with HTTP/1.1并且我们遇到了很高的延迟。我需要解决这个延迟问题并且我愿意使用gRPC(HTTP/2) or 休息/HTTP2.
HTTP/2:
- 复用
- 单个 TCP 连接
- 二进制而不是文本
- 标头压缩
- 服务器推送
我知道以上所有优点。问题一:如果我使用使用 HTTP/2 进行 REST,我确信,与相比,我将获得显着的性能提升使用 HTTP/1.1 进行 REST,但这与gRPC(HTTP/2)?
我还知道 gRPC 使用 proto 缓冲区,这是最好的二进制序列化在线传输结构化数据的技术。 Proto 缓冲区还有助于开发与语言无关的方法。我同意这一点,并且我可以使用 graphQL 在 REST 中实现相同的功能。但我担心的是序列化:问题二: When HTTP/2实现这个二进制特征,使用 proto 缓冲区是否比 HTTP/2 具有额外的优势?
问题 3:按照流式、双向用例,gRPC(HTTP/2) 与(REST 和 HTTP/2)相比如何?
有这么多博客/视频互联网上将 gRPC(HTTP/2) 与(REST 和 HTTP/1.1)进行了比较this https://husobee.github.io/golang/rest/grpc/2016/05/28/golang-rest-v-grpc.html。如前所述,我想知道比较 GRPC(HTTP/2) 和(REST 与 HTTP/2)的差异和好处。
默认情况下,gRPC 并不比 HTTP/2 上的 REST 快,但它为您提供了加快速度的工具。有些事情使用 REST 很难或不可能完成。
- 选择性消息压缩。在 gRPC 中,流式 RPC 可以决定压缩或不压缩消息。例如,如果您通过单个流传输混合文本和图像(或任何混合的可压缩内容),则可以关闭图像压缩。这可以让你免于压缩已经压缩的数据,这些数据不会变得更小,但会消耗你的CPU。
- 一流的负载平衡。虽然不是点对点连接的改进,但 gRPC 可以智能地选择将流量发送到哪个后端。 (这是一个库功能,而不是有线协议功能)。这意味着您可以将请求发送到负载最少的后端服务器,而无需使用代理。这是延迟的胜利。
- 大力优化。 gRPC(库)位于连续基准 https://performance-dot-grpc-testing.appspot.com/explore?dashboard=5180705743044608以确保没有速度回归。这些基准正在不断提高。同样,这与 gRPC 协议没有任何关系,但使用 gRPC 后您的程序会更快。
正如 nfirvine 所说,您将通过使用 Protobuf 看到大部分性能提升。当你could将 proto 与 REST 结合使用,它与 gRPC 集成得非常好。从技术上讲,您可以将 JSON 与 gRPC 结合使用,但大多数人在习惯了 protos 后并不想付出性能成本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)