gotoshin

主に学んだ事の自分メモ用です。記事に書くまでも無いような事はhttps://scrapbox.io/study-diary/に書いてます。

grpcコースをやってみる〜その1〜

今回やってみるコース

www.youtube.com

モチベーション

仕事で触れる機会があるが仕組みが何となくしかわかっていないため手を動かしながらやってみる

grpcとは

  • クライアントがリモートサーバの関数を呼び出す
    • 例えばRustで記述されたサーバの関数をGoのローカルから呼び出すことが可能
  • APIとデータ構造はProtocol Buffer Compilerによって自動生成される
  • 様々な異なる言語をサポートしている

どのように動くか

  1. protbufを使用しデータ構造とAPIの定義を作成する
  2. 作成した定義を元にサーバとクライアントのコードを自動生成する
    1. Protocol Buffer Compilerによって、選択した言語のコードを簡単に自動生成する事が可能
  3. 最後にサーバとクライアント側で呼び出し側と呼び出し元の実装をする

なぜHTTP JSON API ではなくGRPCを利用するのか

高パフォーマンスである

  1. HTTP2を利用しているため
  2. 転送データをバイナリフォーマットにする
  3. 複数リクエストを同じTCPコネクションで転送する
    1. http2 - What does multiplexing mean in HTTP/2 - Stack Overflow
  4. ヘッダ圧縮
    1. 今更ながら HTTP/2 について調べてまとめてみた
  5. 双方向通信
    1. HTTP/2における双方向通信とgRPCとこれから - Qiita

Strong API Contract

サーバとクライアントは同じprotを利用するため、データ構造などを同じものを利用できる(というか強制される)

コードの自動生成

  • サービス開発をより早くしてくれる
  • クライアント・サーバで利用するコードはgrpcによって自動生成されたコードを利用するだけなので、開発者はロジックに集中できる

4タイプの通信方法

grpc gateway

  • 1度のAPIコードの記載でhttpコードとgrpc両方を対応可能にする
  • 仕組みはhttpリクエストを一度gatewayを介すことによりgrpcリクエストへ変換し内部的にgrpcで処理する。レスポンス時はその逆。