Slide 1

Slide 1 text

#megurorb 決済のトランザクション管理術 決済のトランザクション管理術 @ohbarye Meguro.rb#19

Slide 2

Slide 2 text

#megurorb 決済のトランザクション管理術 すべてを 記録する

Slide 3

Slide 3 text

#megurorb 決済のトランザクション管理術 決済処理を例にした 分散トランザクション管理の一例 話すこと

Slide 4

Slide 4 text

#megurorb 決済のトランザクション管理術 分けることのできない 一連の情報処理の単位 トランザクションとは

Slide 5

Slide 5 text

#megurorb 決済のトランザクション管理術 こんなやつ この block に含まれるタスクが全て実行 されるか、あるいは全く実行されないこと を保証しなければならない

Slide 6

Slide 6 text

#megurorb 決済のトランザクション管理術 トランザクション単位 シーケンス図にすると 簡単? >

Slide 7

Slide 7 text

#megurorb 決済のトランザクション管理術 難しいのは “分散”トランザクション ネットワーク上の2つ以上の ホストが関連するトランザクション

Slide 8

Slide 8 text

#megurorb 決済のトランザクション管理術 トランザクション単位 クレカ決済の一例

Slide 9

Slide 9 text

#megurorb 決済のトランザクション管理術 *トランザクション単位がでか い *通信を挟む 最初の例との差分 *データを記録するホストが複数 *両者で整合性を保ちたい *システム境界をまたぐ *外的要因に影響を受ける

Slide 10

Slide 10 text

#megurorb 決済のトランザクション管理術 考えうる失敗例 ネットワーク通信は基本的に失敗する可 能性がある 決済ゲートウェイ側でエラー 事業者側でエラー 一方からは成功に見えるがもう一方からは 失敗扱いになる、なんてことも

Slide 11

Slide 11 text

#megurorb 決済のトランザクション管理術 障害が起きることを 前提とした設計にする すべての障害可能性を事前に潰すのは不可能

Slide 12

Slide 12 text

#megurorb 決済のトランザクション管理術 具体的な方針 ➔ 1. 進行状況をできる限り詳細に記録する ◆ (optional) 疑わしくてもサービス役務提供しておく ➔ 2. データ不整合を検知できるようにする ◆ 偽陽性を許容する ➔ 3. 検知されたものについては一つ一つ精査する

Slide 13

Slide 13 text

#megurorb 決済のトランザクション管理術 1. 進行状況をできる限り詳細に記録する 購入要求受付 与信成功 確定要求成功 サービス提供

Slide 14

Slide 14 text

#megurorb 決済のトランザクション管理術 2. データ不整合を検知できるようにする

Slide 15

Slide 15 text

#megurorb 決済のトランザクション管理術 3. 検知されたものについては一つ一つ精査する 一重積んではユーザーのため 二重積んでは金のため... 続けるとパターンが見えてくる。 より精度の高いやり方や、自動化の兆 しが出てきます

Slide 16

Slide 16 text

#megurorb 決済のトランザクション管理術 記録さえ残しておけば、あとでどうにかできる 記録がなければ、どうしようもない なので すべてを記録する のが第一歩

Slide 17

Slide 17 text

#megurorb 決済のトランザクション管理術 Thank you!