gRPC

luagate/grpc-introgRPC入門20Web 開発

上から下へ、全 20 枚そのまま並べています。

発表モードで開く

gRPC入門

gRPC

サービス同士を高速につなぐ通信のしくみ

1
1

目次

今日の流れ

1. gRPCって何のためにあるの?

2. RPCという考え方

3. Protocol Buffers — 約束ごとの設計図

4. RESTとの違いと使いどころ

5. まとめと振り返り

2
2
gRPC入門 - イントロ

今日のゴール

この時間で身につけてほしいことです。

  • gRPCが「サービス間を高速につなぐ仕組み」だと分かる
  • RPC(遠隔の関数呼び出し)の発想をつかむ
  • Protocol Buffersの役割を説明できる
  • RESTとの違いをイメージできる
  • どんな場面で使われるか思い浮かべられる
10
3
gRPC入門 - イントロ

gRPC とは

離れたサーバーの機能を、まるで手元の関数のように呼び出せる通信の仕組みです。

gRPC(ジーアールピーシー)

Googleが作ったRPCの仕組み。離れたサービスの関数を呼び出す形で通信し、Protocol Buffersという効率的な形式でデータを高速にやり取りする。

関数を呼ぶ感覚でサーバーの処理を実行できる

データを小さく速く送れる(バイナリ形式)

HTTP/2を土台にしている

マイクロサービス間の通信でよく使われる

11
4
gRPC入門 - イントロ

gRPC = 内線で直接お願いするイメージ

離れた担当者に内線で「これお願い」と直接頼む感覚に似ています。

呼ぶ側(クライアント)
  • 手元の関数を呼ぶように頼む
  • 裏で通信しているのを意識しない
約束ごと(.proto)
  • 関数名と引数を事前に定義
  • 両者が同じ設計図を共有
応える側(サーバー)
  • 頼まれた処理を実行
  • 結果を効率よく返す
12
5

gRPC入門 - RPC

2

第2部 RPCという考え方

遠くの処理を関数のように呼ぶ

20
6
gRPC入門 - RPC

RPC とは

離れたコンピュータの処理を、自分の関数を呼ぶように実行する考え方です。

RPC(アールピーシー / Remote Procedure Call)

ネットワークの先にある処理を、あたかも手元の関数を呼び出すかのように実行する仕組み。通信の細かい部分は裏に隠される。

遠隔の処理 = 関数呼び出しに見える

通信のやり取りは自動でやってくれる

「何をしてほしいか」を関数名で表す

gRPCはこのRPCを高速に実現したもの

21
7
gRPC入門 - RPC

呼ぶ側のイメージ

裏ではネットワーク通信ですが、書く側は普通の関数呼び出しのように扱えます。

javascript
// 離れたサーバーの getUser を、手元の関数のように呼ぶ
const user = await client.getUser({ id: 1 });

console.log(user.name);  // 田中 太郎

// 裏ではgRPCがネットワーク通信をこなしている
// 呼ぶ側は通信を意識しなくてよい
22
8
gRPC入門 - RPC

呼び出しが届くまでの流れ

関数を呼んでから結果が返るまで、gRPCが裏でこんな仕事をしています。

1. 関数を呼ぶ

クライアントが getUser のように処理を呼び出す

2. 詰めて送る

引数を効率的な形式にまとめてサーバーへ送る

3. 実行

サーバーが対応する処理を実行する

4. 結果を返す

結果を詰めて返し、呼んだ側が受け取る

23
9

gRPC入門 - protobuf

3

第3部 Protocol Buffers

約束ごとの設計図

30
10
gRPC入門 - protobuf

Protocol Buffers とは

データの形と、呼べる処理を定義する共通の設計図です。

Protocol Buffers(プロトコルバッファーズ / protobuf)

gRPCで使うデータ定義の仕組み。どんな項目があり、どんな処理を呼べるかを.protoファイルに書き、効率的なバイナリ形式でやり取りする。

.protoファイルに型と処理を定義する

JSONより小さく速いバイナリで送れる

定義から各言語のコードを自動生成できる

クライアントとサーバーが同じ定義を共有する

31
11
gRPC入門 - protobuf

.proto の定義(例)

扱うデータの形と、呼べる処理(サービス)を1つのファイルに書きます。

protobuf
// ユーザーのデータの形
message User {
  int32 id = 1;
  string name = 2;
}

// 呼べる処理の定義
service UserService {
  rpc GetUser(GetUserRequest) returns (User);
}

message GetUserRequest {
  int32 id = 1;
}
32
12
gRPC入門 - protobuf

同じデータの送信サイズ(イメージ)

protobufはバイナリで詰めるため、テキストのJSONより小さくなる傾向があります。あくまでイメージの比較です。

100 相対サイズ806040200
100相対サイズ
35相対サイズ
JSON(テキスト)
Protocol Buffers

出典: データ量の傾向を示す概念図(概算)

33
13

gRPC入門 - 使いどころ

4

第4部 RESTとの違い

どこで使い分けるか

40
14
gRPC入門 - 使いどころ

REST と gRPC のちがい

データの形式や得意分野が異なります。用途で選びます。

REST
gRPC

データ形式

JSON(テキスト)

Protocol Buffers(バイナリ)

呼び方

URLとメソッドで操作

関数を呼ぶ感覚

得意なこと

ブラウザや外部公開API

サービス間の高速通信

読みやすさ

人が目で読める

効率重視で人には読みにくい

41
15
gRPC入門 - 使いどころ

gRPCが向く場面・向かない場面

速さと型の厳密さが強みですが、ブラウザ直接利用には工夫がいります。

向いている

  • マイクロサービス同士の通信
  • 大量・高頻度のやり取り
  • 型を厳密に守りたいとき
  • 複数言語が混在する社内システム
  • 低遅延が欲しい処理

向かない・注意

  • ブラウザから直接叩く用途
  • 誰でも使える公開API
  • 人がURLで叩いて試したいとき
  • ブラウザ利用にはgRPC-Webなどが必要
  • ここはRESTが手軽なことが多い
42
16
gRPC入門 - まとめ
クイズ

振り返りクイズ

今日の内容を確認しましょう。

gRPCがRESTと大きく違う点として、最も適切なものはどれ?

A
URLを使わず必ずメールで通信する
B
関数を呼ぶ感覚で、効率的なバイナリ形式でやり取りする
C
データベースを内蔵している
D
暗号化が一切できない
50
17
gRPC入門 - まとめ
答え

振り返りクイズ 解答

gRPCがRESTと大きく違う点として、最も適切なものはどれ?

A
URLを使わず必ずメールで通信する
B
関数を呼ぶ感覚で、効率的なバイナリ形式でやり取りする
C
データベースを内蔵している
D
暗号化が一切できない

gRPCは離れた処理を関数呼び出しのように扱い、Protocol Buffersという効率的なバイナリ形式でデータを送ります。だからサービス間の高速・大量通信に向いています。JSONテキストのRESTとはここが大きく違います。

51
18
gRPC入門 - まとめ

質疑・次回予告

今日のまとめと、次に学ぶテーマです。質問があればここで受け付けます。

今日のおさらい
  • gRPCは関数を呼ぶ感覚の高速通信
  • Protocol Buffersで小さく速く送る
  • サービス間通信に強い
次回予告
  • 暗号化の基礎 〜なぜ・どうやって隠すのか〜
  • セキュリティの土台を学ぶ
52
19
"

gRPCは「離れたサービスの処理を、手元の関数のように高速に呼ぶ仕組み」。Protocol Buffersで小さく速く。サービスが増えるほど、その価値が効いてきます。

gRPC入門

53
20