dotNET 5中的gRPC性能改进,超Golang和C++( 三 )


dotNET 5中的gRPC性能改进,超Golang和C++文章插图
给Google.Protobuf添加对缓冲区序列化的支持只是第一步 。 要使用gRPC for .NET , 需要更多工作才能利用新功能:
向Grpc.Core.Api中的gRPC序列化抽象层添加了ReadOnlySequence API和IBufferWriter
API 。
更新gRPC代码生成 , 以将Google.Protobuf中的更改粘贴到Grpc.Core.Api 。
更新了.NET的gRPC , 以使用Grpc.Core.Api中的新序列化抽象 。 这段代码是Kestrel和gRPC之间的集成 。 由于Kestrel的IO建立在System.IO.Pipelines之上 , 因此可以在序列化过程中使用其缓冲区 。
最终结果是gRPC for .NET将Protobuf消息直接序列化到Kestrel的请求和响应缓冲区 。 中间数组分配和字节副本已从gRPC消息序列化中删除 。
总结性能是.NET和gRPC的基本功能 , 随着云应用崛起 , 性能变得越来越重要 。 较低的延迟和较高的吞吐量意味着更少的服务器 。 高性能的应用可以节省金钱 , 减少能耗和构建绿色应用程序的机会 。
dotNET 5中的gRPC性能改进,超Golang和C++文章插图
【dotNET 5中的gRPC性能改进,超Golang和C++】gRPC , Protobuf和.NET 5进行大量的尝试和更改 , 用来提高性能 。 基准测试表明 , gRPC服务器RPS提高了60% , gRPC客户端RPS提高了230% 。