gRPC(ジーアールピーシー)とは、ネットワークの向こうにあるプログラムの機能を、まるで手元の関数を呼び出すかのように使えるようにする通信の仕組みです。Googleが社内で使っていた技術をもとに開発し、2015年にオープンソースとして公開しました。現在は、多数の小さなサービスを組み合わせるシステムで広く使われています。
現実世界に例えると、gRPCは決まった書式の注文票と専用の気送管で、離れた部署に仕事を頼む仕組みのようなものです。書式が決まっているので読み違いがなく、専用の管で送るので、毎回手紙を書いて郵送するよりずっと速くやり取りできます。
gRPC図解
RPCという考え方
名前の由来です。RPCは「Remote Procedure Call(遠隔手続き呼び出し)」の略で、別のコンピューターにある処理を、手元の処理と同じ感覚で呼び出す考え方を指します。通信の細かい手順を意識せずに済むため、プログラムを書く人は、本来の処理の中身に集中できます。
やり取りの形を先に決める
仕組みの出発点です。gRPCでは、どんな機能があり、どんなデータを渡して何が返ってくるのかを、「Protocol Buffers」という形式の定義ファイルに先に書きます。この定義から、呼び出す側と受ける側のプログラムの骨組みを、さまざまなプログラミング言語向けに自動で作れます。
RESTとの比較
| 項目 | gRPC | REST |
|---|---|---|
| データの形 | バイナリ(小さく速い) | 主にJSON(人が読める) |
| 通信の方式 | HTTP/2 | 主にHTTP/1.1 |
| 形の取り決め | 定義ファイルで厳密に | 比較的自由 |
| ブラウザーから | 工夫が必要 | そのまま使える |
小さく速いデータでやり取りする
速さの理由のひとつです。Protocol Buffersでは、データを人が読める文字ではなく、コンピューターが扱いやすいバイナリの形に変換して送ります。JSONに比べて送るデータが小さく、変換の手間も少ないため、大量の呼び出しが行き交うシステムでは、通信量や処理の負担を大きく減らせます。
HTTP/2の上で動く
もうひとつの理由です。gRPCは、1本の接続で複数のやり取りを同時に進められるHTTP/2の上で動きます。呼び出しのたびに接続し直す必要がないため、待ち時間が短くなります。サービスどうしが頻繁に呼び出し合う場面で、この差が積み重なって大きな効果になります。
データを流し続けられる
gRPCならではの機能です。1回の要求に1回応答する形だけでなく、サーバーから結果を次々と送り続ける、双方から同時に送り合うといった「ストリーミング」の形にも対応しています。リアルタイムの通知や、大量のデータを少しずつ受け渡す処理を、自然な形で作れます。
マイクロサービスでの活躍
代表的な使い道です。機能ごとに小さなサービスへ分けて組み合わせる「マイクロサービス」の構成では、サービスどうしが内部で大量に呼び出し合います。異なる言語で作られたサービスでも、共通の定義ファイルから同じ形でつなげるため、gRPCはこうした内部の通信の標準的な選択肢になっています。
向かない場面もある
注意点です。ブラウザーから直接gRPCを使うには、中継の仕組みを用意するなどの工夫が必要で、公開するWebのAPIにはRESTが選ばれることが多くあります。また、データがバイナリのため、通信の中身を人が目で見て確かめにくく、不具合を調べるときには専用の道具が必要になります。



コメント