gRPC +图片上传

内特·李

我想创建一个简单的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文档中的警告如何,这种上传图片(和接收图片)的方法仍然可行吗?

如果不是,那么更好的方法(标准)是使用标准格式上传图片并存储图像文件位置吗?

埃里克·安德森

对于大型二进制传输,标准方法是分块。分块可用于两个目的:

  1. 减少处理每个消息所需的最大内存量
  2. 提供恢复部分上传的边界。

对于您的用例2,可能不是非常必要。

在gRPC中,客户端流调用允许相当自然的分块,因为它具有流控制,流水线并且易于在客户端和服务器代码中维护上下文。如果您关心部分上传的恢复,那么双向流会很好地工作,因为服务器可以响应客户端可以用来恢复的进度确认。

也可以使用单个RPC进行分块,但是会带来更多的复杂性。在进行负载平衡时,可能需要后端与每个块与其他后端进行协调。如果您串行上传块,则网络的延迟会降低上传速度,因为您花费了大部分时间等待从服务器接收响应。然后,您要么必须并行上传(但要并行上传几个?),要么增加块大小。但是增加块大小会增加处理每个块所需的内存,并会增加恢复失败的上载的粒度。并行上传还要求服务器处理无序上传。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章