Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
gRPC入門
Search
Taiga Sakaguchi
November 19, 2022
Technology
0
180
gRPC入門
Taiga Sakaguchi
November 19, 2022
Tweet
Share
More Decks by Taiga Sakaguchi
See All by Taiga Sakaguchi
トランクベース開発のすすめ
taigaskg
0
100
クリーンアーキテクチャのすすめ
taigaskg
0
270
Other Decks in Technology
See All in Technology
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
190
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
600
私なりのAIのご紹介 [2024年版]
qt_luigi
1
120
KubeCon NA 2024 Recap: How to Move from Ingress to Gateway API with Minimal Hassle
ysakotch
0
200
10分で学ぶKubernetesコンテナセキュリティ/10min-k8s-container-sec
mochizuki875
3
320
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
150
なぜCodeceptJSを選んだか
goataka
0
150
KnowledgeBaseDocuments APIでベクトルインデックス管理を自動化する
iidaxs
1
250
How to be an AWS Community Builder | 君もAWS Community Builderになろう!〜2024 冬 CB募集直前対策編?!〜
coosuke
PRO
2
2.8k
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
1
240
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
140
Kubeshark で Kubernetes の Traffic を眺めてみよう/Let's Look at k8s Traffic with Kubeshark
kota2and3kan
3
370
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.3k
Optimising Largest Contentful Paint
csswizardry
33
3k
Typedesign – Prime Four
hannesfritz
40
2.4k
Code Reviewing Like a Champion
maltzj
520
39k
A Philosophy of Restraint
colly
203
16k
GraphQLとの向き合い方2022年版
quramy
44
13k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Building an army of robots
kneath
302
44k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Transcript
gRPC 入門 Taiga Sakaguchi 1
Sakaguchi Taiga 教員→Web エンジニア 歴3 年 バックエンドエンジニア 都内メガベンチャーに勤務 2
gRPC とは Google によって開発されたRPC フレームワーク 3
RPC とは Remote Procedure Call の頭字語(遠隔手続き呼び出し) ネットワークを通じて別のコンピュータ上で動作するソフトウェア の関数を呼び出すための仕様 4
一般的な関数呼び出し 5
RPC における関数呼び出し 6
RPC の何が嬉しいのか ローカルの関数かリモートの関数かを意識せずにコードを書くこと ができる 7
type Server struct {} type User struct{ ID string }
func (s *Server) GetUser(id string) *User {} type Client struct {} func (c *Client)DoSomething() { u := c.GetUser("userid") } 8
REST だったら type Server struct {} func main() { r
:= gin.Default() r.GET("/user/:id", getUser) r.Run() } func getUser(c *gin.Context) {} type Client struct {} func (c *Client) DoSomething() { resp, err := http.Get("http://user/1") } 9
https://grpc.io/docs/what-is-grpc/introduction/ 10
Protocol Buffers Google により開発 IDL (インターフェース定義言語) 通信や永続化での利用を目的としたシリアライズフォーマット コードやDocs など自動生成できる 11
syntax = "proto3"; service User { rpc GetUser(GetUserRequest) returns (GetUserResponse)
{} } message GetUserRequest { string id = 1; } message GetUserResponse { string id = 1; string name = 2; } 12
サーバー用の生成コード // ... type UserServer interface { GetUser(context.Context, *GetUserRequest) (*GetUserResponse,
error) mustEmbedUnimplementedUserServer() } // ... 13
クライアント用の生成コード // ... type UserClient interface { GetUser(ctx context.Context, in
*GetUserRequest, opts ...grpc.CallOption) (*GetUserResponse, error) } func NewUserClient(cc grpc.ClientConnInterface) UserClient { return &userClient{cc} } // ... 14
ここでクイズ gRPC の「g 」の意味はなんでしょうか? 1. Google 2. Good 3. Great
4. Game 15
ここでクイズ gRPC の「g 」の意味はなんでしょうか? 1. Google 2. Good 3. Great
4. Game 16
gRPC の「g 」はバージョンごとに意味がかわるらしい https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md 17
gRPC のメリット HTTP/2 で通信 Protocol Buffers によるシリアライズ ストリーミング処理 多くの言語に対応(Go, Java,
Kotlin, Node, PHP, Python, Ruby,... ) 18
4 つの通信方式 Unary RPC Server streaming RPC Client streaming RPC
Bidirectional streaming PRC 19
Unary RPC 1 Request - 1 Response 20
Server streaming RPC 1 Request - N Response 例)push 通知など
21
Client streaming RPC N Request - 1 Response 例)データを分割して複数回に分けてアップロード 22
Bidirectional streaming PRC WebSocket のような双方向通 例) チャット 23
gRPC のデメリット PRC の設計に気をつけないと破綻する 実装に時間がかかる ブラウザでのサポートが十分でない 24
gRPC が向いているケース Microservice プライベートなAPI モバイル、IoT 25
ブラウザ - サーバー間で導入するには grpc-web grpc-gateway connect 26
grpc-web 27
grpc-gateway 28
connect https://connect.build/ 29
connect 30
参考 https://grpc.io/ https://zenn.dev/hsaki/books/golang-grpc-starting https://christina04.hatenablog.com/entry/2017/11/13/190000 https://qiita.com/gold-kou/items/a1cc2be6045723e242eb 31
32