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.5k
メルカリの 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.6k
Other Decks in Programming
See All in Programming
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
200
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
210
DroidKnights 2025 - 다양한 스크롤 뷰에서의 영상 재생
gaeun5744
3
320
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
110
Gleamという選択肢
comamoca
6
760
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
270
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
370
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
490
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
860
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
450
ReadMoreTextView
fornewid
1
480
技術同人誌をMCP Serverにしてみた
74th
1
380
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
Typedesign – Prime Four
hannesfritz
42
2.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
VelocityConf: Rendering Performance Case Studies
addyosmani
330
24k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
220
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
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 に 切り出し始めてます
まだまだこれから……!
ぜひこのあと ご質問ください!