web-dev-qa-db-ja.com

protobuf対gRPC

ProtobufとgRPC、およびその両方の使用方法を理解しようとします。次のことを理解してください。

  • OSIモデルを考慮すると、たとえば、Protobufはレイヤー4にありますか?
  • メッセージ転送を通して、protobufが見逃していることをgRPCが行っている「フロー」はどのようになっていますか?
  • 送信者がprotobufを使用する場合、サーバーはgRPCを使用できますか、またはgRPCはgRPCクライアントのみが配信できるものを追加しますか?
  • GRPCが同期と非同期の通信を可能にできる場合、Protobufはマーシャリング専用であり、そのため状態とは何の関係もありません-trueまたはfalse?
  • RESTまたはGraphQLの代わりに通信するフロントエンドアプリケーションでgRPCを使用できますか?

私はすでに知っている-または私が知っている-と仮定-

プロトブフ

  • データ交換用のバイナリプロトコル
  • Googleが設計
  • クライアントおよびサーバーでの説明のような生成された「構造」を使用して、メッセージのマーシャリングを解除します

gRPC

  • Protobufを使用(v3)
  • 再びGoogleから
  • RPC呼び出しのフレームワーク
  • HTTP/2も使用します
  • 同期および非同期通信が可能

すでにこのテクノロジーを使用している人にとっては簡単な質問だと思います。私はまだ忍耐強く助けてくれてありがとう。また、ネットワークの技術を深く掘り下げてくれたことにも本当に感謝しています。

45
lony

Protocol buffers is(are?)is Interface Definition Language and serialization library:

  • IDLでデータ構造を定義します。つまり、使用するデータオブジェクトを記述します。
  • データオブジェクトをバイナリに変換したり、バイナリから変換したりするためのルーチンを提供します。ディスクへのデータの書き込み/読み取り用

gRPCは同じIDLを使用しますが、Protobufデータ構造をデータ型として使用してリモートプロシージャコールメソッドシグネチャを定義できる構文「rpc」を追加します。

  • データ構造を定義します
  • Rpcメソッド定義を追加します
  • ネットワーク経由でメソッドシグネチャを提供および呼び出すコードを提供します
  • 必要な場合は、Protobufを使用してデータオブジェクトを手動でシリアル化できます。

質問への回答:

  1. gRPCはレイヤー5、6、7で動作します。Protobufはレイヤー6で動作します。
  2. 「メッセージ転送」と言うとき、Protobufは転送自体に関心がありません。データ転送の両端でのみ機能し、バイトをオブジェクトに変換します
  3. デフォルトでgRPCを使用するということは、Protobufを使用しているを意味します。 Protobufを使用するがgRPCと相互運用するためにgRPCを使用しない独自のクライアントを作成するか、他のシリアライザーをgRPCにプラグインできますが、gRPCを使用する方が簡単です
  4. 本当だ
  5. はい、できます
43
Peter Wishart

実際、gRPCとProtobufはまったく異なるものです。簡単にしましょう:

  • gRPCは、クライアントとサーバーが対話する方法を管理します(REST AP​​Iを使用するWebクライアント/サーバーのように)
  • protobufは単なるシリアル化/逆シリアル化ツールです(JSONと同様)

gRPCには2つのサイドがあります。サーバーサイドと、サーバーにダイヤルできるクライアントサイドです。サーバーはRPC(つまり、リモートで呼び出すことができる関数)を公開します。そして、あなたはそこにたくさんのオプションがあります:あなたは(TLSを使用して)通信を保護することができます(インターセプターを使用して)認証層を追加します...

Protobufは、クライアント/サーバーである必要のない任意のプログラム内で使用できます。データを交換する必要があり、それらを厳密に入力する場合、protobufは素晴らしいオプションです(高速で信頼性が高い)。

そうは言っても、両方を組み合わせてニースのクライアント/サーバーシステムを構築できます。gRPCはクライアント/サーバーコードであり、データプロトコルをプロトバフします。

PS:Go-を使用してgRPCとprotobufでクライアント/サーバーを段階的に構築する方法を示すために paper を書きました。

43
chilladx

grpcはgoogleによって構築されたフレームワークであり、google自体からの本番プロジェクトで使用され、#HyperledgerFabricはgrpcで構築され、grpcで構築された多くのオープンソースアプリケーションがあります

protobuffは、jsonのようなデータ表現です

grpc

  • gRPCは、Googleが開発したオープンソースフレームワークです
  • RPCの要求と応答を作成し、フレームワークによって残りを処理できます。
  • RESTはCRUD指向ですが、grpcはAPI指向です(制約なし)
  • HTTP/2の上に構築する
  • >>>>>認証、ロードバランシング、モニタリング、ロギングを提供します
  • [HTTP/2]
    • HTTP1.1は1997年にずっと前にリリースされました
    • HTTP1は、リクエストごとにサーバーへの新しいTCP接続を開きます
    • ヘッダーを圧縮しません
    • サーバープッシュなし、Req、Resで動作します
    • 2015年にリリースされたHTTP2(SPDY)
    • 多重化をサポート
    • クライアントとサーバーは同じTCP接続を介してメッセージを並行してプッシュできます
    • レイテンシーを大幅に削減
    • HTTP2はヘッダー圧縮をサポートします
    • HTTP2はバイナリです
      • proto buffはバイナリなので、HTTP2に最適です
  • [タイプ]
    • 単項
    • クライアントストリーミング
    • サーバーストリーミング
    • 双方向ストリーミング
    • grpcサーバーはデフォルトで非同期です
    • grpcクライアントは同期または非同期にすることができます

プロトバフ

  • プロトコルバッファは言語に依存しない
  • プロトコルバッファ(バイナリ形式)の解析は、CPUに負担をかけません
  • [ネーミング]
    • メッセージ名にキャメルケースを使用する
    • フィールドのunderscore_seperated
    • 列挙型にはキャメルケースを使用し、値名にはCAPITAL_WITH_UNDERSCOREを使用します
  • [コメント]
    • サポート //
    • サポート /* */
  • [利点]
    • データは完全に入力されています
    • データは完全に圧縮されています(CPU使用量が少ない)
    • Schema(message)は、コードを生成してコードを読み取るために必要です
    • スキーマにドキュメントを埋め込むことができます
    • データはどの言語でも読むことができます
    • スキーマはいつでも安全に進化できます
    • xMLよりも高速
    • コードは自動的に生成されます
    • Googleはproto buffを発明しました。48000個のprotobufメッセージと12000.protoファイルを使用します
    • Grpcを含む多くのRPCフレームワークは、プロトコルバッファを使用してデータを交換します
0