Apitore blog

Apitoreを運営していた元起業家のブログ

API Meetup Tech Deep Dive Vol.1 -gRPC-

はじめに

今回はAPI Meetupの新しい企画でTech Deep Diveに参加しました。Tech回は個人的にとても好きで、いつも勉強になります。今回は、gRPCというプロトコルバッファの紹介と運用のお話でした。

What I learned about APIs in my first year at Google (Protocol Buffers and gRPC)

Tim Burks, Staff Software Engineer, Google Inc. 元々iOSのエンジニアだったが、APIに興味がありすぎてGoogleに入ってからAPIのことを始めた。 APIの仕事をはじめたときに思ってたこと

  • APIは必要だ
  • APIはちゃんと動くかテストしないといけない
  • APIはアプリケーションごとに最適な設計をしないといけない

GoogleはBig companyなので、、、

  • 自分の言語で実装する
  • 自分で最適化する
  • 自分で標準化する
  • 柔軟に、変化に対応できるようにする

protocol buffersが発明された

  • serialization mechanism
  • interface description language
  • methodology

Googleでは内部のAPIはすべてProtocol Buffersで通信している。gRPCはOSS。NetflixもgRPCを使い始めた。 gRPCはOpenAPIのサポートをはじめたところ。 ※つまり、WebAPIをgRPCで提供する時代がくる? ※Timさんにあとで話を聞いたところ、「2年位でサーバーサイドはgRPCのようなプロトコルバッファが主流の時代になる。フロント側はJSON(REST)。5年から10年もすればフロント部分もプロトコルバッファになる・・・かもしれない。」ということでした。今から時代を先取っておけば2年後にフリーランスで荒稼ぎできるかもしれません。

gRPC and REST with gRPC in practice (19:55〜20:25)

Masahiro Sano (@kazegusuri), Principal Engineer, Mercari Inc 特徴(さっきの講演からかぶってないところだけ)

  • コネクションをはりっぱなしにできるところが特徴。
  • RPCをクライアント側、サーバー側で突然終了しても許容。デッドラインとタイムアウトを設定できる。
  • 独自のステータスコードがある。
  • メッセージフォーマットは選べる。プロトコルバッファーに限らない。

gRPCの使い方 サーバー側

  1. proto定義を書く
  2. protoからGoコードを生成する(Goじゃなくてもよい)
  3. サービスを実装する
  4. gRPCサーバーを起動する

クライアント側

  1. protoからRubyコードを生成する(Rubyじゃなくてもよい)
  2. クライアント側を実装

RESTは必要か? →必要なシーンはある でもRESTに戻りたくない 大丈夫。grpc-gatewayがある。 →RESTからgRPCへ変換する proto定義からswagger specを生成できる。 gRPC-Web

  • grpcweb: gRPCサーバーをgRPC-Web protocolでラップ
  • ts-protoc-gen: ブラウザ向けのgRPC-Webクライアント
  • ...(書き漏らした)

課題

  • Interceptor
  • エラー時の詳細情報が仕様上の問題で返せない。どうしよう?全部OKにしてエラー用のメッセージを送るようにするのが現状解?
  • ロードバランスしづらい。一度つながっちゃうと固定。リクエスト単位でロードバランスするしかない。

メルカリではgRPCを一部に採用。 クライアントアプリに採用しようとして、、、断念。クライアントの更新はハンドリングが難しい。強制アップデートできるならやりやすいかも。 gRPCが使えない状況は多い。クラウドでは使えないことが多い。 ただし、http2にのってるから、周辺ツールは誰かがどんどん作ってくれる。

おわりに

gRPCの概要が分かる良い勉強会でした。Apitoreですぐに採用するわけにはいかないですが、キャッチアップだけはしておきます。 関係ない話ですが、Timさんは日本人に配慮してくれたのか、とてもゆっくり話してくれるジェントルマンでした。聞き取りやすかったです。直接お話したときも紳士な対応をしてくれました。GCPユーザーという話をしたら、GoogleのOfficialグッズをくれました。GCPロゴ入り枕です。この大雑把な感じがアメリカっぽくて良いですね! 最後に、会場にApitoreを知ってくれている方が居ました!Qiitaに投稿した技術ブログを読んでくれたそうです。ありがたいです。より一層がんばろうと思います☺