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

メルコイン決済マイクロサービスのトランザクション管理を支える技術 / The Technolo...

mercari
October 14, 2023

メルコイン決済マイクロサービスのトランザクション管理を支える技術 / The Technology Supporting Transaction Management for Mercoin’s Payment Microservices

メルコインではお客さまの残高の増減に関する操作を決済マイクロサービスを経由して実行しています。このマイクロサービスでは、その特性上、複数マイクロサービス間の整合性の担保やリコンサイルがとても重要な機能になります。そこで、その機能を実装するために利用している技術の詳細をご説明します。

At Mercoin, operations related to increasing or decreasing a user’s balance are executed via payment microservices. For these microservices, the features for guaranteeing consistency and for reconciliation are very important. This session will describe in detail the technology used to implement this feature.

------
Merpay & Mercoin Tech Fest 2023は3日間のオンライン技術カンファレンスです。
IT企業で働くソフトウェアエンジニアおよびメルペイ・メルコインの技術スタックに興味がある方々を対象に2023年8月22日(火)、23日(水)、24日(木)の3日間、開催します。 Merpay & Mercoin Tech Fest は事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知ることができるお祭りです。

今年のテーマは「Unleash Fintech」。 メルペイ・メルコインのこれまでの技術的な取り組みはもちろん、メルカリグループのFintech事業における新たな挑戦をお伝えします。 セッションでは事業を支える組織・技術・課題などへの試行錯誤やアプローチなど多面的にご紹介予定です。

メルペイ・メルコインが今後どのようにUnleash(解放)していくのか、ぜひ見に来てください。

■イベント関連情報
- 公式ウェブサイト:https://events.merpay.com/techfest-2023/
- 申し込みページ:https://mercari.connpass.com/event/286670/
- Twitterハッシュタグ: #MerpayMercoinTechFest
■リンク集
- メルカリ・メルペイイベント一覧:https://mercari.connpass.com/
- メルカリキャリアサイト:https://careers.mercari.com/
- メルカリエンジニアリングブログ:https://engineering.mercari.com/blog/
- メルカリエンジニア向けTwitterアカウント:https://twitter.com/mercaridevjp
- 株式会社メルペイ:https://jp.merpay.com/

mercari

October 14, 2023
Tweet

More Decks by mercari

Other Decks in Technology

Transcript

  1. トランザクション管理(暗号資産購入) 補償トランザクション Subtract point Subtract JPY balance Add BTC balance

    Publish event Insert payment resource Update payment resource Update payment resource Add point Add JPY balance Publish event
  2. トランザクション管理(暗号資産購入) 補償トランザクション Subtract point Subtract JPY balance Add BTC balance

    Publish event Insert payment resource Update payment resource Update payment resource Add point Add JPY balance Publish event
  3. トランザクション管理(暗号資産購入) 補償トランザクション Subtract point Subtract JPY balance Add BTC balance

    Publish event Insert payment resource Update payment resource Update payment resource Add point Add JPY balance Publish event
  4. トランザクション管理(暗号資産購入) 補償トランザクション Subtract point Subtract JPY balance Add BTC balance

    Insert payment resource Update payment resource Update payment resource Add point Add JPY balance Publish event Publish event
  5. Workflow Engine 弊社はクラウドサービスとしてGCPを利用しているため、OSS or GCPの製品 が候補としてあがり、下記を検討した。 1. GCP Workflows 2.

    Cadence / Temporal GCP Workflowsは各処理をHTTP APIのエンドポイントとして実装する必要が あり、開発時のユニットテストなどで検証しづらいことが懸念となり、Cadenceや TemporalはCloud Spannerに対応していなかったため、自社で開発することと した。
  6. Workflow Engine アーキテクチャ Worker Engine Server Execution State Application Recovery

    Worker Channel Register Workflow Function / Execute Workflow Go Runtime Deploy on application servers Create Workflow / Activity Complete Workflow / Activity List Workflow / Activity Workflow / Activity State Changed Event Workflow Function Registry Register / Get reflect.ValueOf(fn).Call
  7. アーキテクチャ • Worker ◦ アプリケーションサーバからの要求に従い、Engine Serverへコミュニケーションす る。 ◦ ChannelからEventをSubscribeし、Eventの種別に沿った処理を実行する。 •

    Recovery Worker ◦ Engine Serverから終了していないWorkflowの一覧を取得し、リトライするWorker。 ◦ ChannelからEventをSubscribeし、Workerと同様にEventの種別に沿った処理を実 行する。 • Workflow Function Registry ◦ アプリケーションで定義されたGoのコード
  8. アーキテクチャ • Channel ◦ Workflow/Activityの状態遷移のEvent HubとなるChannel ▪ WorkflowStarted • Workflowを実行するためのEvent

    ▪ WorkflowCompleted • Workflowが完了した際に、アプリケーション側へレスポンスを返すための Event ▪ ActivityStarted • Activityを実行するためのEvent ▪ ActivityCompleted • Activityが完了した際に、アプリケーション側へレスポンスを返すための Event • Engine Server ◦ Workflowの状態を管理するサーバ。 Workflow, Activityのインプット/アウトプットも保存する。 ▪ インプット/アウトプットが保存されることにより、リトライする際に冪等に処理していくことが できる。
  9. Workflow メルコイン決済マイクロサービスのWorkflow Subtract point Subtract JPY balance Add BTC balance

    Publish event Insert payment resource Update payment resource Update payment resource Add point Add JPY balance Publish event Activity Activity Activity Activity Activity Activity Activity Activity Activity Activity
  10. Processing Tracer Processing State / Service Info CronJob Slack Pub/Sub

    Balance gRPC Server Payment Order Register ProcessingID Reconcile Event Report Reconcile Send Alert Publish Reconcile Event Buy Transaction Request w/ ProcessingID Request w/ ProcessingID Generate ProcessingID
  11. Processing Tracer • ProcessingID ◦ リコンサイルする処理を一意に識別するための ID。処理のエントリーポイントとなるマイ クロサービスが生成し、ユニーク性担保のため、生成には SDKを利用する。 •

    Register ProcessingID ◦ 処理のエントリーポイントとなるマイクロサービスが生成した ProcessingIDを登録する。 • Reconcile Event ◦ ProcessingIDが登録されて一定期間経過後、マイクロサービスの Pub/Sub Topicに向け てEventを発行する。 • Report Reconcile ◦ 各マイクロサービスが自分たちの TopicをSubscribeしてリコンサイル処理を実行し、リコ ンサイルができたらレポートを送信する。この際、依存先マイクロサービスが存在すれば サービス識別子をレポートに含める。 • Alert ◦ 一定期間経過後、リコンサイルされていない ProcessingIDをそのマイクロサービスの on-callチャンネルに対してアラートメッセージを投稿する。
  12. メルコイン決済マイクロサービスのリコンサイル処理 payment merpay payment processing tracer balance Pub/Sub Publish reconcile

    event reconcile event Find resource w/ ProcessingID Call Get API Call Get API Check desired state and current state Check desired state and current state Call Reconcile Report API
  13. まとめ • トランザクション管理 ◦ 複数のマイクロサービスを跨いだトランザクション処理を実行するために Sagaを 採用したWorkflow Engineを開発し、利用している。 • リコンサイル

    ◦ サービスの特性上、リコンサイルすることで最終的にその処理が想定通りに実 行されているかどうかを確認する必要があるが、 Processing Tracerというマイ クロサービスを開発し、リコンサイル処理の共通化をしている。