gRPC
https://gyazo.com/c11064b3a65bc96e62c89c6620807abf
grpc / grpc.io
なにこれ?
GoogleによるRPCの実装
RPCなので、クライアントでサーバのメソッドを直接呼び出すように扱うことができる
all the complexity of communication between different languages and environments is handled for you by gRPC
https://grpc.io/docs/tutorials/basic/php.html
HTTP/2が事実上必須
gRPC自体はプロトコルなのでHTTP/2以外でも実現できるが、HTTP/1.1はgRPCの要求を満たさないのでHTTP/2が利用されているらしい
bridge? https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/grpc_http1_bridge_filter
学習リソース
https://grpc.io/docs/languages/
チュートリアル
REST APIの設計で消耗している感じたときのgRPC入門 - Qiita
マイクロサービスバックエンドAPIのためのRESTとgRPC
ScalaPB + gRPC
コード例つきで見やすい
DroidKaigi 2018 gRPC/Protobuf // Speaker Deck
gRPCとRESTの使いどころ
gRPCから見たHTTP/2 - Qiita
サイボウズの2019年の新卒研修資料
import
messageの再利用
well-known-types
よく利用される定義済message
なんだかんだガチプロトタイピングにはTypeScript楽だしgRPCを手作りする - lilyum ensemble
HTTP/2をしゃべるgRPCサーバを実装する
gRPCの通信方式
Rebuild Episode 81
Rebuild: 81: Enable The Broken Web (Hajime Morrita)
Protobufが先にオープンソースになっていたが、RPCの実装は外に出ていなかった
公式として出すまでは野良実装がいくつかあった
HTTP/2ベース
RPCでほしいTCPのアプリケーションレイヤーの機能はHTTP/2に入っている
gRPCはユーザのコードを呼ぶぐらい
多重化
TCPのコネクション1本の上を複数のリクエスト/レスポンスが同時に走る
いままではできなかったのでTCPのコネクションを何本もはっていた
順番が決まっていた
RPCではリソース使い過ぎてしまうので多重化が必須だった
プッシュができる
HTTP/2ではデータをちょっと(フレーム)づつ送りつけることができるので、これを利用する
gRPCでは「Stream」と呼ばれる
gRPCでインターフェースを再整理してからサービスを分割─freeeの段階的なマイクロサービス戦略 - エンジニアHub(2020-03-30)
microservices化をどうやったか
スピード優先で別リポジトリに同じ機能がたくさん生えた
kadoyau.icon 多分別チームで作ってるから汎用的でない&コミュニケーションコスト自分で作ったほうが早いという構造がある
同一リポジトリに関連機能をはやした
リリースに含まれるコミット数が多くなる=障害頻度が上がる&切り戻しが大変→リリース頻度が落ちた
kadoyau.icon このあたり具体的な組織がわからないが、文面から類推するにたぶんチームの人数が増え、異なるチームが一つのリポジトリに相乗りしていたのだと思う
microservices化を目論む
1. 開発スピードの向上:更新を限定的にして、障害発生リスク&調査コストを減らす
2. 横断的な機能を共通基盤にする
再利用性が向上する機能を切り出す
今後伸ばしたい機能を切り出す