支払いの繰り返しとバックオフ
支払いの繰り返しとバックオフ
1)リプレイが必要な理由
変換:ソフトエラー(タイムアウト、3DSエラー、ネットワーク障害)はリピート時に回復されることが多い:+2-7 pp to Auth Rate。
堅牢性:ローカルのPSP/ACS/バンク障害は、代替ルートのレトラによってスムーズになります。
プレーヤーの経験:正しく構築されたリプレイは、二重充電なしでインフラストラクチャの「ノイズ」を隠します。
2)基本原則
1.「payment intent」 (PI)レベルのidempotency: 1つの操作=1つの'idempotency_key';金銭的条件を変更することはありません。
2.エラーの分離:- ハード低下(例:厳格な発行者ポリシーで「尊重しない」、「不十分な資金」)→通常はすぐに再試行しません。
- ソフトダウンロード/テクニカル(タイムアウト、'Issuer unavailable'、 'Try again')→許可リトレイ。
- 3.バックオフ+リミット試行:指数関数的に遅延を増加させ、ジッタを追加し、制限を超えません(通常は2-3試行)。
- 4.バンドルルーティング:リトレイは「同じPSPの繰り返し」だけでなく、PSP/MID/3DSモード/メソッドの変更でもあります。
- 5.観測可能:各ホップはルートジャーナル(PSP、 reason、 latency、 3DSモード、料金、結果)に記録されます。
3)後退決定のためのエラー分類
4)バックオフ戦略(実践)
4.1ジッタ付き指数関数バックオフ(推奨)
'delay_n=min (base 2^n、 max_delay)'
ジッタ:'delay=rand (0、 delay_n)'-多くのリクエストが同時に繰り返されると、スタンピードが減少します。
典型的なパラメータは'base=200-500 ms'、 'max_delay=5-10 s'、 'n ≤ 2-3'である。
4.2リニアバックオフ
ネットワーク上の「不安」で単純ではあるが、さらに悪い。指数+ジッタより劣る。
4.3タイムアウトポリシー
クライアントタイムアウト(あなたの)≤ PSP SLA(例えば、3-5秒)、そうでなければ重複/フリーズのリスクが増加します。
webhook/confirmの待ち時間を別々に設定します。確認が来ない場合→補償和解(元帳/PSP)。
5) Idempotenceおよびテイクに対する保護
Payment Intent (PI)は、ステータス、金額、メソッド、'idempotency_key'、ルート履歴を格納します。
各ホップとリトライは同じキーを使用します。
トランザクションの補償:同期切れ(PSPで承認し、タイムアウトがある場合)-"reconcile-pull'+レジャー調整。
Webhookを再配達するときに再認証を除外します:一意性について'transaction_id'/'PSP reference'をチェックします。
6) 3DS/SCAと繰り返し
摩擦のない→挑戦との再試験の後の柔らかい衰退。
ACSタイムアウト/利用不可→指数バックオフ、代替チャネル(オープンバンキング/APM)または別のPSP。
ACSの大量劣化-遮断器、成長「チャレンジレート」、量の時間制限。
7) APM/オープンバンキング担当
オープンバンキング/インスタントレール(SEPA Instant/FPS/Pix/UPI):- リトレイは制限されています:プロバイダ側のidempotenceと遅延webhook 'axのステータスをチェックします。
- 無期限のステータスで-バックオフと厳密な和解でポーリング。
- バウチャー/現金:「オンライントランザクション」にはリトレイは適用されませんが、期日管理と「ステータス更新」が適用されます。
8)支払い: リプレイとキュー
銀行/PSP技術的障害→バックオフドレインによるキュー配当。
KYT/velocityの失敗→retrayemの手動点検への移動ではないです。
キューの優先順位付け:VIP/少量/アプリケーションの年齢;SLAと自動エスカレーションの期限。
2番目の引き込みステップの代替レール(RTP/FPS/SEPA Instant/Pix)。
9)遮断器およびレトライ
ローカル(PSP/MID/BIN):エラーがスパイクした場合、このルートでリトレイを停止し、代替ルートに切り替えます。
Global (per method/region):全身劣化→メソッドを無効にし、APM/オープンバンキングを提供しています。
ハーフオープン:トラフィックの一部(1-5%)を返却し、完全復帰前に回復を確認します。
10)リトレイ戦略の擬似コード
python def pay_with_retries(pi):
ensure_idempotency(pi.key)
if not compliance_pass(pi): return REJECT
routes = rank_candidates(pi) # по вероятности approve, fee, health attempts = 0 for route in routes:
policy3ds = select_3ds(pi, route)
res = call_psp(route, pi, policy3ds, pi.key, timeout=3.0)
log_attempt(pi, route, res)
if res.approved: return APPROVED
if is_soft_decline(res) or is_transient_error(res):
while attempts < MAX_ATTEMPTS and not breaker_open(route):
delay = backoff_with_jitter(base=0.3, attempt=attempts, cap=8.0)
sleep(delay)
policy3ds = maybe_toggle_3ds(policy3ds, res)
res = call_psp(route, pi, policy3ds, pi.key, timeout=3.0)
log_attempt(pi, route, res)
attempts += 1 if res.approved: return APPROVED if is_hard_decline(res): break перейти к следующему маршруту (PSP-B/APM/open banking)
return DECLINED
11) KPIとターゲット
再試行からの差分承認:+2-7 ppからベースへの変換。
承認されたTxごとのAvg再試行回数: 1。2–1.5(1の下に保つ。7).
再試行成功率(ソフト/テック):≥ 25-40%。
重複レート:0と正しいidempotency。
P95レイテンシー(リトレイを含む):最終応答まで<7 s。
ペイアウトSLA(インスタントシェア):簡単なチェックの≥ 70%、期限切れ<ターゲットのしきい値。
12)インシデントプレイブック
A。 PSP-Aのマスタータイムアウト
1.PSP-Aのローカルブレーカを開く。
2.PSP-B/APMに再配置します。
3.ジッタによる指数関数的なバックオフ、2〜3回の試行を制限します。
4.カナリアのハーフオープン後10-15分。
B。 ACS/3DSの劣化
1.成長による検出'柔らかい衰退'、タイムアウト。
2.チャレンジレートを上げる。トラフィックの一部→オープンバンキング。
3.重いチェックを脇に置き、速度制限をオンにします。
C。ペイアウトの遅延
1.キューへの転送、VIP/少量の優先順位付け。
2.代替レール(RTP/FPS/SEPA Instant/Pix)へのレールアウト。
3.プレーヤーへのコミュニケーション+自動エスカレーション。
13)観測可能性とデータ
ルートジャーナル: PSP/MID、 BIN/issuer、 reason、 latency、 3DS-режим、 retry chain、……
ダッシュボード:Auth Rate (by bank)、 Retry Success、 Avg Attempts、 Decline Mix、 p95 latency、 Payout Queue Depth。
アラート:理由コードによるスパイク、試行/遅延の増加、出力キューのオーバーフロー。
14)実装チェックリスト
アーキテクチャ/データ
- Payment Intent+'idempotency_key'が表示されます。
- Reason code config matrix: retryable vs non-retryable。
- 署名されたwebhook、 PSPリファレンスによる重複除外。
バックアップ/ルール
- ジッタ付き指数関数バックオフ;試みおよび窓の時間の限界。
- スマートな再試行:3DS/MID/PSP/methodの変更;vs APM/オープンバンキングカードの区別。
- サーキットブレーカ(ローカル/グローバル)、ハーフオープンカナリー。
元帳/和解
- 「中断」状態で取引を補償します。
- T+0/T+1和解:PSP ↔銀行↔マネー台帳。
- 確認/webhookのタイムアウトとSLAポリシー。
オペレーション/コンプライアンス
- RG/制裁/PEP/年齢-リトレイ前。
- KYT/velocityペイアウト;手動レビュールール。
- インシデント/エスカレーションのためのRunbooksとRACI。
15)経済とリスク
3DS-phia、 FX、チャージバック値、リトレイオーバーヘッドを考慮して、有効率を検討してください。
チャージバックの露出と埋蔵量をオーバークロックしないように、高リスクセグメントへのハードリミットリトレイ。
16)ボトムライン
繰り返しは、制御可能なときに動作します:idempotency、理由コードの明確な行列、ジッタ付き指数バックオフ、試行制限、およびルーティング付きのバンドル(PSP/3DS/method変更)。サーキットブレーカー、ペイアウトキュー、強力な調整を追加し、テイクとキャッシュホールを作成せずにコンバージョンを一貫して引き上げます。