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

Merpay Tech Fest 2021_メルペイスマート払いにおけるマイクロサービス化の軌跡 / The path of microservices migration for Merpay Smart Payment

Merpay Tech Fest 2021_メルペイスマート払いにおけるマイクロサービス化の軌跡 / The path of microservices migration for Merpay Smart Payment

Merpay Tech Fest 2021は5日間のオンライン技術カンファレンスです。

IT企業で働くソフトウェアエンジニアおよびメルペイの技術スタックに興味がある方々を対象に2021年7月26日(月)から7月30日(金)までの5日間、開催します。 Merpay Tech Festは事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知れるお祭りです。 セッションでは事業を支える組織・技術・課題などへの試行錯誤やアプローチを紹介予定です。お楽しみに!

■イベント関連情報
- 公式ウェブサイト:https://events.merpay.com/techfest-2021/
- 申し込みページ:https://mercari.connpass.com/event/215035/
- Twitterハッシュタグ: #MerpayTechFest

■リンク集
- メルカリ・メルペイイベント一覧:https://mercari.connpass.com/
- メルカリキャリアサイト:https://careers.mercari.com/
- メルカリエンジニアリングブログ:https://engineering.mercari.com/blog/
- メルカリエンジニア向けTwitterアカウント:https://twitter.com/mercaridevjp
- 株式会社メルペイ:https://jp.merpay.com/

92cdcff298e89e2fcd2fb705155c2d4b?s=128

mercari
PRO

July 29, 2021
Tweet

