gRPCは、あらゆる環境で実行できる、モダンでオープンソースの高性能RPC(Remote Procedure Call)フレームワークです。ロードバランシング、トレース、ヘルスチェック、認証のプラグイン可能なサポートにより、データセンター内外のサービスを効率的に接続できます。また、デバイス、モバイルアプリケーション、ブラウザをバックエンドサービスに接続するための、分散コンピューティングのラストマイルにも適用可能です。
主な利用シナリオ
- マイクロサービススタイルのアーキテクチャにおける、ポリグロットサービスの効率的な接続
- モバイルデバイス、ブラウザクライアントとバックエンドサービスの接続
- 効率的なクライアントライブラリの生成
gRPCを優れたものにしているコア機能
- 11言語での、様式化されたクライアントライブラリ
- ワイヤー上での高い効率と、シンプルなサービス定義フレームワーク
- HTTP/2ベースのトランスポートによる双方向ストリーミング
- プラグイン可能な認証、トレース、ロードバランシング、ヘルスチェック
gRPCの利用ユーザーと理由
多くの企業がすでにgRPCを、環境内の複数のサービスを接続するために利用しています。ユースケースは、数個のサービスから、オンプレミスまたはクラウド環境の様々な言語にまたがる数百のサービスまで多岐にわたります。以下に、初期導入ユーザーからの詳細と引用を紹介します。
以下で、人々がどのようなことを言っているかご覧ください。
Squareでは、Googleと協力して、カスタムRPCソリューションのすべての用途をgRPCに置き換えることができるようにしてきました。私たちは、複数のプラットフォームに対するオープンなサポート、プロトコルの実証されたパフォーマンス、そしてネットワークに合わせてカスタマイズおよび適応できる能力から、gRPCに移行することを決定しました。Squareの開発者は、ストリーミングAPIを記述できること、そして将来的には、モバイルクライアントやサードパーティAPIとの統合のためにgRPCをネットワークのエッジにプッシュできることを楽しみにしています。

gRPCの初期使用において、私たちはそれを容易に拡張して、私たちの意見を反映したエコシステム内に配置することができました。さらに、プルリクエストやプロジェクトを管理するGoogleのチームとのやり取りを通じてgRPCに直接改善を加えることで、大きな成功を収めてきました。gRPCを採用した結果、開発者の生産性の向上、そしてJVM以外の言語での開発を可能にする能力を期待しています。

自社開発のRPCシステムからgRPCへの移行はシームレスでした。私たちは、小さなRPCと同じ接続上で大きなRPCのスケジューリングを改善するために、ストリームごとのフローコントロールを迅速に活用しました。
高性能な双方向ストリーミング、TLSベースのセキュリティ、そして多種多様なプログラミング言語のサポートにより、gRPCはモデル駆動型構成およびテレメトリのための理想的な統一トランスポートプロトコルです。

gRPCがHTTP/2トランスポート上に構築されているという事実は、ネイティブな双方向ストリーミング機能と、リクエストヘッダーにおける柔軟なカスタムメタデータをもたらします。最初の点は、大規模なペイロード交換やネットワークテレメトリのシナリオにとって重要であり、後者の点は、様々なネットワーク要素認証メカニズムを含む(ただしそれに限定されない)機能を拡張および含めることを可能にします。さらに、gRPC/proto3が提供する幅広い言語バインディングサポートにより、内部および外部のコンシューマーの両方にとって、柔軟で迅速な開発環境を提供できます。そして最後に、構成、運用状態の取得、ネットワークテレメトリのための多くのネットワーク通信プロトコルがある中で、gRPCはクライアント/サーバー間のやり取りを容易にするための、統一された柔軟なプロトコルとトランスポートを提供します。
gRPCの背景にあるストーリー
gRPCは当初Googleによって作成され、Googleは10年以上にわたり、データセンター内外で実行される多数のマイクロサービスを接続するために、Stubbyと呼ばれる汎用RPCインフラストラクチャを単一で使用してきました。2015年3月、GoogleはStubbyの次世代バージョンを構築し、オープンソース化することを決定しました。その結果がgRPCであり、現在ではGoogle以外の多くの組織で、マイクロサービスからコンピューティングの「ラストマイル」(モバイル、Web、IoT)までのユースケースを支えるために使用されています。
gRPCを作成した理由の詳細については、gRPCブログのgRPCの動機と設計原則をご覧ください。