Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
メルカリの Microservices 化について
Search
vkgtaro
July 18, 2018
Programming
2
2.3k
メルカリの Microservices 化について
Backend Engineer Drink Meetup #1 で話した内容です。
https://mercari.connpass.com/event/93613/
vkgtaro
July 18, 2018
Tweet
Share
More Decks by vkgtaro
See All by vkgtaro
急成長させるサービスに突っ込まれた話
vkgtaro
0
2.4k
Other Decks in Programming
See All in Programming
Netty Chicago Java User Group 2024-04-17
sullis
0
180
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.4k
2 週間で Twitter Bot を作ってみた
contour_gara
0
570
障害対応を起点としたもっといい開発と運用のサイクル作りのためにできること / Hatena Enginner Seminar #29
polamjag
0
190
1BRC--Nerd Sniping the Java Community
gunnarmorling
0
340
検証も兼ねて個人開発でHonoとかと向き合った話
hanetsuki
1
1.1k
Random\Randomizer クラスで日常のあれこれを解決しよう! / Random\Randomizer class solves familiar trouble
cocoeyes02
0
250
Polars入門
daikikatsuragawa
1
100
新宿ダンジョンを可視化してみた
satoshi7190
2
260
『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
free_world21
0
250
From Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
110
Ruby Pattern Matching
bkuhlmann
0
930
Featured
See All Featured
The Invisible Customer
myddelton
114
12k
Testing 201, or: Great Expectations
jmmastey
28
6.4k
The Language of Interfaces
destraynor
151
23k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.6k
Product Roadmaps are Hard
iamctodd
44
9.7k
Why Our Code Smells
bkeepers
PRO
331
56k
The Cost Of JavaScript in 2023
addyosmani
16
3.9k
YesSQL, Process and Tooling at Scale
rocio
164
13k
Being A Developer After 40
akosma
57
580k
What’s in a name? Adding method to the madness
productmarketing
PRO
16
2.6k
GitHub's CSS Performance
jonrohan
1025
450k
The Art of Programming - Codeland 2020
erikaheidi
42
12k
Transcript
メルカリの Microservices 化について Backend Engineer at UX team @vkgtaro
お前、誰よ? • @vkgtaro • 元劇団員 • Backend Engineer • Tech
Lead at JP-UX team • 入社9ヶ月くらい • メルチャン/メルカリボックス(Web) • らくらく/ゆうゆう/大型 • Offer Microservice
色んな話を詰め込んだので ぜひぜひご質問ください。
現在メルカリでは Microservice 化を 進めています
Why
スケーラブルな 開発組織を作るため
Free Vector Art by www.vecteezy.com Monolithic Microservices
スケーラブルな開発組織 • 明確な責任分界点で自分の仕事に集中 • 決断できる権限を持って、オーナーシップを発揮 • 自分のサービスは自分で守る
オファーとは
オファー機能 • コメントで行われていた「値下げしてください」というのを機能と して提供 • 気に入った商品に対して、希望の値段をオファーすることがで きます • 今は「インテリア・住まい・小物」カテゴリで使えます。
オファー機能 購入者がお願いして 出品者が承諾すると オファーした金額で買 える!!
Microservice 化への先駆け • 今までどおりモノリシックな API へ追加することも考えました が、Offer は Microservice Platform
上での機能として開発、リ リースしました • Microservice Platform チームと slack や github issue を使っ て相談しつつ開発を進めました • リリース前には Platform チームからリリース前にはやっておく リストを Github issue でもらってチェックを付けながら進めまし た ◦ CloudSQL のインスタンスサイズ決める ◦ SLO を決めるとか
全体像 Offer
循環参照しないようにする • Offer から mercari-api へのアクセスはしているが、 mercari-api から Offer へ
のアクセスはしない • Offer は buyer/seller の user_id, item_id は持っているが詳細は持っていない ので都度 mercari-api に問い合わせしている • mercari-api で変更があった場合に通知したいときは PubSub を使用する方針 ◦ (今はないけど、リアルタイムに情報がほしいところがあるので実装したい) Offer Mercari API PubSub publish subscription
deploy
deploy • Circle CI で docker image をビルドして GCR へプッ
シュすると Spinnaker 側に作ってある PIPELINE の trigger が働いて deploy します。 特定の tag の image を trigger に指定
deploy • Spinaker 側には develop / production の2系統をを用意 • この設定はエンジニア全員見ることができる
• 自分たちも他のプロジェクト参考にするために参照しまし た。
deploy • github で stage/development にマージしたら Circle CI が develop
用の image を GCR に push ◦ Spinnaker が受けて develop 環境へ deploy • 同じように production も stage/production へマージした ら image を作って push されますが…… ◦ Spinnaker の production 環境への trigger は有効に しておらず、手動で deploy するようにしてます
DB Migration • DB マイグレーションも同様にツールを作ってあって、 migration する SQL を含めて migrate/(development|production)
にマージしたら、 Spinnaker がマイグレーション実行するようにしてます。
Offer の Pod 構成 • Offer は CloudSQL を使っているので、サイドカーパター ンで
CloudSQL Proxy も一緒に deploy してます Offer CloudS QL Proxy Offer CloudS QL Proxy Offer CloudS QL Proxy CloudSQL
API Gateway にぶら下がっ た初めてのサービス
Protocol Buffers over HTTP • Offer は API Gateway とは
gRPC で通信していて、iOS / Android は protbuf を HTTP で通信しています。 API Gateway Offer Microservice Protobuf + HTTP gRPC
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
Interface は proto ファイルで管理 • API の Interface は Proto
ファイルで管理しています • このリポジトリに proto ファイルを上げると自動で各言語の protbuf モジュール が自動で作成されます • Offer はインターフェイス決定した後、 proto ファイルをここに上げて自動生成 されたパッケージを組み込み開発してる • 当時 iOS と Android は Swift, Java の自動生成の仕組みが間に合わなかっ たので、この protobuf から生成してもらって使ってる • Offer のバックエンド開発中は、これで生成された PHP モジュールを使用して モックを作り iOS, Android の開発に使用してもらった
Infrastructure as a Code • GCP は Terraform を使ってコントロール •
変更したい内容を PR にあげて、マージしてもらうと自動で 適用される • 各チームの設定が Terraform の設定ファイルとして可 視化されていて、みんなどうしてるんだろうというのがわか りやすい
CloudSQL のインスタンスサイズを変える • Offer は Internal Release で社内の一部の人のみに向け てリリースしていた •
その時 CloudSQL のインスタンスサイズは小さいのを使っ てた • カテゴリを絞ってリリースする際に見積もりをして instance size を決めました • Terraform で instance size を変えて apply してもらったら DB が消えた!
CloudSQL の failover を試す • CloudSQL は failover の仕組みがあるので事前に試した •
failover replica を作って同期完了したあと、admin console から failover させて、master 昇格した方に application が接 続しているか確認しました • 安心!
CSTool つなぎ込み
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
プラットフォーム側は 整ってきた
現在
既存のモノリシックな API を Micoroservice に 切り出し始めてます
まだまだこれから……!
ぜひこのあと ご質問ください!