Slide 1

Slide 1 text

Why Microservices? Mercari Bold Challenge

Slide 2

Slide 2 text

Taichi Nakashima @deeeet / @tcnksm

Slide 3

Slide 3 text

2017年 2019年 2018年 Join Mercari Software Engineer at SRE team Start Microservices Project Tech Lead at Microservices Platform team

Slide 4

Slide 4 text

Agenda
 ● History of Mercari Microservices ● Lessons Learned

Slide 5

Slide 5 text

History of Mercari Microservices

Slide 6

Slide 6 text

2017年 2019年 2018年 JP Microservices Phase 1 ● Microservices Platformの立ち上げ ● AI出品機能のリリース JP Microservices Phase 2 ● API gatewayの開発 ● Microservices Starter-kitの開発 ● Offer serviceのリリース JP Microservices Phase 3 ● コードフリーズの決定 ● 出品機能の切り出し ● Merpayのリリース US Microservices ● 初期フェーズのサポート ● Search serviceの開発 JP Microservices Phase 4 ● さらなるMicroservices化とデータ移行 の実施

Slide 7

Slide 7 text

2017年 2019年 2018年 JP Microservices Phase 1 ● Microservices Platformの立ち上げ ● AI出品機能のリリース JP Microservices Phase 2 ● API gatewayの開発 ● Microservices Starter-kitの開発 ● Offer serviceのリリース JP Microservices Phase 3 ● コードフリーズの決定 ● 出品機能の切り出し ● Merpayのリリース US Microservices ● 初期フェーズのサポート ● Search serviceの開発 JP Microservices Phase 4 ● さらなるMicroservices化とデータ移行 の実施

Slide 8

Slide 8 text

2017年 2019年 2018年 JP Microservices Phase 1 ● Microservices Platformの立ち上げ ● AI出品機能のリリース JP Microservices Phase 2 ● API gatewayの開発 ● Microservices Starter-kitの開発 ● Offer serviceのリリース JP Microservices Phase 3 ● コードフリーズの決定 ● 出品機能の切り出し ● Merpayのリリース US Microservices ● 初期フェーズのサポート ● Search serviceの開発 JP Microservices Phase 4 ● さらなるMicroservices化とデータ移行 の実施

Slide 9

Slide 9 text

Microservices Platform Team “Backend team”がMicroservicesの開発と運用をするための基盤を提供 ● Base infrastructure (Kubernetes) ● DevOps Toolchain: CI/CD, observability, provisioning ● Common Framework ● Best practice & documentation 開発者向けの基盤をつくる

Slide 10

Slide 10 text

Monolith Kubernetes MySQL Platform

Slide 11

Slide 11 text

Monolith Kubernetes MySQL Platform AI出品

Slide 12

Slide 12 text

Monolith Kubernetes MySQL Platform AI出品

Slide 13

Slide 13 text

2017年 2019年 2018年 JP Microservices Phase 1 ● Microservices Platformの立ち上げ ● AI出品機能のリリース JP Microservices Phase 2 ● API gatewayの開発 ● Microservices Starter-kitの開発 ● Offer serviceのリリース JP Microservices Phase 3 ● コードフリーズの決定 ● 出品機能の切り出し ● Merpayのリリース US Microservices ● 初期フェーズのサポート ● Search serviceの開発 JP Microservices Phase 4 ● さらなるMicroservices化とデータ移行 の実施

Slide 14

Slide 14 text

Monolith MySQL

Slide 15

Slide 15 text

Monolith Kubernetes MySQL API gateway Authority Platform

Slide 16

Slide 16 text

Monolith Kubernetes MySQL API gateway Service A Authority Platform Managed DB

Slide 17

Slide 17 text

API gateway ● Goでフルスクラッチで実装 ● Mercari JPだけでなく他のRegionやサービスでも利用できる ● 決済プラットフォーム (後のMerpayとなる) プロジェクトのために @kazegusuriさんらが実装していたAuthorityと連携 ○ Microservices内部の認証認可の構想もここでできた ● デザインから実装・リリースまで半年くらいかかった ○ Mercariの全リクエストを受けないといけない...! API gatewayによるMicroservices化

Slide 18

Slide 18 text

Monolith Kubernetes MySQL API gateway Service A Authority Platform Managed DB Starter-kit Team A

Slide 19

Slide 19 text

Microservices starter-kit Microservicesを作るために必要となる共通インフラをBootstrapする ● GCP projectとKubernetes namespaceをつくる ● Pagerduty Teamをセットアップする ● Github Teamをつくる ● … Terraform Ops for Microservices by @babarot

Slide 20

Slide 20 text

Monolith Kubernetes MySQL API gateway Offer service Authority Platform Cloud SQL

Slide 21

Slide 21 text

Merpay on Microservices Platform MerpayをMercari Microservices Platform上に構築する意思決定 ● Microservices Stater-kitなどが整いつつあった ● MercariのMicroservicesとの連携が容易になる ● MercariもMerpay同等のセキュリティレベルは求められる

