はじめに
gRPCに触れる機会があったので、どのような技術か調べてみました。 ※あまり英語は得意でないので認識違いを含む可能性があります。正確な理解が必要な場合、リンク先を参照することを強く勧めます。
gRPCとは
まず、gRPCの公式サイトを訪れたところ、以下のようなフレーズが最初に表示されました。
A high performance, open source universal RPC framework
直訳すると、「高パフォーマンスでオープンソースの汎用的なRPCフレームワーク」といった感じでしょうか。
RPCとは
gRPCを理解するために、まずRPCを理解する必要がありそうです。 RPCとは「Remote Procedure Call」の略で、ネットワーク上の他のコンピュータプログラムを呼び出す技術やプロトコルを指す用語です。
RPCの基本的な実行手順は以下のようになっています。
www.hpcs.cs.tsukuba.ac.jp http://www-higashi.ist.osaka-u.ac.jp/~nakata/mobile-cp/www-higashi.ist.osaka-u.ac.jp learn.microsoft.com
参考文献にはさらに詳しい話があるのですが、ここでは「RPCはクライアントからリモートサーバー上のプログラムを呼び出すために使われるプロトコルの1つ」といった理解に留めておきます。
改めてgRPCとは
ここで改めてgRPCについて理解をしていこうと思います。 gRPCのIntroductionをひととおり読んでみると以下のような技術のようです。
- コンピュータ間のプログラムの呼び出しを行うRPCベースの技術
- インターフェイスの定義とメッセージの交換形式にProtocol Buffersを使用する
- 多様な言語をサポートしており、異なる言語で書かれたプログラム間でのメソッド呼び出しができる
https://grpc.io/docs/what-is-grpc/introduction/
つまりgRPCは、RPC上の各登場人物間のやり取り(≒処理の呼び出し、メッセージの転送)の仕方にProtocol Buffersと呼ばれる技術を使っており、異なる言語間でのメソッド呼び出しをサポートするRPCベースのフレームワーク、といった理解ができそうです。
Protocol Buffers とは
gRPCではProtocol Buffersを使用しているとのことでしたが、Protocol Buffersについても知らないので調べました。 Protocol Buffersドキュメントを確認すると、以下のような文がありました。
Protocol Buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data.
Protocol BuffersとはGoogleが作った、言語・プラットフォームに依存しない、構造化データをシリアライズするための、拡張性のあるメカニズムといった感じでしょうか。
さらに読み進めると以下のような特徴を有する技術のようです。
- 定義言語がある
- 定義言語を使って
.proto
ファイルを作り、コンパイラを通すことでデータとインターフェイスを生成する- コンパイルをしてさまざまな言語で扱えるコードを生成する
- コンパイル先の言語に特化したランタイムのライブラリがある
- データのシリアライズのフォーマットを定義している
つまり、Protocol Buffersとは、言語、言語のコンパイラ、各言語向けのランタイム、シリアライズのフォーマット」という感じのようです。
ここまで読んだ感じ、gRPCの異なる言語間でのメソッド呼び出しという特徴は、Protocol Buffersによって成立している部分が大きそうな印象でした。
まとめ
gRPCは「コンピュータ間でのメソッド呼び出しを行う技術の1つであるRPCをベースに作られた、言語に依存しないフレームワーク」ということがわかりました。
参考資料
- https://grpc.io/
- https://www.ntt-west.co.jp/business/glossary/words-00229.html
- http://www.hpcs.cs.tsukuba.ac.jp/~msato/lecture-note/dsys-2013/
- http://www-higashi.ist.osaka-u.ac.jp/~nakata/mobile-cp/
- https://learn.microsoft.com/ja-jp/windows/win32/rpc/how-rpc-works
- https://grpc.io/docs/what-is-grpc/introduction/
- https://protobuf.dev/overview/
- https://protobuf.dev/support/cross-version-runtime-guarantee/