grpc - 我应该通过 gRPC 传输大型数据集而无需手动分块吗?
问题描述
我想使用 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 MB),但大多数应用程序可能会受到微不足道的攻击或意外内存不足,从而允许该大小的消息。
如果您愿意一次性接收 100 MB 的消息,那么增加限制就可以了。
推荐阅读
- java - 连接两个 HashMap 值
- java - 如何检查数字是否长时间出现3次或更多次
- python - python如何处理代码和导入的自定义库的不同python版本
- azure - 重新部署基础架构时仅部署修改后的 ARM 模板
- github - git push - client_loop:发送断开连接:对等方重置连接
- python - 使用 python 的 Chloropleth 地图不会显示
- c# - 开发从 VBA 调用的 c# 库
- c - 使用 cairo 进行缩放会导致绘制的图像出现在不同的位置
- package - 什么包控制 JavaScript 的功能
- go - 在 Google Cloud 上设置转发代理