Upgrade to Pro — share decks privately, control downloads, hide ads and more …

0924_Bold Challenge_@deeeet

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

mercari

September 26, 2019
Tweet

More Decks by mercari

Other Decks in Technology

Transcript

  1. Why Microservices?
    Mercari Bold Challenge

    View full-size slide

  2. Taichi Nakashima
    @deeeet / @tcnksm

    View full-size slide

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

    View full-size slide

  4. Agenda

    ● History of Mercari Microservices
    ● Lessons Learned

    View full-size slide

  5. History of Mercari Microservices

    View full-size slide

  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化とデータ移行
    の実施

    View full-size slide

  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化とデータ移行
    の実施

    View full-size slide

  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化とデータ移行
    の実施

    View full-size slide

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

    View full-size slide

  10. Monolith
    Kubernetes
    MySQL
    Platform

    View full-size slide

  11. Monolith
    Kubernetes
    MySQL
    Platform
    AI出品

    View full-size slide

  12. Monolith
    Kubernetes
    MySQL
    Platform
    AI出品

    View full-size slide

  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化とデータ移行
    の実施

    View full-size slide

  14. Monolith
    MySQL

    View full-size slide

  15. Monolith
    Kubernetes
    MySQL
    API gateway
    Authority
    Platform

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  20. Monolith
    Kubernetes
    MySQL
    API gateway
    Offer service
    Authority
    Platform
    Cloud SQL

    View full-size slide

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

    View full-size slide

  22. Monolith
    Kubernetes
    MySQL
    API gateway
    Offer service
    Authority
    Platform
    Cloud SQL

    View full-size slide

  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化とデータ移行
    の実施

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  26. Platform
    Microservices
    Monolith
    MySQL

    View full-size slide

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

    View full-size slide

  28. 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化とデータ移行
    の実施

    View full-size slide

  29. Lessons Learned

    View full-size slide

  30. “Why” is most important

    View full-size slide

  31. “Why” microservices?

    View full-size slide

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

    View full-size slide

  33. 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

    View full-size slide

  34. 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

    View full-size slide

  35. “Why” is most important

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

    View full-size slide

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

    View full-size slide

  37. Top-down decision is required

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

    View full-size slide

  38. Complete freedom is not true

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

    View full-size slide

  39. Complete freedom is not true

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

    View full-size slide

  40. Conclusion

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

    View full-size slide

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

    View full-size slide

  42. #BoldChallenge
    #BoldChallenge

    View full-size slide