Pro Yearly is on sale from $80 to $50! »

0924_Bold Challenge_@deeeet

92cdcff298e89e2fcd2fb705155c2d4b?s=47 mercari
September 26, 2019

0924_Bold Challenge_@deeeet

「なぜMicroservicesか?」
株式会社メルカリ Software Engineer, Microservices Platform 中島大一(@deeeet)

■イベント詳細
https://mercari.connpass.com/event/145803/

■採用サイト
https://careers.mercari.com/jp

92cdcff298e89e2fcd2fb705155c2d4b?s=128

mercari

September 26, 2019
Tweet

Transcript

  1. Why Microservices? Mercari Bold Challenge

  2. Taichi Nakashima @deeeet / @tcnksm

  3. 2017年 2019年 2018年 Join Mercari Software Engineer at SRE team

    Start Microservices Project Tech Lead at Microservices Platform team
  4. Agenda
 • History of Mercari Microservices • Lessons Learned

  5. History of Mercari Microservices

  6. 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化とデータ移行 の実施
  7. 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化とデータ移行 の実施
  8. 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化とデータ移行 の実施
  9. Microservices Platform Team “Backend team”がMicroservicesの開発と運用をするための基盤を提供 • Base infrastructure (Kubernetes) •

    DevOps Toolchain: CI/CD, observability, provisioning • Common Framework • Best practice & documentation 開発者向けの基盤をつくる
  10. Monolith Kubernetes MySQL Platform

  11. Monolith Kubernetes MySQL Platform AI出品

  12. Monolith Kubernetes MySQL Platform AI出品

  13. 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化とデータ移行 の実施
  14. Monolith MySQL

  15. Monolith Kubernetes MySQL API gateway Authority Platform

  16. Monolith Kubernetes MySQL API gateway Service A Authority Platform Managed

    DB
  17. API gateway • Goでフルスクラッチで実装 • Mercari JPだけでなく他のRegionやサービスでも利用できる • 決済プラットフォーム (後のMerpayとなる)

    プロジェクトのために @kazegusuriさんらが実装していたAuthorityと連携 ◦ Microservices内部の認証認可の構想もここでできた • デザインから実装・リリースまで半年くらいかかった ◦ Mercariの全リクエストを受けないといけない...! API gatewayによるMicroservices化
  18. Monolith Kubernetes MySQL API gateway Service A Authority Platform Managed

    DB Starter-kit Team A
  19. Microservices starter-kit Microservicesを作るために必要となる共通インフラをBootstrapする • GCP projectとKubernetes namespaceをつくる • Pagerduty Teamをセットアップする

    • Github Teamをつくる • … Terraform Ops for Microservices by @babarot
  20. Monolith Kubernetes MySQL API gateway Offer service Authority Platform Cloud

    SQL
  21. Merpay on Microservices Platform MerpayをMercari Microservices Platform上に構築する意思決定 • Microservices Stater-kitなどが整いつつあった

    • MercariのMicroservicesとの連携が容易になる • MercariもMerpay同等のセキュリティレベルは求められる
  22. Monolith Kubernetes MySQL API gateway Offer service Authority Platform Cloud

    SQL
  23. 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化とデータ移行 の実施
  24. Monolith code freeze • Monolithへの新規機能の追加を禁止すること • Code freezeまで猶予期間を設けてその間に今後必要となるコア機能 をMicroservicesとして切り出すプロジェクトを始動 ◦

    Microservices化をさらに加速させるためのCTO・CPOによってなさ れた意思決定 ◦ 出品機能の切り出しをターゲット
  25. None
  26. None
  27. None
  28. Monolith MySQL API gateway Offer service Authority Platform Cloud SQL

    Listing User Item Photo Notification
  29. Platform Microservices Monolith MySQL

  30. Monolith MySQL API gateway Offer service Authority Platform Cloud SQL

    Listing User Item Photo Notification
  31. 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化とデータ移行 の実施
  32. Lessons Learned

  33. “Why” is most important

  34. “Why” microservices?

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

  37. 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
  38. 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
  39. “Why” is most important
 • “How”は無限にある!”Why”でしか最適な”How”は導き出せない • あらゆる意思決定はすべて”Why”がベースにならないといけない ◦ Platformとして機能を開発するとき

    ◦ BackendとしてMicroservicesを切り出すとき • 自分はどうだったか? ◦ はじめから”Why”を意識できていたわけではない.“How” (=どう切 り出すか?) に気を取られてしまっていた時期はあった ◦ エンジニアの性でもある...
  40. API gateway Service A Service B Service C Gateway team

    Team C Team B Team A
  41. Top-down decision is required
 • 現場(Bottom-up) だけでは解決できない問題はたくさんある ◦ Top-down vs.

    Bottomのバランスが大切 • Code-freezeはどうだったのか? ◦ 一部から反発はあったが今振り返ってみるとこれがなかったら今ほ どMicroservicesはドライブできてなかったと思う ◦ この意思決定ができることがMercariの強さだと思う • Microservices以外でTop-down decisionが必要になるもの ◦ SLI/SLO・Design doc
  42. Complete freedom is not true
 • Microservicesでは最も適した技術や言語(やフレームワーク)を自由に 選択できるという利点がある,と言われるがそれはTrueか? ◦ (短期的には)

    No ▪ Microservicesを開発するためのFrictionをなるべく減らすた めに技術スタックの統一化や基盤は必須だと思う ▪ 組織の大きさ(基盤にさけるリソース)や成熟度によって段階 的に拡大していくべきだと思う
  43. Complete freedom is not true
 • 自律したチームを作るのと拮抗しないか? ◦ 独立した意思決定をして「機能を開発できること」と「技術的な選択 ができること」は次元が違う.前者あっての後者.まずは前者を実

    現しないといけない
  44. Conclusion
 • History of Mercari Microservices • Lessons Learned ◦

    Why is most important ◦ Top-down decision is required ◦ Complete freedom is not true
  45. Mercari Bold Challenge に共感してくださった方は 『Mercari Careers』を検索! お気軽にお問い合わせください。

  46. #BoldChallenge #BoldChallenge