Upgrade to Pro — share decks privately, control downloads, hide ads and more …

メルカリの Microservices 化について

vkgtaro
July 18, 2018

メルカリの Microservices 化について

Backend Engineer Drink Meetup #1 で話した内容です。
https://mercari.connpass.com/event/93613/

vkgtaro

July 18, 2018
Tweet

More Decks by vkgtaro

Other Decks in Programming

Transcript

  1. お前、誰よ? • @vkgtaro • 元劇団員 • Backend Engineer • Tech

    Lead at JP-UX team • 入社9ヶ月くらい • メルチャン/メルカリボックス(Web) • らくらく/ゆうゆう/大型 • Offer Microservice
  2. Why

  3. Microservice 化への先駆け • 今までどおりモノリシックな API へ追加することも考えました が、Offer は Microservice Platform

    上での機能として開発、リ リースしました • Microservice Platform チームと slack や github issue を使っ て相談しつつ開発を進めました • リリース前には Platform チームからリリース前にはやっておく リストを Github issue でもらってチェックを付けながら進めまし た ◦ CloudSQL のインスタンスサイズ決める ◦ SLO を決めるとか
  4. 循環参照しないようにする • Offer から mercari-api へのアクセスはしているが、 mercari-api から Offer へ

    のアクセスはしない • Offer は buyer/seller の user_id, item_id は持っているが詳細は持っていない ので都度 mercari-api に問い合わせしている • mercari-api で変更があった場合に通知したいときは PubSub を使用する方針 ◦ (今はないけど、リアルタイムに情報がほしいところがあるので実装したい) Offer Mercari API PubSub publish subscription
  5. deploy • Circle CI で docker image をビルドして GCR へプッ

    シュすると Spinnaker 側に作ってある PIPELINE の trigger が働いて deploy します。 特定の tag の image を trigger に指定
  6. deploy • Spinaker 側には develop / production の2系統をを用意 • この設定はエンジニア全員見ることができる

    • 自分たちも他のプロジェクト参考にするために参照しまし た。
  7. deploy • github で stage/development にマージしたら Circle CI が develop

    用の image を GCR に push ◦ Spinnaker が受けて develop 環境へ deploy • 同じように production も stage/production へマージした ら image を作って push されますが…… ◦ Spinnaker の production 環境への trigger は有効に しておらず、手動で deploy するようにしてます
  8. Offer の Pod 構成 • Offer は CloudSQL を使っているので、サイドカーパター ンで

    CloudSQL Proxy も一緒に deploy してます Offer CloudS QL Proxy Offer CloudS QL Proxy Offer CloudS QL Proxy CloudSQL
  9. Protocol Buffers over HTTP • Offer は API Gateway とは

    gRPC で通信していて、iOS / Android は protbuf を HTTP で通信しています。 API Gateway Offer Microservice Protobuf + HTTP gRPC
  10. Authority Service • API GW は Authority Service と連携して、Mercari API

    に確認した上で Private Access Token という独自のトークンを渡してくるので、 Offer 側では それを持って access token を取得してます API Gateway Offer Authority MercariAPI 1 2 5 6 3 4 Authority SDK
  11. Interface は proto ファイルで管理 • API の Interface は Proto

    ファイルで管理しています • このリポジトリに proto ファイルを上げると自動で各言語の protbuf モジュール が自動で作成されます • Offer はインターフェイス決定した後、 proto ファイルをここに上げて自動生成 されたパッケージを組み込み開発してる • 当時 iOS と Android は Swift, Java の自動生成の仕組みが間に合わなかっ たので、この protobuf から生成してもらって使ってる • Offer のバックエンド開発中は、これで生成された PHP モジュールを使用して モックを作り iOS, Android の開発に使用してもらった
  12. Infrastructure as a Code • GCP は Terraform を使ってコントロール •

    変更したい内容を PR にあげて、マージしてもらうと自動で 適用される •   各チームの設定が Terraform の設定ファイルとして可 視化されていて、みんなどうしてるんだろうというのがわか りやすい
  13. CloudSQL のインスタンスサイズを変える • Offer は Internal Release で社内の一部の人のみに向け てリリースしていた •

    その時 CloudSQL のインスタンスサイズは小さいのを使っ てた • カテゴリを絞ってリリースする際に見積もりをして instance size を決めました • Terraform で instance size を変えて apply してもらったら DB が消えた!
  14. CloudSQL の failover を試す • CloudSQL は failover の仕組みがあるので事前に試した •

    failover replica を作って同期完了したあと、admin console から failover させて、master 昇格した方に application が接 続しているか確認しました • 安心!
  15. CSTool のつなぎ込み • お客さまと商品ベースでオファーの状態をみるために CSTool から Offer MS へつ なぎこんでいます

    • MS Platform チームとの話し合いで、 API Gateway を通して接続することに • CSTool 用の Google Service Account を用意して、 Google OAuth を通して JWT トークンを作成 • JWT トークンを Authority ヘッダに含めることでどの Service Account から着てい るのかを特定して Offer はレスポンスするようにしています API Gateway Offer CSTool Google