ソリッドシード株式会社

サービス間通信のgRPCって何?

2021年5月28日

最近ではコンポーネント単位で構築するマイクロサービスアーキテクチャが多くなってきました。
そのためコンポーネント同士をどのようにデータをやり取りするかの通信が重要になります。
今回はGoogleが開発して現在はオープンソースで公開しており、Linux FoundationのCloud Native Computing Foundation(CNCF)で開発をしているgRPCを紹介します。

gRPCとは?

gRPCはRPC技術を元にGoogleが開発をし、基本的なコンセプトは2015年にドキュメントを公開してます。
クライアント−サーバーモデルを採用しており、特定の言語やプラットフォームに依存しないような設計なのでクライアントとサーバが異なるプラットフォームでも通信ができるようになってます。
また、色々な言語で使用できるライブラリが提供されているので導入がしやすくなってます。
最新のサポートされている言語は公式ドキュメントを見ると記載してます。
2021年5月現在では下記の言語、OS、コンパイラ/SDKがサポートされてます。
■C/C++
Linux, Mac — GCC 4.9+, Clang 3.4+
Windows 7+ — Visual Studio 2015+
■C#
Linux, Mac — .NET Core, Mono 4+
Windows 7+ — .NET Core, NET 4.5+
■Dart
Windows, Linux, Mac — Dart 2.12+
■Go
Windows, Linux, Mac — Go 1.13+
■Java
Windows, Linux, Mac — JDK 8 recommended (Jelly Bean+ for Android)
■Kotlin
Windows, Linux, Mac — Kotlin 1.3+
■Node.js
Windows, Linux, Mac — Node v8+
■Objective-C
macOS 10.10+, iOS 9.0+ — Xcode 7.2+
■PHP
Linux, Mac — PHP 7.0+
■Python
Windows, Linux, Mac — Python 3.5+
■Ruby
Windows, Linux, Mac — Ruby 2.3+

gRPCを使うと何が良いのか?

最近ではサービス単位でコンポーネント化するマイクロサービスアーキテクチャが多くなっています。
例えば既にあるサービスのデータを別のサービスでも利用したい場合にそれぞれの環境が違う場合はデータ形式などの通信ルールを各環境を考慮して決める必要がありとても大変です。
gRPCは色々な言語のライブラリがあるので導入すればgRPCで統一できるため通信がやり易くなります。
他にも下記の良い事があります。
・やり取りするデータの型を「プロトコル定義ファイル」で事前に定義しておくことで数値と文字列を明確に区別しないためにトラブルが発生するのを防げる。
・HTTP/2を利用しているので効率的に通信ができる。
・色々な言語で実装できるライブラリがあるので、サーバ同士が違う言語でもデータのやり取りができるのでマイクロサービスアーキテクチャが実装しやすい。

最近では様々なWebアプリケーションで利用されているので、他サービスとデータ連携する時に検討してみてはどうでしょう。

投稿者:Saito