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.6k
メルカリの 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
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
530
時間軸から考えるTerraformを使う理由と留意点
fufuhu
16
4.8k
ファインディ株式会社におけるMCP活用とサービス開発
starfish719
0
1.3k
Android端末で実現するオンデバイスLLM 2025
masayukisuda
1
150
Reading Rails 1.0 Source Code
okuramasafumi
0
210
機能追加とリーダー業務の類似性
rinchoku
2
1.3k
奥深くて厄介な「改行」と仲良くなる20分
oguemon
1
540
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
750
複雑なドメインに挑む.pdf
yukisakai1225
5
1.2k
HTMLの品質ってなんだっけ? “HTMLクライテリア”の設計と実践
unachang113
4
2.9k
基礎から学ぶ大画面対応(Learning Large-Screen Support from the Ground Up)
tomoya0x00
0
460
AIコーディングAgentとの向き合い方
eycjur
0
270
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
It's Worth the Effort
3n
187
28k
Speed Design
sergeychernyshev
32
1.1k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Typedesign – Prime Four
hannesfritz
42
2.8k
The Pragmatic Product Professional
lauravandoore
36
6.9k
The Invisible Side of Design
smashingmag
301
51k
Unsuck your backbone
ammeep
671
58k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
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 に 切り出し始めてます
まだまだこれから……!
ぜひこのあと ご質問ください!