目標は、レイテンシおよびネットワークスループットで優れているトランスポートおよびアプリケーションレイヤプロトコルを導入することです。現在、アプリケーションはRESTとHTTP/1.1を使用しており、高いレイテンシが発生します。この遅延の問題を解決する必要があり、gRPC(HTTP/2)またはREST/HTTP2のいずれかを使用できます。
HTTP/2:
上記のすべての利点を認識しています。 質問番号1:HTTP/2でのRESTを使用すると、HTTP /でのREST /と比較して、パフォーマンスが大幅に向上します。 1.1ですが、これはgRPC(HTTP/2)とどのように比較されますか?
また、gRPCがプロトバッファを使用することも知っています。これは、ワイヤ上で構造化データを送信するための最良のバイナリシリアル化テクニックです。プロトバッファは、言語に依存しないアプローチの開発にも役立ちます。私はそれに同意し、graphQLを使用してRESTに同じ機能を実装できます。しかし、私の懸念はシリアル化です:質問番号2:HTTP/2がこれを実装する場合バイナリ機能、protoバッファを使用すると利点が追加HTTP/2の上に?
質問3:ストリーミング、双方向ユースケースに関して、gRPC(HTTP/2)は(RESTおよびHTTP/2)とどのように比較されますか?
インターネットには非常に多くのblogs/videosがあり、 this のようにgRPC(HTTP/2)と(RESTおよびHTTP/1.1)を比較しています。前述したように、GRPC(HTTP/2)と(RESTとHTTP/2)を比較することの違い、利点を知りたいと思います。
gRPCは、デフォルトではHTTP/2を介したRESTよりも高速ではありませんが、高速にするツールを提供します。 RESTでは困難または不可能なことがいくつかあります。
Nfirvineが言ったように、Protobufを使用するだけでパフォーマンスの改善の大部分がわかります。あなたはcouldRESTでprotoを使用できますが、gRPCと非常にうまく統合されています。技術的には、gRPCでJSONを使用できますが、ほとんどの人はプロトに慣れた後はパフォーマンスコストを支払いたくありません。
私は決してこれに関する専門家ではなく、これをバックアップするデータもありません。
あなたが話している「バイナリ機能」は、HTTP/2フレームのバイナリ表現です。コンテンツ自体(JSONペイロード)は引き続きUTF-8です。 HTTP/1と同様に、そのJSONを圧縮してContent-Encoding: gzip
を設定できます。
ただし、gRPCはgzip圧縮も行います。本当に、私たちはgzip圧縮されたJSONとgzip圧縮されたprotobufsの違いについて話している。
ご想像のとおり、圧縮されたprotobufは圧縮されたJSONをあらゆる点で上回るはずです。
JSONとプロトブフの普遍性に加えて、プロトブフを使用することの唯一の欠点は、たとえばtcpdumpの状況で.protoをデコードする必要があることです。