PHP 中如何使用 gRPC 增强微服务交互?

How is gRPC used to enhance Microservice interaction in PHP?

我正在研究 gRPC 并注意到它们有助于构建高质量的微服务交互。

目前我使用 RESTful 请求与 Guzzle 等典型工具在服务之间进行交互

gRPC 如何改进微服务之间的交互方式?

gRPC 提供了一些优于 REST 的优势(以及一些权衡)。

三个主要好处是:

  1. Protocol Buffers效率高因为双方已经有了protobuf定义,所以只需要传输数据,不需要传输结构。相比之下,对于某些 JSON 有效载荷,字段的名称可以使有效载荷明显大于数据。此外,protobuf 具有非常紧凑的“线上”表示。最后,您没有每个请求的 HTTP headers 的开销。 (同样,对于一些较小的请求,headers 可能比请求 body 本身大得多。)

  2. gRPC 可以是双向的。 gRPC 服务可以有双向的数据“流”。 HTTP 必须始终具有匹配在一起的请求和响应。

  3. gRPC 试图让您考虑版本兼容性。 Protocol Buffers 专门设计用于帮助您确保在数据结构发生变化时保持向后兼容性。如果做得好,这可以使未来的升级更容易实施。


有了所有这些好处,为什么不对所有事情都使用 gRPC?

在我看来,gRPC 的主要缺点是它需要更多的工具。几乎任何编程语言都可以处理 HTTP,并且有许多调试工具,但对于 gRPC,您必须为每种语言编译 .proto 文件并共享它们。也没有那么多的测试工具。