4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

雑: gRPC in Ruby

Last updated at Posted at 2019-04-24
1 / 15

image.png


image.png


gRPC とは

  • Google が開発している RPC フレームワーク
  • Protocol Buffers によるスキーマ定義、シリアライゼーション
  • Go, C++, Java, Python, そして Ruby など様々な言語に対応
    • protoc がスキーマ定義からコード生成してくれる
  • 複数のリクエスト・レスポンス形式
    • ストリームによるリクエストまたはレスポンスもできる
  • HTTP/2.0 によるトランスポート
    • ELB 等でロードバランシングできないので別の方法を考える必要がある

gRPC in Ruby

  • grpc/grpc という monorepo で他の言語とともに開発されている
    • grpc-go とかは別リポジトリになっている
  • 一部 C による Extension として書かれている
  • マルチスレッドサーバー
  • Interceptor により Server/Client の両方でフックポイントに実装を挟める

Interceptor


独断と偏見、gRPC in Ruby における二大問題

  • Interceptor がイマイチ
  • マルチプロセスじゃないのでスケールしにくい

Interceptor がイマイチ

  • レスポンスを取ることができない (nil が返る)
    • レスポンスをフィルタしたり、ログしたりができない
  • ストリームをラップしたりすることができない
    • Go とかはできる
    • ストリームの内容をログしたり、メトリクスを残すことができない
  • 結果として普通に誰か作ってるだろうという Interceptor が GitHub にも転がっていない
    • NewRelic でメトリクスとるやつとか、エラーを Sentry に投げるやつとか
    • Rack Middleware とかに比べるとエコシステムがあまりにも残念

マルチプロセスじゃないのでスケールしにくい

  • Ruby には GVL があるので

grpc/grpc 以外の実装


cookpad/griffin

  • Cookpad 独自実装の gRPC Server
  • 僕が思う二大問題を両方解決している!!!
  • マルチプロセス x マルチスレッド
  • ただし、Interceptor のインターフェイスが微妙に異なるので互換性がない (はず)
  • cookpad/griffin-interceptors に欲しい Interceptor がだいたいある

twitchtv/twirp

  • gRPC ではなく、Protocol Buffers を使った Twitch 独自の RPC フレームワーク
  • 欲しいのは gRPC それ自体ではなく Protocol Buffers なんだ!的な
  • Go, Ruby 等の実装がある
  • HTTP/1.1 によるトランスポート
  • Rack に準拠しているそうなので Middleware とかも使えるっぽい (自分で試すことなく適当なことを言っています)
  • ストリームはない

趣味としての活動


yuya-takeyama/ruby-grpc_prometheus


雑: gRPC in Ruby (終)

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?