【发布时间】:2017-10-13 00:58:46
【问题描述】:
我们正在尝试用 golang 编写一个微服务系统。 为此,我们需要为服务间通信定义一些传输。 其中一个想法是让服务仅通过 json 字符串和对象类型进行通信。然后,接收调用的服务将从 json 字符串中提取数据,并使用基于对象类型的已知/预期数据结构进一步处理它。
但是这种方法增加了每次我们需要进行 rpc 调用时从结构中创建 json 字符串的开销。
我们正在确定要使用的 RPC:Thrift 或 gRPC
并且决定将取决于以下事实,即哪一个提供了一种更好的方法来以最小的开销将数据从客户端传递到服务器。基本上哪个 RPC 可以提供运行时传输结构的创建?
【问题讨论】:
-
两者都基于某种 IDL。如果您省略 IDL,您将很难。如果您想坚持使用无定形 JSON 数据,也许 Avro 可能会提供更多帮助,但我对 Avro 的经验只是理论上的,因此可能根本行不通。你必须做出决定,是更喜欢无定形的未定义结构,还是想使用 gRPC、Thrift 等,放弃无定形。恐怕你不能同时拥有(如你所愿)。
-
"使用已知的/预期的数据结构" -- 如果已知和预期的,在 IDL 中定义它,然后你的所有设置。但是从你在问题中写的内容来看,我不太确定这个前提是否真的成立......这就是我写“无定形数据”的原因。
标签: json protocol-buffers microservices thrift grpc