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.4k
メルカリの 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.5k
Other Decks in Programming
See All in Programming
Lottieアニメーションをカスタマイズしてみた
tahia910
0
120
Amazon S3 TablesとAmazon S3 Metadataを触ってみた / 20250201-jawsug-tochigi-s3tables-s3metadata
kasacchiful
0
100
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
4
370
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
7
2.5k
最近のVS Codeで気になるニュース 2025/01
74th
1
250
Immutable ActiveRecord
megane42
0
130
Spring gRPC について / About Spring gRPC
mackey0225
0
220
定理証明プラットフォーム lapisla.net
abap34
1
1.7k
Honoとフロントエンドの 型安全性について
yodaka
4
250
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
41
15k
知られざるDMMデータエンジニアの生態 〜かつてツチノコと呼ばれし者〜
takaha4k
4
1.3k
プログラミング言語学習のススメ / why-do-i-learn-programming-language
yashi8484
0
120
Featured
See All Featured
Writing Fast Ruby
sferik
628
61k
GraphQLとの向き合い方2022年版
quramy
44
13k
Site-Speed That Sticks
csswizardry
3
370
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Docker and Python
trallard
44
3.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Practical Orchestrator
shlominoach
186
10k
Gamification - CAS2011
davidbonilla
80
5.1k
Agile that works and the tools we love
rasmusluckow
328
21k
YesSQL, Process and Tooling at Scale
rocio
171
14k
The Cost Of JavaScript in 2023
addyosmani
47
7.3k
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 に 切り出し始めてます
まだまだこれから……!
ぜひこのあと ご質問ください!