grpc-gatewayを試してみた
@saboyutaka
2018/06/14
Fukuoka.go #11
● 立花 豊(@saboyutaka)
● 福岡県北九州市出身 -> 東京 -> 沖縄
● ギークハウス沖縄オーナー
● フリーランス/リモート/Webエンジニア
● Rails/Laravel/Go/Python/AWS/Azure
● okinawa-go
● 最近、Microservices, k8sなんかに興味あります
自己紹介
最近のトレンド
Microservers
● コンポーネントをサービスごとに切り小さなサービス群をたくさん作ってたくさんの
サービスが連携することで1つのサービスを運用する
Microservers
● 各サービスはHTTP(S) のAPIを持ちJSONベースで通信する
● REST-ishなAPIを持つ
● Swaggerなどのドキュメントで開発者間のやりとりを行っていた
これまでのMicroservers
● REST APIをつくるサービスをどうやって作るか
○ Go? Rails? Laravel? Express?
● Swaggerと実装が乖離しないようにメンテするのが面倒
● Goで書くとしてJSON marshal/unmarshal がつらい
これまでのMicroserversの問題点
gRPC
● Google製のRPCプロトコル
● Protocol Buffersでインターフェースを定義 (default)
● クライアント、サーバーの実装のinterface, stubを自動生成
○ Go, PHP, JavaScript, Ruby, Python, Java, C++, etc...
gRPC
grpc-gateway
https://github.com/grpc-ecosystem/grpc-gateway
● gRPCのサーバーの手前に立てるリバースプロキシを定義
● このgatewayはHTTPSをしゃべれる
● grpc-gatewayの設定でURLを定義し、呼び出される処理はgrpcのサーバーに記述
する
grpc-gateway
w/o grpc-gateway
sample.proto
with grpc-gateway
protoc でserver, gateway, docs, swaggerを生成
server(gRPC側)の実装
gatewayの実装(ほぼおまじない)
実行してみる
Swagger
docs
● 通信の定義はprotocファイルを見ればわかる
● サーバー実装はgrpcが対応している言語であれば何でも良い
● protocからSwagger, docsを自動生成できる
● HTTPSの通信が必要なところはgrpc-gatewayで実装し、他のmicroservicesは
grpcで書ける
grpc-gatewayで書くメリット
ご清聴ありがとうございました
https://github.com/saboyutaka/grpc-gw-sample

grpc-gateway を試してみた fukuoka.go#11