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

Merpay Tech Fest 2021_Payment分散トランザクションケーススタディ ...

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/

mercari

July 26, 2021
Tweet

More Decks by mercari

Other Decks in Technology

Transcript

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

    Yahoo! JAPANでHadoop HDFSの開発に従 事、株式会社お金のデザインでロボアドバイザー資産運用サービス THEO[テ オ]の開発を経験。
  2. #MerpayTechFest Microservice API payment-service CreatRepayment CaptureRepayment Void/CancelRepayment ... balance-service CreateConsumption

    CaptureConsumption Void/CancelConsumption debt-service CreateRepayment CaptureRepayment CancelRepayment Related Microservices(API)
  3. #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: マイクロサービスにおける決済トランザクション管理
  4. #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
  5. #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
  6. #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)
  7. #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)
  8. #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
  9. #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
  10. #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
  11. #MerpayTechFest Customer Voice, from @tk8 Credit Design Team • MessageQueueなどを介した非連続な処理になるため処理タイミング

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

    • Data revising with external system could be very time consuming (days) • UX trade off
  13. #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
  14. #MerpayTechFest Summary • Goal ◦ BASE ▪ Basically Available ▪

    Soft-state ▪ Eventual consistency • Tech ◦ MicroService ◦ Idempotent API ◦ TCC ◦ Status Machine ◦ Recovery Batch ◦ Message Queue
  15. #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)を利用した本人確認の対応を開始 メルペイスマート払い(定額払い) 利用分を翌月以降分割して支払うこと ができる「定額払い」に対応 メルカリ寄付 売上金等からチャージされたメルペイ残 高を、希望する自治体等団体に寄付する ことが可能に
  16. #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
  17. #MerpayTechFest Story, New Challenge モノや信用に加えてあらゆる価値が交換できるマーケットプレイスへ 
 2021年4月28日に設立したメルコインでは、暗号資産やブロッ クチェーンに関するサービスの企画・開発を行っていきます。
 
 暗号資産事業に取り組むことで、「メルカリ」においては、売上

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

  18. #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