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

Merpay Tech Fest 2021_Payment分散トランザクションケーススタディ / Payment distributed transaction case study

Merpay Tech Fest 2021_Payment分散トランザクションケーススタディ / Payment distributed transaction case study

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 26, 2021
Tweet

Transcript

  1. #MerpayTechFest Session Title Payment distributed transaction case study Rui Gao

    Mepay, Payment Platform, Engineering Manager
  2. #MerpayTechFest Mepay, Payment Platform, Engineering Manager Rui Gao 2018年10月にメルカリへ入社。現在決済基盤チームのエンジニアリングマネー ジャーを担当。入社する前には

    Yahoo! JAPANでHadoop HDFSの開発に従 事、株式会社お金のデザインでロボアドバイザー資産運用サービス THEO[テ オ]の開発を経験。
  3. #MerpayTechFest Agenda Background Transaction Status Management Failure Handling and Recovery

    Summary 02 03 04 01
  4. #MerpayTechFest Agenda Background Transaction Status Management Failure Handling and Recovery

    Summary 02 03 04 01
  5. #MerpayTechFest Background Case: Repayment transaction of Smart Pay

  6. #MerpayTechFest Background Case: Repayment transaction of Smart Pay 2020年7月 メルペイスマート払いに「定額払い」登場

  7. #MerpayTechFest Related Microservices smart-pay-service payment-service balance-service debt-service * Using fake

    service names to hide internal information message queue
  8. #MerpayTechFest Related Microservices smart-pay-service payment-service balance-service debt-service * Using fake

    service names to hide internal information message queue
  9. #MerpayTechFest Microservice API payment-service CreatRepayment CaptureRepayment Void/CancelRepayment ... balance-service CreateConsumption

    CaptureConsumption Void/CancelConsumption debt-service CreateRepayment CaptureRepayment CancelRepayment Related Microservices(API)
  10. #MerpayTechFest Fundamentals & Preconditions 1. BASE a. Basically Available b.

    Soft-state c. Eventual consistency 2. TCC a. Try b. Confirm c. Cancel 3. Idempotence * Reference: マイクロサービスにおける決済トランザクション管理
  11. #MerpayTechFest Agenda Background Transaction Status Management Error Handling and Recovery

    Summary 02 03 04 01
  12. #MerpayTechFest Definition Status Business logical status ResourceStatus High level status

    for status machine Phase/RollbackPhase Detail status for status machine during transition Transaction Status Management
  13. #MerpayTechFest ResourceStatus & Phase 1 2 3 4

  14. #MerpayTechFest Status

  15. #MerpayTechFest Transition: init --> paid

  16. #MerpayTechFest Transition: init --> paid Steps 1. DebtService.CreateRepayment Authorize debt

    2. BalanceService.CreateConsumption Authorize user balance 3. Publish Resource Notification to message queue Key point for auto recovery
  17. #MerpayTechFest Transition: init --> paid, phases

  18. #MerpayTechFest <ResourceStatus, Phase, Status> Received request <wip, init_phase, init_status> Authorized

    debt <wip, debt_authed_phase, init_status> Authorized user balance <wip, paid_phase, paid_status> Published Resource Notification <wait, notified_phase, paid_status> Return response - Transition: init --> paid (Succeed)
  19. #MerpayTechFest Status

  20. #MerpayTechFest <ResourceStatus, Phase, RollbackPhase, Status> Received request <wip, init_phase, -,

    init_status> Authorized debt <wip, debt_authed_phase, -, init_status> Authorize user balance failed <wip, -, rollback_int, init_status> Authorized user balance rollbacked <wip, -, balance_rollbacked, init_status> Authorized debt rollbacked <failed, -, rollback_completed, failed_status> Return response(error) - Transition: init --> paid (Failed)
  21. #MerpayTechFest • Error: business logic related error a. Not Found

    b. Not Enough Debt Balance c. Not Enough Balance • Failure: network issue, system incident a. Aborted b. Timeout c. Unavailable Error and Failure
  22. #MerpayTechFest Agenda Background Transaction Status Management Failure Handling and Recovery

    Summary 02 03 04 01
  23. #MerpayTechFest Failure Handling and Recovery Failure Solution temporary network failure

    worker layer retry, ms ~ s Continuous spike resource request queue layer retry, m ~ h incident Recovery batch, hourly, data of 3 days
  24. #MerpayTechFest Recovery batch: Cron Job

  25. #MerpayTechFest Edge Case

  26. #MerpayTechFest Edge Case Handling, payment-service perspective

  27. #MerpayTechFest <ResourceStatus, Phase, Status> Received request <wip, init_phase, init_status> Authorized

    debt <wip, debt_authed_phase, init_status> Authorized user balance <wip, paid_phase, paid_status> Published Resource Notification <wait, notified_phase, paid_status> Return response(Failed) - Edge Case
  28. #MerpayTechFest Edge Case Handling, smart-pay-service perspective smart-pay-service payment-service balance-service debt-service

    * Using fake service names to hide internal information message queue
  29. #MerpayTechFest Edge Case Handling, smart-pay-service perspective

  30. #MerpayTechFest Customer Voice, from @tk8 Credit Design Team • MessageQueueなどを介した非連続な処理になるため処理タイミング

    における一時的なデータの整合性などケアすべきポイントは増えます が、Status毎にプロセスを分けて考えることができるため処理のカプセ ル化による再利用性の向上、エッジケース含めた際の処理のシンプル化 や最適化ができる点、各プロセスを独立して開発できるためチーム開発 における並列性の観点など様々な視点で利益を享受することができまし た。 • また、耐障害性においても自動復旧の仕組みが備わっているため運用コ ストの削減につながっています。 • Repaymentの仕組みを使うことによって運用や開発における利益を継 続的に享受できるため運用コストはもちろん、新機能開発における工数 の削減にもつながっています
  31. @tk8

  32. #MerpayTechFest Failure handling evolution

  33. #MerpayTechFest Failure handling evolution 2020年6月 「メルカリ」で「dポイント」が利用可 能に * Reference: mercari

    press
  34. #MerpayTechFest Case: Escrow transaction of mercari with d point

  35. #MerpayTechFest Case: Escrow transaction of mercari with d point speciality:

    • Data revising with external system could be very time consuming (days) • UX trade off
  36. #MerpayTechFest Transition: init --> paid Case: Escrow transaction of mercari

    with d point
  37. #MerpayTechFest Rollback d point charge

  38. #MerpayTechFest Repayment v.s. Escrow with d Point • Repayment a.

    Priority: retry to push transition forward b. Dependency: internal services main • Escrow a. Priority: rollback to unfreeze user balance b. Dependency: external service involved
  39. #MerpayTechFest Agenda Background Transaction Status Management Failure Handling and Recovery

    Summary 02 03 04 01
  40. #MerpayTechFest Summary

  41. #MerpayTechFest Summary • Goal ◦ BASE ▪ Basically Available ▪

    Soft-state ▪ Eventual consistency • Tech ◦ MicroService ◦ Idempotent API ◦ TCC ◦ Status Machine ◦ Recovery Batch ◦ Message Queue
  42. #MerpayTechFest Story Merpay payment distributed transaction mechanism is evolving along

    with company business growth!
  43. #MerpayTechFest Story 2019.2-3 iD決済 QRコード決済 コンビニエンスストアやレストラン、ドラッグスト ア、ファーストフード店をはじめ、全国約206万 か所の「iD」「メルペイ」加盟店で利用が可能に ※2021年3月末現在(iD/QR重複除く) 2020.7

    メルペイスマート払い 「メルカリ」「メルペイ」における過去の利用実績 等を元に商品購入代金をチャージレスで後から 支払うことができる「メルペイスマート払い」に対 応 ネット決済 オフラインだけでなく、オンラインでもメル ペイでの支払いが可能に 2020.9 おくる・もらう 家族や友人にメルペイ残高・ポ イントを送ることが可能に 非接触型サービス 2019.4-5 ふえるお財布 貸付投資サービス「Funds」での メルペイ残高決済が可能に ※第2弾のファンドを2021年1月に実施 2020.11 2021.3 「d払い」「メルペイ」 の共通QRコード 「d払い」と「メルペイ」が1つのQRコードで 利用可能に バーチャルカード 簡単にカード番号を発行でき、多くのECサイトで のメルペイの利用が可能に マイナンバーカード (JPKI)での本人確認 マイナンバーカードの公的個人認証サービス (JPKI)を利用した本人確認の対応を開始 メルペイスマート払い(定額払い) 利用分を翌月以降分割して支払うこと ができる「定額払い」に対応 メルカリ寄付 売上金等からチャージされたメルペイ残 高を、希望する自治体等団体に寄付する ことが可能に
  44. #MerpayTechFest Story 2019.2-3 Mercari payment transaction 2020.7 Repayment transaction 2020.9

    Personal Transfer transaction 2019.4-5 More and more 2020.11 2021.3 Mercari payment transaction with d point Merpay payment transaction Merpay payment transaction with virtual card
  45. #MerpayTechFest Story, New Challenge モノや信用に加えてあらゆる価値が交換できるマーケットプレイスへ 
 2021年4月28日に設立したメルコインでは、暗号資産やブロッ クチェーンに関するサービスの企画・開発を行っていきます。
 
 暗号資産事業に取り組むことで、「メルカリ」においては、売上

    金のビットコインでの受取り機能の提供や、「メルペイ」におい ても決済・送金機能の提供に留まらず、与信、暗号資産・資産 運用の機能を一つのウォレットで提供していく等、より簡単に 金融サービスを利用できる環境を構築します。
 
 さらに、価値交換を実現するブロックチェーンの技術に取り組 むことで、NF (Non-fungible token)等、これまでのモノ・お金 に限らず、サービスやデジタルコンテンツなどのあらゆる価値 を誰もが簡単に交換できる新しい取引の形を創出していきま す。

  46. #MerpayTechFest People in Payment Platform Team Payment ub-team 
 Balance

    ub-team
 @foghost
 @rui
 @knsh14
 @tengis
 @abcdefuji
 @ind
 @rossy
 @tanksuzuki
 @adler
 @mosakapi
 @kimQA
 @hao
 @kung
 @godriccao
 ettlement ub-team
 @rogerko @ktazoe @mihoyolo
 @m-chae
 @kaznishi
 @po-an(Andy)
 @mizkei

  47. #MerpayTechFest We are Hiring!! メルペイ採用ページよりご応募をお願いします。 ※APPLICATION DETAILSに本日のSessionにご参加頂いた旨ご記載ください。

  48. #MerpayTechFest We are Hiring!! Payment Platform Team ※気軽くカジュアル面談どうぞ

  49. Mission 信用を創造して、なめらかな社会を創る
 Building trust for a seamless society

  50. Value 一人では達成できない大きなミッション を、チームの力を合わせ、全員が最大の パフォーマンスを発揮することで実現し ます。
 世の中にインパクトを与えるイノベーショ ンを生み出すため、全員が大胆にチャレ ンジし、数多くの失敗から学び、実践しま す。
 メンバー全員がその道のプロフェッショ

    ナルとしてオーナーシップを持ち、日々 の学びを怠らず、成果や実績にコミットし ます。
 Go Bold 大胆にやろう
 All for One 全ては成功のために
 プロフェッショナル
 であれ
 Be a Pro
  51. #MerpayTechFest Thanks! Thanks for listening !!!