【发布时间】:2020-02-14 04:22:09
【问题描述】:
我想使用 gRPC 公开一个接口,用于在两个服务之间双向传输大型数据集(~100 MB)。由于 gRPC 在默认情况下施加了 4 MB 的消息大小限制,因此执行此操作的首选方法似乎是手动编码块流,并在接收端重新组装它们 [1][2]。
但是,gRPC 还允许通过 grpc.max_receive_message_length 和 grpc.max_send_message_length 增加消息大小限制,从而可以直接传输最大约 2 GB 的消息,而无需任何手动分块或流式传输。快速测试表明,这种更简单的方法在性能和吞吐量方面同样有效,这使得它看起来更适合这个用例。假设内存中需要整个数据集。
其中一种方法天生就比另一种更好吗?更简单的非分块方法是否有任何潜在的副作用?我能否依靠较低层的 MTU 相关分片来避免网络延迟和其他障碍?
参考资料:
【问题讨论】: