我想使用 gRPC 公开一个接口,用于在两个服务之间双向传输大型数据集(~100 MB)。因为默认情况下 gRPC 强加了 4 MB 的消息大小限制,所以似乎首选的方法是手动编码块的流,并在接收端重新组装它们 [ 1 ][ 2 ]。
但是,gRPC 还允许通过grpc.max_receive_message_length和增加消息大小限制grpc.max_send_message_length,从而可以直接传输大小高达 ~2 GB 的消息,而无需任何手动分块或流式传输。快速测试表明,这种更简单的方法在性能和吞吐量方面同样有效,使其看起来更适合此用例。假设整个数据集都需要在内存中。
这些方法中的一种是否天生比另一种更好?更简单的非分块方法是否有任何潜在的副作用?我是否可以依靠较低层的 MTU 相关分片足以避免网络延迟和其他障碍?
参考:
4 MB 限制是保护没有考虑消息大小限制的客户端/服务器。gRPC 本身可以更高(100 兆字节),但大多数应用程序可能会受到微不足道的攻击或意外地出现内存不足,从而允许这种大小的消息。
如果您愿意一次接收 100 MB 的消息,那么增加限制就可以了。
| 归档时间: |
|
| 查看次数: |
1732 次 |
| 最近记录: |