Slide 22

Slide 22 text

Monolith Kubernetes MySQL API gateway Offer service Authority Platform Cloud SQL

Slide 23

Slide 23 text

2017年 2019年 2018年 JP Microservices Phase 1 ● Microservices Platformの立ち上げ ● AI出品機能のリリース JP Microservices Phase 2 ● API gatewayの開発 ● Microservices Starter-kitの開発 ● Offer serviceのリリース JP Microservices Phase 3 ● コードフリーズの決定 ● 出品機能の切り出し ● Merpayのリリース US Microservices ● 初期フェーズのサポート ● Search serviceの開発 JP Microservices Phase 4 ● さらなるMicroservices化とデータ移行 の実施

Slide 24

Slide 24 text

Monolith code freeze ● Monolithへの新規機能の追加を禁止すること ● Code freezeまで猶予期間を設けてその間に今後必要となるコア機能 をMicroservicesとして切り出すプロジェクトを始動 ○ Microservices化をさらに加速させるためのCTO・CPOによってなさ れた意思決定 ○ 出品機能の切り出しをターゲット

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Monolith MySQL API gateway Offer service Authority Platform Cloud SQL Listing User Item Photo Notification

Slide 29

Slide 29 text

Platform Microservices Monolith MySQL

Slide 30

Slide 30 text

Monolith MySQL API gateway Offer service Authority Platform Cloud SQL Listing User Item Photo Notification

Slide 31

Slide 31 text

2017年 2019年 2018年 JP Microservices Phase 1 ● Microservices Platformの立ち上げ ● AI出品機能のリリース JP Microservices Phase 2 ● API gatewayの開発 ● Microservices Starter-kitの開発 ● Offer serviceのリリース JP Microservices Phase 3 ● コードフリーズの決定 ● 出品機能の切り出し ● Merpayのリリース US Microservices ● 初期フェーズのサポート ● Search serviceの開発 JP Microservices Phase 4 ● さらなるMicroservices化とデータ移行 の実施

Slide 32

Slide 32 text

Lessons Learned

Slide 33

Slide 33 text

“Why” is most important

Slide 34

Slide 34 text

“Why” microservices?

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

https://blog.eventuate.io/2017/01/04/the-microservice-architecture-is-a-means-to-an-end-enabling-continuous-deliverydeployment/

Slide 37

Slide 37 text

Listing Shipping Notification Purchase Login Search DB Monolith Review Listing DB Listing team User DB User team Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Backend team Timeline Search

Slide 38

Slide 38 text

Listing Shipping Notification Purchase Login Search DB Monolith Review Listing DB Listing team User DB User team Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Backend team Timeline Search

Slide 39

Slide 39 text

“Why” is most important
 ● “How”は無限にある!”Why”でしか最適な”How”は導き出せない ● あらゆる意思決定はすべて”Why”がベースにならないといけない ○ Platformとして機能を開発するとき ○ BackendとしてMicroservicesを切り出すとき ● 自分はどうだったか? ○ はじめから”Why”を意識できていたわけではない.“How” (=どう切 り出すか?) に気を取られてしまっていた時期はあった ○ エンジニアの性でもある...

Slide 40

Slide 40 text

API gateway Service A Service B Service C Gateway team Team C Team B Team A

Slide 41

Slide 41 text

Top-down decision is required
 ● 現場(Bottom-up) だけでは解決できない問題はたくさんある ○ Top-down vs. Bottomのバランスが大切 ● Code-freezeはどうだったのか? ○ 一部から反発はあったが今振り返ってみるとこれがなかったら今ほ どMicroservicesはドライブできてなかったと思う ○ この意思決定ができることがMercariの強さだと思う ● Microservices以外でTop-down decisionが必要になるもの ○ SLI/SLO・Design doc

Slide 42

Slide 42 text

Complete freedom is not true
 ● Microservicesでは最も適した技術や言語(やフレームワーク)を自由に 選択できるという利点がある,と言われるがそれはTrueか? ○ (短期的には) No ■ Microservicesを開発するためのFrictionをなるべく減らすた めに技術スタックの統一化や基盤は必須だと思う ■ 組織の大きさ(基盤にさけるリソース)や成熟度によって段階 的に拡大していくべきだと思う

Slide 43

Slide 43 text

Complete freedom is not true
 ● 自律したチームを作るのと拮抗しないか? ○ 独立した意思決定をして「機能を開発できること」と「技術的な選択 ができること」は次元が違う.前者あっての後者.まずは前者を実 現しないといけない

Slide 44

Slide 44 text

Conclusion
 ● History of Mercari Microservices ● Lessons Learned ○ Why is most important ○ Top-down decision is required ○ Complete freedom is not true

Slide 45

Slide 45 text

Mercari Bold Challenge に共感してくださった方は 『Mercari Careers』を検索! お気軽にお問い合わせください。

Slide 46

Slide 46 text

#BoldChallenge #BoldChallenge