Transcript

  1. #MerpayTechFest Session Title メルペイスマート払いにおける マイクロサービス化の軌跡 Takuya Yoshida 株式会社メルペイ Product Engineering

    Div. CD & UX Growth Team
  2. #MerpayTechFest 株式会社メルペイ Takuya Yoshida 2016年ジャストシステムへ新卒入社。新規サービスの立ち上げでマイクロサー ビスの設計や開発・運用に従事し、 2019年7月にメルペイ参画。 Crdit Design チームのバックエンドエンジニアとしてメルペイスマート払いに関連するマイクロ

    サービスのマイクロサービス化や新機能開発に従事している。
  3. #MerpayTechFest アジェンダ メルペイスマート払いについて 初期のシステム構成 マイクロサービス化 まとめ 02 03 04 01

  4. #MerpayTechFest アジェンダ メルペイスマート払いについて 初期のシステム構成 マイクロサービス化 まとめ 02 03 04 01

  5. #MerpayTechFest メルペイスマート払いについて 2019.2-3 iD決済 QRコード決済 2020.7 メルペイスマート払い 2020.9 非接触型サービス 2019.4-5

    2020.11 2021.3 「d払い」「メルペイ」 の共通QRコード バーチャルカード メルペイスマート払い(定額払い) ネット決済
  6. #MerpayTechFest メルペイスマート払いについて 2019.2-3 iD決済 QRコード決済 2020.7 メルペイスマート払い 2020.9 非接触型サービス 2019.4-5

    2020.11 2021.3 「d払い」「メルペイ」 の共通QRコード バーチャルカード メルペイスマート払い(定額払い) ネット決済
  7. #MerpayTechFest メルペイスマート払いについて • 「メルカリ」における過去の利用実績を元に利用限度枠が決まる • 枠内で購入した代金を翌月にまとめて支払うことができる • 売上金やポイント、自動引落しやコンビニ払いで支払いが可能 メルペイスマート払い残枠

  8. #MerpayTechFest メルペイスマート払いについて • 「お金が理由で諦める」を無くす財布をコンセプトに「使いすぎ」「払い終わらな い」を無くし、より安心してお買い物を楽しめることを目指した • メルペイスマート払いの購入代金の支払いを月々に分けることができる

  9. #MerpayTechFest アジェンダ メルペイスマート払いについて 初期のシステム構成 マイクロサービス化 まとめ 02 03 04 01

  10. #MerpayTechFest 初期のシステム構成 • ビジネス観点でリリースのハードデッドラインがあった • 独立したマイクロサービスの開発は間に合わなかった

  11. #MerpayTechFest 初期のシステム構成 Ultra-C

  12. #MerpayTechFest 初期のシステム構成 • 概観 mercari merpay mercari-api MySQL Spanner smartpay

    service Message queue client
  13. #MerpayTechFest 初期のシステム構成 • データマイグレーション mercari merpay mercari-api MySQL Spanner smartpay

    service 1. マイグレーション 1. マイグレーションデータ取得 2. 書き込み
  14. #MerpayTechFest 初期のシステム構成 • メルカリ決済/キャンセル mercari merpay mercari-api MySQL Spanner smartpay

    service 1. 決済/キャンセル 2. 書き込み 3. 書き込み client
  15. #MerpayTechFest 初期のシステム構成 • メルペイ決済/キャンセル merpay mercari mercari-api MySQL Spanner smartpay

    service Message queue payment service 1. 決済/キャンセル 2. 書き込み 3. 決済通知を送受信 4. 書き込み
  16. #MerpayTechFest 初期のシステム構成 • 支払い merpay mercari mercari-api MySQL Spanner smartpay

    service balance service payment service 1. 売上金・ポイントを消費 2. 支払い 3. 書き込み 4. 書き込み client
  17. #MerpayTechFest 初期のシステム構成 • データの二重書き込みによる整合性 • モノリスとマイクロサービスにまたがる機能の分散や重複 • モノリスの複雑性 • 運用コストが高い

    • マニュアルオペレーションが多い • 開発の難易度が高い
  18. #MerpayTechFest 初期のシステム構成 • メルカリ決済の障害パターン mercari merpay mercari-api MySQL Spanner smartpay

    service 1. 決済 2. 書き込み 3. 書き込み client
  19. #MerpayTechFest 初期のシステム構成 • 支払いの障害パターン merpay mercari mercari-api MySQL Spanner smartpay

    service balance service payment service 1. 売上金・ポイントを消費 2. 支払い 3. 書き込み 4. 書き込み client
  20. #MerpayTechFest アジェンダ メルペイスマート払いについて 提供開始時の構成 マイクロサービス化 まとめ 02 03 04 01

  21. #MerpayTechFest マイクロサービス化 • 決済/キャンセル・支払いといった機能毎にフェーズを分ける • フェーズをロジックの移行とデータの移行でさらに細分化 • 移行後のロジックで動くのはある時点から作成されたデータもしくは条件を満た したもの •

    データ移行の際に移行後ロジックで動くように調整
  22. #MerpayTechFest マイクロサービス化 • 決済データのマイグレーション mercari merpay mercari-api MySQL Spanner smartpay

    service batch 1. マイグレーション 2. 書き込み
  23. #MerpayTechFest マイクロサービス化 • メルカリ決済/キャンセルのマイクロサービス化 merpay mercari mercari-api MySQL Spanner smartpay

    service payment service 2. 決済/キャンセル 3. 書き込み 4. 書き込み 1. 決済/キャンセル
  24. #MerpayTechFest マイクロサービス化 • メルカリ決済の障害パターン merpay mercari mercari-api MySQL Spanner smartpay

    service payment service 2. 決済 3. 書き込み 4. 書き込み 1. 決済 reconcile batch Rollback
  25. #MerpayTechFest マイクロサービス化 • メルカリ決済の障害パターン merpay mercari mercari-api MySQL Spanner smartpay

    service payment service 2. 決済 3. 書き込み 4. 書き込み 1. 決済 reconcile batch Rollback
  26. #MerpayTechFest マイクロサービス化 • 支払いのマイクロサービス化 merpay mercari mercari-api MySQL Spanner smartpay

    service balance service payment service 3. 書き込み client 1. 支払い 2. Try
  27. #MerpayTechFest マイクロサービス化 • 支払いのマイクロサービス化 merpay Spanner smartpay service balance service

    payment service 3. 書き込み Message queue 1. Tryの成功通知を送受信 2. Confirm
  28. #MerpayTechFest マイクロサービス化 • 支払いのマイクロサービス化 merpay mercari mercari-api MySQL Spanner smartpay

    service balance service payment service 3. 書き込み 5. 書き込み client Message queue 2. Confirm 4. 支払い通知を送受信
  29. #MerpayTechFest マイクロサービス化 • 支払いの障害パターン merpay mercari mercari-api MySQL Spanner smartpay

    service balance service payment service 3. 書き込み client 1. 支払い 2. Try
  30. #MerpayTechFest マイクロサービス化 • 支払いの障害パターン merpay Spanner smartpay service balance service

    payment service Message queue 1. Tryの成功通知を送受信 2. Cancel
  31. #MerpayTechFest マイクロサービス化 • 支払いの障害パターン merpay Spanner smartpay service balance service

    payment service 3. 書き込み Message queue 1. Tryの成功通知を送受信 2. Confirm Retry
  32. #MerpayTechFest マイクロサービス化 • 支払いデータのマイグレーション mercari merpay mercari-api MySQL Spanner smartpay

    service batch 1. マイグレーション 2. 書き込み batch batch batch
  33. #MerpayTechFest マイクロサービス化 • 定額払い merpay Spanner smartpay service client payment

    service debt service merpay-api demand service
  34. #MerpayTechFest マイクロサービス化 • 債権データのマイグレーション merpay Spanner smartpay service payment service

    debt service merpay-api demand service mercari mercari-api MySQL client batch
  35. #MerpayTechFest アジェンダ メルペイスマート払いについて 提供開始時の構成 マイクロサービス化 まとめ 02 03 04 01

  36. #MerpayTechFest まとめ • メルペイスマート払いではリリース当初モノリスとマイクロサービスにデータの二 重書き込みをおこない、相互に連携させることでサービスを実現していた • データの二重書き込みによる整合性担保やシステムの複雑性が高く非常に難し いシステムだった • 機能やロジック・データの移行をフェーズに分けることでマイクロサービス化を進

    めた • マイクロサービス時に初期システムの対障害性が低い問題を新たな仕組みを使 いながら解決した