[解決済み] gRPC(HTTP/2)はREST with HTTP/2より速いのか?
質問
目標は、より優れたトランスポートおよびアプリケーション層プロトコルを導入することである。 レイテンシー と ネットワークスループット . 現在、アプリケーションは REST を使用しています。 HTTP/1.1 で、高いレイテンシが発生します。私はこの遅延の問題を解決する必要があり、私はどちらかを使うことに前向きです。 gRPC(HTTP/2) または REST/HTTP2 .
HTTP/2です。
- 多重化
- シングルTCPコネクション
- テキストではなくバイナリ
- ヘッダ圧縮
- サーバープッシュ
上記の利点はすべて承知しています。 質問No: もし私が HTTP/2でREST と比較した場合、大幅な性能向上が得られると確信しています。 HTTP/1.1によるREST と比べてどうでしょうか? gRPC(HTTP/2) ?
私はgRPCがプロトバッファを使用していることも知っていますが、これは最適な バイナリシリアライゼーション 技術です。プロトバッファは、言語に依存しないアプローチの開発にも役立ちます。私はそれに同意しますし、同じ機能をRESTでgraphQLを使って実装することができます。しかし、私の懸念は直列化に関するものです。 質問No.2 いつ HTTP/2 はこれを実装しています。 バイナリ機能
プロトバッファを使用すると、HTTP/2の上に追加の利点を与えるのでしょうか?
質問No.3。 という点では ストリーミング、双方向のユースケース gRPC(HTTP/2) は (REST と HTTP/2) と比べてどうなのでしょうか?
非常に多くの ブログ/ビデオ のような gRPC(HTTP/2) と (REST と HTTP/1.1) を比較するブログがインターネット上にたくさんあります。 この . 前述したように、GRPC(HTTP/2)と(HTTP/2のREST)を比較する上での違い、メリットを知りたいです。
どのように解決するのですか?
gRPC は、デフォルトでは REST over HTTP/2 よりも高速ではありませんが、高速化するためのツールを提供します。 RESTでは難しい、あるいは不可能なことがあります。
- 選択的なメッセージ圧縮。 gRPC では、ストリーミング RPC はメッセージを圧縮するかしないかを決めることができます。 たとえば、テキストと画像が混在したストリームを 1 つのストリームで配信する場合 (または、実際に圧縮可能なコンテンツが混在している場合)、画像の圧縮をオフにすることができます。 これにより、すでに圧縮されているデータを圧縮しなくてもよくなり、より小さくなることはありませんが、CPU を消費することになります。
- ファーストクラスのロード バランシング。 ポイントツーポイント接続の改善ではありませんが、gRPC はトラフィックを送信するバックエンドをインテリジェントに選択することができます。 (これはライブラリの機能であり、ワイヤ プロトコルの機能ではありません)。 これは、プロキシを使用することなく、最も負荷の低いバックエンドサーバにリクエストを送ることができることを意味します。 これはレイテンシーの勝利です。
- 高度に最適化された gRPC (ライブラリ) は 連続ベンチマーク を行っており、速度低下がないことを確認しています。 これらのベンチマークは常に改善されています。 繰り返しますが、これはプロトコルであるgRPCとは何の関係もありませんが、gRPCを使用したことであなたのプログラムはより高速になります。
nfirvine が言ったように、Protobuf を使用するだけで、ほとんどの性能向上が見られます。 一方 は protoはRESTでも使えますが、gRPCと非常にうまく統合されています。 技術的には、gRPC で JSON を使用することもできますが、ほとんどの人は proto に慣れた後、パフォーマンス コストを支払いたくはないでしょう。
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] カスタムHTTPヘッダー:命名規則
-
[解決済み] SOAPとRESTの比較(相違点)
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] cURLを使ってCookieを送信するには?
-
[解決済み] REST Web アプリケーションのページネーション
-
[解決済み] オブジェクト内のアイテムの合計数を返すための最良のRESTfulメソッドは何ですか?
-
[解決済み] レスポンスコードが200または201で、内容がPOSTのリクエストを作成します。
-
[解決済み] HTTP DELETEでリソースを2回目に削除したときのステータスコード
-
[解決済み] RESTのPUT/POST/DELETEコールは、規約によって何を返すべきですか?
-
[解決済み] RESTとは?若干の混乱【終了
-
[解決済み] REST - ボディにIDを入れるかどうか?
-
[解決済み] REST HATEOAS(成熟度3)の有用性/重要性とは?
-
[解決済み] RESTfulなパスワードリセット