Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
購入/決済のACIDを守るための冪等性の話
Search
τ μ [taumu]
July 31, 2026
40
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
購入/決済のACIDを守るための冪等性の話
τ μ [taumu]
July 31, 2026
More Decks by τ μ [taumu]
See All by τ μ [taumu]
自作AIアプリの品質を上げるためにプロンプトエンジニアリングに再入門する
taumu
0
36
AIによる商品説明文生成〜よい説明文をとは何かを考える
taumu
0
55
CI改善もDatadogとともに
taumu
0
380
react-query-auth + gin-jwtでユーザ認証
taumu
0
860
総合トップグロースに向けた負債返済のお話
taumu
0
1.3k
Gatsby + React + Redux によるゼロリスク・ハイリターンな個人開発
taumu
2
1.5k
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
96
14k
Design in an AI World
tapps
1
270
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
350
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Balancing Empowerment & Direction
lara
6
1.2k
My Coaching Mixtape
mlcsv
0
200
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
230
AI: The stuff that nobody shows you
jnunemaker
PRO
9
890
Transcript
購入/決済のACIDを守るための 冪等性の話
None
この発表は何 冪等性とは何か、何の役に立つのか、どう実践するのかを学ぶ 購入と決済の(それぞれ異なる)難しさを学ぶ ACID のうち A( 原子性 ) 、 C(
整合性 ) について学ぶ
冪等性とは何か? 下記AWSの資料が参考になる REL04-BP04 すべての応答に冪等性を持たせる by AWS WellArchitected Framework 「リクエストが最初に完了したときに返された応答と同じ応答を返し ます。」
どんな時に冪等性が必要か? すべての応答に冪等性を持たせる by AWS Well- REL04-BP04 Architected Framework 要するに「すべて」である。
どんな時に冪等性が必要か? が、今回はSODAでの実経験から「システム間の連携が必要な時」と いうのを強調してみたい。 一連の処理を自己完結できるなら冪等性は無くても良いが、連携する 場合はA(原子性)、C(整合性)を守るために冪等性が欲しくなる。 ところで、 モノリスからモジュラーモノリスに移行するということ は、複数モジュールの協調が発生することを意味する。 よってモジュラーモノリスには冪等性遵守が肝となる。
モジュラーモノリスの冪等性ルールを作った 「モジュールから公開するAPIには冪等性を持たせる」 API が同じキーで複数回呼ばれた場合に 2 回目以降をエラーにしな い。 更新(PUT)は遵守必須 新規作成(POST)は任意※ 守らない場合はDocを記述する
※冪等キーを定義すれば冪等性を持たせることが可能だが、必須とは していない
事例1. 購入 購入フローを「購入完了」「ロールバック」のどちらかに確実に遷移 させる(途中で中断させないようにする)には?
SODA の購入モジュールのアーキテクチャ 購入モジュール自身はビジネスロジックをほとんど持たず、別モジュ ールの手続きを順に実行していくのが「購入」の責務。
購入オーケストレータの課題 原子性をどう守るか? 一連のトランザクションが「全て成功する」か「全て失敗する」かの どちらかに倒さないといけない(分散TXのアトミック性を守る)。
購入の原子性を守るには? 案A. トランザクションを繋げる 異なるモジュール間で単一のDBトランザクションを使えるようにする →結合度が上がる、ロック時間が延びる、外部連携が含まれると採用 しにくい 案B. 状態管理する (Sagaパターン) 購入オーケストレータが進捗管理して、中断してた購入データがあれ
ば中断したところから処理を再開できるようにする →複雑度増加、整合性解消システムが必須
採用: 冪等性ルールを導入する 案C. 各処理に冪等性を守らせる 各TXが何度実行されても同じ結果になるように実装する。 そうすればフローが中断した時にどこから再開しても、購入完了 or ロ ールバックまで遷移させることができる。
実際の不整合解消バッチの設計 最初に決済のチェックから行う。ユーザの決済が完了していたら 購入確定処理を再開し、していなかったらロールバックする。
事例2. 決済 ユーザの実際の決済状態と、ECサイトの購入状態の整合性を取る方法
EC サイトの決済不整合リスク サイトの決済は、ユーザと決済プロバイダとの間で行われ、ECサイ トは直接関与せず結果を後から受け取る形をとる。 よって、下記の(1)と(2)のあいだに不整合のリスクがある。 EC
EC サイトの決済不整合対策 多くの決済プロバイダは、決済プロバイダのサーバからECサイトに決 済結果を通知する仕組み(Webhook)を提供している。 Webhook を正しく受信することができれば、決済の結果が EC サイト に確実に届くようになる。これが不整合対策の基本となる。
Webhook Webhook 受信アーキテクチャの基本形 受信用のAPIを作って、ログをDBに残す
実際に採用しているアーキテクチャ 受信処理でエラーが起きた場合、Webhookは再送してもら えることが多いが、その仕様はプロバイダ依存となる。Webhook受信 API を薄くして、ビジネスロジックは非同期処理に逃して結合度を下 げている。 Webhook
冪等性の遵守 同期処理とWebhookのハンドリングは冪等にする
それでも不整合は起きる リコンサイルする仕組みを入れておく Webhook 受信ログと決済ステータス 決済ステータスと購入ステータス
まとめ 他人に提供する機能には冪等性を持たせましょう