1 of 20

connect-go で

マイクロサービスを動かす

mercari.go #20

2 of 20

自己紹介

  • knsh14(かまたけんし)
  • merpay payment platform
  • イベント運営の手伝いとか

3 of 20

agenda

  • 動かす mercari-microservice-example の紹介
  • connect-go の話
  • mercari-microservice-example を改造していく
    • どんな作業をしたか
    • ハマったところ
  • 動かしてみた感想

4 of 20

動かす mercari-microservice-example の紹介

  • メルカリの(っぽい)バックエンドサービスが動かせるサンプル
  • 複数のマイクロサービスが動いて全体のバックエンドを構成する
    • gateway, authority, catalog, customer
  • GoCon のハンズオンデモを OSS に
  • 最近 M1 Mac でも動くようになった

5 of 20

デモ: 公開スライドではスキップします

6 of 20

connect-go とは...?

  • connect という gRPC の実装の Go 向け実装
    • https://connect.build/
    • gRPC と互換性があるがよりシンプルなのが売り
  • connect の対応言語は少なめ
    • Go と TypeScript
  • [参考資料]フューチャー技術ブログ

7 of 20

mercari-microservice-example を改造していく

  • gRPC を使っているところを connect に置き換えていく
    • gRPC サーバーとして動かすところを connect サーバーに
    • client も gRPC クライアントから connect クライアントに
  • 目標は gPRC 関係の import を全部消す
  • 作業ブランチ

8 of 20

mercari-microservice-example を改造していく

  • ステップ
    • connect-go のコード生成を設定する
    • server/client を connect-go に置き換えていく
    • gRPC-gateway の代わりを探す
    • interceptor を置き換える
    • graceful shutdown できるようにする

9 of 20

connect-go のコード生成を設定する

  • 公式ドキュメントの設定をそのまま使う
  • output だけ既存の設定と合わせたが、ほぼそのまま
  • もっと知りたい人は buf コマンドのドキュメントを読んでください

10 of 20

connect-go のコード生成を設定する

11 of 20

server を connect-go に置き換えていく

  • 単純な実装で置き換える
  • TLS を切って動かす

12 of 20

server を connect-go に置き換えていく

platform/db/grpc/grpc.go

13 of 20

client を connect-go に置き換えていく

  • client を connect client に置き換える
  • サーバーが TLS を切っているので、client も切る
    • Insecure モードで動かすようにする
  • 対象サービスのアドレスが変わる
    • プロトコル(http://)をつけて上げる必要がある
  • サービスの実装で使ってる部分を変える

14 of 20

client を connect-go に置き換えていく

services/authority/grpc/grpc.go

15 of 20

gRPC-gateway の代わりを探す

  • grpc-gateway
    • https://github.com/grpc-ecosystem/grpc-gateway
    • REST HTTP request を gPRC に変換するプラグイン
    • gateway service で使っている
  • 代わりになるものが見つからなかった…
  • gateway が消せないので、gPRC を消す目標は達成できず

16 of 20

gRPC-gateway の代わりを探す

17 of 20

interceptor を置き換える

  • ここでも公式ドキュメントがある
  • log interceptor などは自前で実装できた
  • まだまだ充実してないエリア

18 of 20

graceful shutdown できるようにする

  • まだ自分は未実装
  • 公式の demo アプリに実装があるので参考にして行く予定

19 of 20

connect やってみた感想

  • 公式のガイドを読めば移行する手順はだいたい分かる
  • かなり net/http のお作法に乗るような実装がしやすい
  • grpc-gateway を使っている場合は gRPC を使い続ける必要がある

20 of 20

まとめ

  • gRPC -> connect は結構簡単に進められた
  • ただまだできないこともいくつかある
  • mercari-microservice-example でいろんな技術を試せる
    • 簡単に動かせて色々なマイクロサービスがある
    • jaegar をもっと使い倒してみるとか
    • DB を Cloud Spanner にしてみるとか