我应该在没有手动分块的情况下通过gRPC传输大型数据集吗?

问题描述 投票:0回答:1

我想使用gRPC公开一个接口,用于在两个服务之间双向传输大型数据集(〜100 MB)。由于默认情况下gRPC施加4 MB的消息大小限制,因此看来,执行此操作的首选方法是手动对块的流进行编码,然后在接收端[1] [2]上重新组合它们。

但是,gRPC还允许通过grpc.max_receive_message_lengthgrpc.max_send_message_length增加消息大小限制,从而可以直接传输最大〜2 GB的消息,而无需任何手动分块或流式传输。快速测试表明,这种更简单的方法在性能和吞吐量方面同样有效,因此对于此用例而言似乎更为理想。假定内存中需要整个数据集。

这些方法中的一种在本质上比另一种更好吗?更简单的非分块方法有潜在的副作用吗?我可以依靠较低层上依赖于MTU的分段来充分避免网络延迟和其他障碍吗?


参考:

  1. Chunking large messages with gRPC
  2. Sending files via gRPC
grpc http2
1个回答
1
投票

4 MB的限制是保护那些尚未考虑邮件大小限制的客户端/服务器。 gRPC本身可以做得更好,可以更高(100 MB),但是大多数应用程序可能受到微不足道的攻击,或者意外退出内存,从而允许该大小的消息。

© www.soinside.com 2019 - 2024. All rights reserved.