プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • gRPC
  • 【gRPC】基本
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【gRPC】基本

05.31

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

gRPCとは?

Googleが開発したオープンソースの高性能なリモートプロシージャコールです。あるコンピュータで実行されるプログラムを別コンピュータに機能を依頼する手法のこと。

低遅延、高いスループット、多言語対応などの特徴があります。

Googleが開発しただけあって、Go言語使っている人には非常に人気の通信規格。(GoogleのAPIを利用する場合はRESTかgRPCか選べるような仕様になっていることが多い。)

昔あったRPCをHTTP/2のバイナリをベースとしたプロトコルを使用しています。

RPC(リモートプロシージャコール)

リモートにあるメソッドを呼び出せること。

Protocol Buffers

プロトコルバッファをシリアライゼーションフォーマット(データ型をどのようにバイトデータに変化関して通信するかのこと)として採用しております。

一つのTCPコネクションで並列したやりとりができます。

構造は.protoファイルに記述する。(serviceやmessageなどを定義する。)

用途

  • マイクロサービス間の通信、
  • API通信

効率的な通信が求められる。特に、マイクロサービス間(バックエンド間)の通信でよく使われています。

特徴

ストリーミング

リクエストやレスポンスなどの送信を効率的に行うためのものでクライアントサーバー間でバイディレクショナルな通信が可能となる。

普通の通信(Unary RPC)

1リクエスト1レスポンスの普通の通信。これも普通にできる。従来のRESTはこれ。

サーバーストリーミング

クライアントが1回通信を送ってサーバーが何度も通信を返す。push通知などで使う。

例:最初にログインして通信を繋いでおいて、サーバー側からpushで通信をもらう。

RESTだとwebsocketを導入しなきゃいけなかったが、gRPCであればgRPCだけで完結することができる。

クライアントストリーミング

ファイルアップロードなど。クライアント側から小刻みにデータを送ることができる。

双方向ストリーミング(Bidirectional streaming RPC)

クライアント側からもサーバー側からもデータを何度も送ることができる。活用例:チャットやゲームなど。

デッドライン、キャンセル

リクエストが長期間実行されないようにするためのもの。リソースの節約に役立つ。

フロー制御

通信の速度を管理するために使用される。クライアントサーバーが適切なペースでデータ送受信できるようになる。

エラーハンドリング

通信中にエラーが発生した場合に適切な対処ができるようになる。

アーキテクチャ

プラグインアーキテクチャを採用しています。

カスタム認証

ロードバランシング

リトライポリシー

開発の流れ

スキーマ駆動で開発します。

1.「.protoファイル」でスキーマ定義

REST APIで言うところのswagger的なもの。フォーマットが固定されるので、クライアントサーバー間で認識の違いがなくなる。

service

リモートから呼ばれるメソッドのリクエストとレスポンスを定義する。

message

リクエストとレスポンスのデータ型を定義する。

2.コード自動生成

.protoファイルから自動でコードを生成できます。protocコマンド。サーバークライアントともに自動生成される。

3.コードにロジック追加

生成されたコードにロジックを追加します。

実装

proxyが必要。

Envoyなどがよく使われる。DockerImageで提供されているので、Dockerで構築するのが楽。

8080で受け取ったリクエストを9090に通信をproxyしてくれる。

protoファイル

api側の実装

クライアント側の実装

npmで、「google-protobuf」や、「grpc-web」などが必要。

grpc-web

  • gRPCをWebブラウザで利用するためのライブラリ。HTTP1の下位互換性もある。
  • HTTP1ではテキストしか扱えないので、Protocol BuffersによってシリアライズされたデータはBase64でエンコードされる。
  • 2021年時点ではUnary RPCとServer streaming RPCに対応していた。
  • なお、grpc-webであればenvoy-proxyは必要なく開発ができる(BFFはコストがかかる。)

デメリットとしては、

  • swagger UIのようなものがない。
  • エンコードされていて中身が見えない。(シリアライズされている中身を見るChrome Extensionなどもある。gCapなど。)
  • ライブラリが非常に重い。
  • クライアントサイドでデシリアライズするためのstubファイルが大きい。

スポンサーリンク
  • 2025 05.31
  • miyabisan2
  • コメントを書く
  • gRPC
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る
  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【cursor】基本

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー