我想创建一个简单的gRPC
用户可以上传他/她的图片的端点。协议缓冲区声明如下:
message UploadImageRequest {
AuthToken auth = 1;
// An enum with either JPG or PNG
FileType image_format = 2;
// Image file as bytes
bytes image = 3;
}
无论 gRPC 文档中出现警告,这种上传图片(和接收图片)的方法仍然可以吗?
如果不是,是否有更好的方法(标准)使用标准形式上传图片并存储图像文件位置?
对于大型二进制传输,标准方法是分块。分块有两个目的:
- 减少处理每条消息所需的最大内存量
- 提供恢复部分上传的边界。
对于您的用例#2 可能不是很有必要。
在 gRPC 中,客户端流式调用允许相当自然的分块,因为它具有流控制、管道化,并且易于维护客户端和服务器代码中的上下文。如果您关心部分上传的恢复,那么双向流式传输效果很好,因为服务器可以通过客户端可以用来恢复的进度确认进行响应。
使用单独的 RPC 进行分块也是可能的,但会更加复杂。当负载平衡时,可能需要后端与每个块的其他后端协调。如果您串行上传块,则网络延迟可能会降低上传速度,因为您大部分时间都在等待接收服务器的响应。然后,您要么必须并行上传(但并行上传多少个?),要么增加块大小。但增加块大小会增加处理每个块所需的内存,并增加恢复失败上传的粒度。并行上传还需要服务器处理乱序上传。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)