LoginSignup
3
7

More than 5 years have passed since last update.

gRPC - What is gRPC?の和訳

Posted at

この記事は2019/02/19時点のWhat is gRPC?を和訳したものです。Go - Quick Startの和訳はこちら


この文書では、gRPCとプロトコルバッファについて紹介します。 gRPCは、プロトコルバッファをそのインタフェース定義言語(IDL)とその基礎となるメッセージ交換フォーマットの両方として使用できます。 gRPCやプロトコルバッファに不慣れな方は、このドキュメントをお読みください。最初にgRPCの動作を確認したい場合は、クイックスタートをご覧ください。

概要

gRPCでは、クライアントアプリケーションは別のマシン上のサーバーアプリケーションのメソッドをローカルオブジェクトのように直接呼び出すことができるため、分散型のアプリケーションやサービスを簡単に作成できます。多くのRPCシステムと同様に、gRPCはサービスを定義し、引数と戻り値の型でリモートから呼び出すことができるメソッドを指定するという考えに基づいています。サーバー側では、サーバーがこのインターフェイスを実装し、gRPCサーバーを実行してクライアント呼び出しを処理します。クライアント側では、クライアントはサーバーと同じメソッドを提供するスタブ(いくつかの言語では単にクライアントと呼ばれる)を持っています。

gRPC

gRPCクライアントとサーバーは、Google内のサーバーから自分のデスクトップまで、さまざまな環境で実行および通信できます。また、gRPCでサポートされている任意の言語で作成することもできます。そのため、たとえば、Go、Python、またはRubyのクライアントを使用してJavaでgRPCサーバーを簡単に作成できます。さらに、最新のGoogle APIにはgRPCバージョンのインターフェイスがあり、アプリケーションにGoogleの機能を簡単に組み込むことができます。

プロトコルバッファの使用

デフォルトでは、gRPCは、構造化データをシリアル化するためのGoogleの成熟したオープンソースメカニズムであるプロトコルバッファを使用します(ただし、JSONなどの他のデータ形式でも使用できます)。これがどのように動作するかの簡単な紹介です。プロトコルバッファについてすでにご存じの場合は、次のセクションに進んでください。

プロトコルバッファを扱う時の最初のステップは、プロトファイルでシリアル化したいデータの構造を定義することです。これは、拡張子が.protoの通常のテキストファイルです。プロトコルバッファデータはメッセージとして構造化されています。各メッセージは、フィールドと呼ばれる一連の名前と値のペアを含む情報の小さな論理レコードです。これが簡単な例です。


message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

次に、データ構造を指定したら、プロトコルバッファコンパイラprotocを使用して、プロト定義から好みの言語でデータアクセスクラスを生成します。これらは各フィールドの単純なアクセサ(name()set_name()のような)と、構造全体を生のバイトにシリアライズ/パースするメソッドを提供します。選択した言語がC++の場合は、上記の例でコンパイラを実行すると、Personというクラスが生成されます。 その後、このクラスをアプリケーションで使用して、Personプロトコルバッファメッセージを生成、シリアル化、および取得できます。

この例で詳しく説明するように、プロトコルバッファメッセージとしてRPCメソッド引数と戻り値の型を指定して、通常のプロトファイルでgRPCサービスを定義します。


// The greeter service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

gRPCはprotocと特別なgRPCプラグインを併用してprotoファイルからコードを生成します。ただし、gRPCプラグインを使用すると、生成されたgRPCクライアントおよびサーバーコード、およびメッセージタイプの生成、直列化、および取得のための通常のプロトコルバッファコードが得られます。この例については、後で詳しく説明します。

プロトコルバッファの詳細については、プロトコルバッファのドキュメントを参照してください。また、選択した言語のクイックスタートでgRPCプラグインを使用してprotocを取得およびインストールする方法を見つけることができます。

プロトコルバッファのバージョン

プロトコルバッファは暫く前からオープンソースユーザーが利用可能でしたが、私たちの例はproto3と呼ばれるプロトコルバッファの新しいフレーバーを使います。これはわずかに単純化された構文、いくつかの役に立つ新機能を持ち、そしてもっと多くの言語をサポートします。これは現在、protocol buffers GitHub repoからJava、C ++、Python、Objective-C、C#、lite-runtime(Android Java)、Ruby、およびJavaScript、ならびに、golang/protobuf GitHub repoのGo言語ジェネレータで利用可能で、開発中の言語も増えています。あなたはproto3言語ガイドと各言語のために利用可能なリファレンスドキュメントでより多くを見つけることができます。リファレンスドキュメントには、.protoファイル形式の正式な仕様も含まれています。

通常、proto2(現在のデフォルトのプロトコルバッファバージョン)を使用できますが、proto3サーバーと通信するproto2クライアント(あるいはその逆)との互換性の問題を回避するだけでなく、gRPCでサポートされているすべての言語を使用できるのでproto3をgRPCと共に使用することをお勧めします。

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7