Stripeの決済は見えないところで何度も試みている 〜リトライロジックの美学〜
配信ステータス:済 配信URL:https://art19.com/shows/kkeethengineers/episodes/156c1da2-0a61-4bed-b375-1f72c7ef0e62
台本
オープニング
【ジングル】 はい、どうもこんにちは。「雨宿りとWEBの小噺」、始まりました。Keethこと桑原です。 この番組では、Webテクノロジーの歴史や裏側にある、ちょっとした小噺を紹介しています。 今回のお題はですね、「Stripeの決済は見えないところで何度も試みている〜リトライロジックの美学〜」。まぁ聞いてってください。
本題
つかみ
- サブスク更新日に残高足りなかったのに、気づいたら継続してた経験ない?
- あれ、Stripeがこっそりリトライしてる
基本の仕組み
- デフォルトで最大3回リトライ=合計4回試行
- 「3回リトライ」は3回に聞こえるが初回失敗を含めると4回、これ意外と知られてない
- 失敗するとwebhookで通知が飛ぶ(開発者向けの話)
Smart Retries(ここが面白い)
- ただ一定間隔で再試行してるわけじゃない
- 数十億件のトランザクションで学習したMLモデルがタイミングを判断
- 深夜2時の失敗→翌朝10時に再試行する方が成功率高い(残高が回復してる)
- 考慮してる要素:時間帯・曜日・月のどの週・顧客とビジネスの地域・カードの過去の成功率
- デフォルトは2週間以内に最大8回
開発者目線のリトライ設計の話(小噺)
- リトライの基本思想はExponential Backoff(指数バックオフ)
- 100ms→200ms→400ms→と間隔を伸ばす
- さらにJitter(ランダムな揺らぎ)を加えてリクエストの集中を防ぐ
- Stripeはこれを決済というシビアな文脈でMLと組み合わせてる
美学の話(締め)
- このリトライ、ユーザーには完全に見えない
- 失敗してる、でも諦めない、静かに試み続ける
- 「失敗しないように作る」じゃなくて「失敗しても回復できるように作る」という設計思想
- Stripeの調査:リトライで回収した顧客はその後平均7ヶ月継続=新規顧客獲得と同じ価値
エンディング
【ジングル】 さて、そろそろ今回もお時間です。 面白かったよーという方は、ぜひチャンネル登録もお願いします。話してほしいトピックや感想は、概要欄のフォームか 𝕏 で「WEB 小噺」でつぶやいてください。web はアルファベット、「小噺」は漢字でもひらがなでも大丈夫です! それでは、また雨宿りしに来てください。お相手は Keeth でした。さようなら! 【ジングル】
📚 参考情報
- Stripeのリトライの基本仕様
- デフォルトで最大3回リトライ(初回を含めると合計4回試行)
- 失敗のたびにwebhookで通知される
- Smart Retries
- 数十億件のトランザクションで学習したMLモデルがリトライのタイミングを判断
- 時間帯・曜日・地域・カードの過去の成功率などを考慮し、デフォルトで2週間以内に最大8回リトライ
- 設計思想
- 基本はExponential Backoff(指数バックオフ)+Jitter(ランダムな揺らぎ)
- 「失敗しないように作る」のではなく「失敗しても回復できるように作る」という思想
- リトライで回収できた顧客はその後平均7ヶ月継続する(新規顧客獲得と同等の価値)
- 引用元
- 📎 https://blog.stunning.co/quick-tip-stripe-attempts-to-pay-invoices-up-to-4-times-not-3/
- 📎 https://stripe.com/blog/how-we-built-it-smart-retries
- 📎 https://docs.stripe.com/billing/revenue-recovery/smart-retries
- 📎 https://www.tomaszezula.com/implementing-smart-retries-with-stripe/
- 📎 https://stripe.com/resources/more/payment-retries-101
🎙️ 収録メモ
- トーン
- 冒頭:あるあるネタで共感を誘う
- 仕組みの説明:軽快に、豆知識として
- 美学の話:しみじみ、少し詩的に
- 強調ポイント
- 「3回リトライ=合計4回試行」という意外と知られていない事実
- MLモデルがタイミングを判断する「Smart Retries」
- 「失敗しても回復できるように作る」という設計思想
- 尺
- 合計:約6〜8分
- オープニング:30秒
- 本編:5〜7分
- クロージング:30秒
- タグ
Stripe #決済 #リトライ #ExponentialBackoff #MLモデル #Web歴史 #エンジニア雑学