.NET Core 3.0を使用して、ベトナム人兄弟のgithubで、REST対gRPCの評価パフォーマンスを確認しました。本日、.NET Core 3.1にアップグレードし、テストも行いました。記事と彼のブログ投稿の結果は、同じ:https : //dev.to/thangchung/performance-benchmark-grpc-vs-rest-in-net-core-3-preview-8-45ak。
8年前に記事を書きました:アプリケーション選択におけるWCFとASP.NET Web API。現在は2020年になり、WCFはgRPCに置き換えられ、ASP.NET Web APIはASP.NET Core Web APIに置き換えられ、標準化されたRESTサービスが外部に提供されます。内部通信にgRPCを使用することも、新時代の.NETアプリケーションに適しています。 Kubernetesアーキテクチャがトランスポートプロトコルのペイロード形式を使用する方法と同様の選択。
.NET Core 3.1でのRESTとgRPCのパフォーマンスを見てみましょう。https://github.com/geffzhang/RESTvsGRPCからコードをダウンロードします。テストマシンに.NET Core 3.1をインストールします。
- REST API:
cd RESTvsGRPC\RestAPI
dotnet run -p RestAPI.csproj -c Release
- gRPC API:
cd RESTvsGRPC\GrpcAPI
dotnet run -p GrpcAPI.csproj -c Release
- ベンチマークアイテム:
cd RESTvsGRPC\RESTvsGRPC
dotnet run -p RESTvsGRPC.csproj -c Release
等待完成测试后,我们将会得到类似下面的结果,具体的结果依赖于你的测试机器配置,我使用Win10 的Surface Book 2上面完成的下面的测试结果:
インターフェースによって返されるデータの量が比較的少ない場合、RESTのパフォーマンスはgRPCよりも優れています。データの量が多くなると、gRPCのパフォーマンス上の利点はより明白になります。.NET Core 3のjsonは大幅に最適化されており、メッセージペイロード内の小さなデータを処理するときに大きな違いが生じますが、実際には大きなデータペイロードの場合、違いはありません。全体として、gRPCはこの分野でも依然として勝者です。私はどちらが他より優れていると言っているのではありません。私が言いたいのは、ビジネスケースで使用するプロトコルに適した戦略が必要だということです。通常、外部との外部通信(外部サービスの統合やフロントエンドとの通信など)にはREST通信を使用し、内部サービスの通信にはgRPCを使用します。
参照:
- https://medium.com/@EmperorRXF/evaluating-performance-of-rest-vs-grpc-1b8bdf0b22da
- https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel
- https://gooroo.io/GoorooTHINK/Article/16623/One-Weird-Trick-To-Improve-Web-Performance/21564#.Vx9o5UdkldB
- https://devblogs.microsoft.com/aspnet/asp-net-core-2-2-0-preview1-http-2-in-kestrel/
- https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/
- https://dev.to/thangchung/performance-benchmark-grpc-vs-rest-in-net-core-3-preview-8-45ak
- https://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html