使用gRPC共享非常大的文件

Mar*_*llo 9 c# grpc

我想使用 gRPC 在端点和服务器之间共享非常大的文件(超过 6GB)。

我当前工作的项目需要一个中央服务器,端点可以在其中上传和下载文件。限制之一是端点彼此不认识,但它们可以从公共总线相互接收和发送消息。

为了实现该服务器及其与端点的通信,我正在评估使用 gRPC。您认为这是文件流的最佳解决方案吗?我还有什么选择?

提前致谢。

Him*_*har 8

具有客户端/服务器流的 gRPC 能够处理文件的上传/下载。然而,这里有一个关于 gRPC 与 HTTP 在文件上传/下载方面的性能的讨论,其中说 HTTP 上传/下载的速度会更快,因为这只是读取/写入传入的字节,而 gRPC 执行额外的序列化/反序列化对于流中的每条消息都会增加大量开销。

还有另一个博客也在做一些基准测试 - https://ops.tips/blog/sending-files-via-grpc/

如果您想要实现一些必须处理规模的东西,您可以做更多的研究。


Mar*_*ell 4

如果您确实想通过 gRPC 执行此操作,那么关键是使响应成为“服务器流式传输”,这样它就不会在一个块中返回 6GiB,而是返回您需要的任何大小的多个块,例如一次可能是 128kiB时间(或其他);你可以这样:

syntax = "proto3";
message FileRequest {
    string id = 1; // or whatever
}
message FileResponse  {
    bytes chunk = 1; // some segment of the file
}

service SearchService {
  rpc GetFile(FileRequest) returns (stream FileResponse);
}
Run Code Online (Sandbox Code Playgroud)

但没有什么是自动的:现在你的工作就是将多个段写回。

我怀疑普通的 http 下载式响应可能更简单!