后端 DAY11

xerfect · August 12, 2021 · 0 hits

本文章同时发布于:

文章为自己的经验与伙伴整理的内容,设计没有标准答案,如有可以改进的地方,请告诉我,我会尽我所能的修改,谢谢大家~


大家好,在昨天的 gRPC 实作后,在微服务上我们可以用更完整的方案沟通,那是否有一个方案,可以将 gRPC 运用在前端与后端沟通呢?

有的,那就是gRPC-Web

为什么需要 gRPC-Web

图片来源: Envoy and gRPC-Web: a fresh new alternative to REST

gRPC 在前端运作最大的问题,就是前端对于 gRPC 所使用的 protocol 不是那么完好的支持,现在主流浏览器使用HTTP1.1,而 gRPC 使用的是更加高效的HTTP2

那该怎么解决,Google 提供的解决方案是利用一个 proxy 架设在后端,将前端所有的 HTTP1.1 流量转换成 HTTP2,如下图:

图片来源: Envoy and gRPC-Web: a fresh new alternative to REST

envoy 是现在常见的一个 proxy,他对于微服务沟通的各种问题有很好的缓解作用,在未来 istio 介绍中,会更常看到他。

有这个 HTTP1.1 通过 envoy 转换的过程,势必会缺小原生 HTTP2 的一些好处,如下:

  • 不支持 Client-Streaming: 虽然支持 Server-Streaming 的功能,但在 Client-Streaming 上因为 HTTP1.1 的安全性问题,始终没有激活,一旦解决后 gRPC-Web 可以通过 Server 与 Client 的 Streaming 来做双工串流。
  • 不使用二进制传输: 因为前端使用二进制并非会有较好的性能,所以还是使用类似 JSON 的方式发送。

所以,gPRC-Web 在选用上,如果你有以下需求,那他将会是你的好选择:

  • 前后端要有一致的沟通接口
  • 前端有订阅需求 (可用 Server-Steaming 实作)


接下来会对 gRPC-Web 实际实作,谢谢你的阅读~

参考


No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.