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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
vkgtaro
July 18, 2018
Programming
2.8k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
メルカリの Microservices 化について
Backend Engineer Drink Meetup #1 で話した内容です。
https://mercari.connpass.com/event/93613/
vkgtaro
July 18, 2018
More Decks by vkgtaro
See All by vkgtaro
急成長させるサービスに突っ込まれた話
vkgtaro
0
2.6k
Other Decks in Programming
See All in Programming
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
900
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
180
What We Talk About When We Talk About XP
m_seki
2
110
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
150
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
610
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
52
33k
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
130
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
130
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
260
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
340
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
280
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
490
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
Automating Front-end Workflow
addyosmani
1369
210k
Utilizing Notion as your number one productivity tool
mfonobong
4
560
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Test your architecture with Archunit
thirion
2
2.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Leo the Paperboy
mayatellez
8
2.2k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
ラッコキーワード サービス紹介資料
rakko
1
4.7M
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 に 切り出し始めてます
まだまだこれから……!
ぜひこのあと ご質問ください!