为啥我应该使用 gRPC 而不是 IPC / Simple websocket?
Posted
技术标签:
【中文标题】为啥我应该使用 gRPC 而不是 IPC / Simple websocket?【英文标题】:Why should I use gRPC instead of IPC / Simple websocket?为什么我应该使用 gRPC 而不是 IPC / Simple websocket? 【发布时间】:2017-05-22 05:04:45 【问题描述】:我正在草拟一个微服务系统的架构,计划目前在一台机器上运行(也许将来会分发)。 该系统将由用 Node.js、GO 和 Java 编写的服务组成。 node.js 和 Java 都需要传递指令并从 GO 服务器接收结果。
现在,我正在尝试决定是使用 IPC 管道还是增加 gRPC 和 protobuff 并使用它们。
【问题讨论】:
第一件事:节点是否有 grpc/protobuf 客户端库?如果不是,这个问题就没有实际意义了。 【参考方案1】:它们处于不同的抽象级别并具有不同的用途,因此问题中的“或”是错误的。 您将需要两种类型(传输和编码),即使您重新实现其中一种。
像匿名或命名管道一样的 IPC 通常被称为传输,它们无法编码多个指令或结果(尽管它们编码字节流)。
gRPC 和 protobuf 需要一种传输方式,支持多种传输方式并添加更细粒度的编码(如何表示整数、列表等),甚至可能更多。支持编码的技术通常可以与传输或编码嵌套,这在与 HTTP 一起使用的技术中很常见,这可能是有道理的,但可能只是添加了一层而没有使用。
【讨论】:
感谢您的澄清 - 我想我需要重新措辞。以上是关于为啥我应该使用 gRPC 而不是 IPC / Simple websocket?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 IPC::Open3 调用 cmd.exe 而不是请求的程序?
何时应该使用 Pipes 或 gRPC 进行进程间通信(在 C# .NET Core 中)?
为啥我应该使用 LoadBalancerProbe 而不是订阅 RoleEnvironment.StatusCheck 事件?