1. ホーム
  2. networking

[解決済み] protobufとgRPCの比較

2022-05-14 10:26:18

質問

protobufとgRPCを理解し、どのように両方を使うことができるかを理解しようとしています。次のことを理解するのを助けてください。

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

すでに知っている - あるいは知っていると仮定している - ことです。

プロトブーフ

  • データ交換のためのバイナリプロトコル
  • Google による設計
  • クライアントとサーバーで生成された構造体のような記述を使用して、マーシャルメッセージの解除を行います。

gRPC

  • protobuf (v3) を使用します。
  • 再びGoogleから
  • RPC 呼び出しのためのフレームワーク
  • HTTP/2 も利用できるようにする
  • 同期・非同期通信可能

すでにその技術を使っている人にとっては簡単な質問だと、私はまた思っています。それでも、私に忍耐強く付き合い、助けてくれることに感謝します。また、技術に関するネットワークの深堀りも本当にありがたいです。

どのように解決するのですか?

プロトコル バッファ は、インターフェース定義言語とシリアライゼーションライブラリです。

  • IDLでデータ構造を定義します。つまり、使用したいデータオブジェクトを記述します。
  • データオブジェクトをバイナリに変換するルーチンを提供します。

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

  • データ構造を定義する
  • RPCメソッドの定義を追加します。
  • ネットワーク上でメソッドシグネチャを提供し、呼び出すためのコードを提供します。
  • 必要であれば、Protobufを使用してデータオブジェクトを手動でシリアライズすることができます。

質問の答えとして

  1. gRPC はレイヤー 5、6、および 7 で動作します。Protobuf はレイヤー 6 で動作します。
  2. メッセージ転送と言った場合、Protobufは転送そのものには関係ありません。データ転送のどちらかの端でのみ動作し、バイトをオブジェクトに変換します。
  3. デフォルトでgRPCを使用するということは Protobufを使用していることになります。 . gRPC と相互運用するために、gRPC ではなく Protobuf を使用する独自のクライアントを作成したり、gRPC に他のシリアライザをプラグインすることもできますが、gRPC を使用する方が簡単です。
  4. はい、できます。