メインコンテンツへスキップ
友田 陽大

環境分野の決済プラットフォーム(決済信頼性レイヤーを担当)

サーバーレス決済基盤 | 冪等性・ゼロダウンタイム移行 | チーム開発で信頼性レイヤーを設計

クライアント

環境・カーボンクレジット分野の決済プラットフォーム | 開発体制: チーム開発(私は決済データの信頼性レイヤーを担当)

私の役割

チーム開発における決済データミラーリング/信頼性レイヤーの設計・実装担当

課題(Situation & Task)

実際の金銭を扱う決済基盤では、二重課金や残高の不整合が決して許されません。加えて、稼働中のサービスを止めずに決済データモデルを進化させ続ける必要がありました。

決済プラットフォームの信頼性レイヤーには、金融グレードの正確性が求められました。

  1. 二重課金の防止: ネットワークのタイムアウト等でクライアントが再送した際、決済が二重に実行されてはいけません。

  2. 競合下の残高整合性: 同一顧客への同時操作でも、残高がマイナスになったり過剰に減算されたりしてはいけません。

  3. ゼロダウンタイム移行: 残高モデルのリファクタリングを、本番を止めずに段階的に行う必要がありました。

技術選定の理由(Rationale)

  • AWS Lambda + DynamoDB(サーバーレス): トラフィックに応じてスケールし、運用負荷を抑える決済基盤として採用

  • DynamoDBトランザクション(atomic ADD + 条件式): ロックレスで競合に強い残高更新を、読み取り後書き込みのレースなしに実現するため

  • 純粋関数によるトランザクション ビルダー: 副作用を持たず単体テスト可能にし、決済の正確性をテストで検証できる設計にするため

実施したこと(Action)

  • 【冪等性による二重課金防止】クライアント発行の冪等性キーと条件付き書き込みで、リトライ時の重複決済を構造的に排除。キーはTTLで自動失効させコストも最適化

  • 【原子的な残高更新】読み取り後書き込みを避け、atomic ADDと条件式で競合下でも残高不整合を防止。失敗時はトランザクション全体を巻き戻し、失敗箇所を正確に分類

  • 【ゼロダウンタイム移行】モノリシックな残高モデルの分割を、二重書き込み→読み替え→旧データ撤去という段階移行として設計し、13フェーズ超を無停止で実施

  • 【金額の精度保証】金額・CO2換算をDecimalで一貫処理し、浮動小数による丸め誤差の累積を排除。境界条件まで含むテストで検証

担当した信頼性レイヤーは、決済の「正しさ」を構造で保証することに主眼を置きました。

冪等性と原子性: 決済トランザクションを、副作用のない純粋なビルダー関数として組み立て、冪等性キーの条件付き挿入と残高のatomic ADDを単一のトランザクションにまとめました。これにより、リトライ時の二重課金と競合下の残高不整合を、実行時ではなく設計時点で排除しています。

ゼロダウンタイム移行: 残高モデルの段階的な分割を、二重書き込み→読み替え→旧データ撤去のフェーズに分解。各フェーズをテスト可能なルールとして表現し、稼働中の決済を止めずにデータモデルを進化させました。

技術選定の理由

  • 冪等性キー+条件付き書き込み:リトライ時の二重課金を防止

  • atomic ADD+トランザクション:競合下の残高整合性

  • 純粋関数ビルダー:副作用なしで決済ロジックをテスト可能に

  • Decimal一貫処理:金額・CO2の丸め誤差を排除

担当領域

  • 決済データミラーリング層の設計・実装
  • 冪等性・トランザクション設計
  • ゼロダウンタイム移行の設計
  • 単体テスト(境界条件含む)

使用技術

Python
AWS Lambda
DynamoDB
AWS SAM
API Gateway
Amazon Cognito
Stripe
boto3
mypy
pytest

数字で見る成果

ゼロダウンタイム移行
13フェーズ+無停止での段階的スキーマ進化

成果

  • 冪等性キーと条件付き書き込みで、リトライ時の二重課金を構造的に防止
  • atomic ADD+トランザクションにより、競合下でも残高不整合を起こさない決済処理を実現
  • 二重書き込みによる段階移行で、稼働中サービスを止めずに決済データモデルを進化(13フェーズ超)
  • 金額・CO2換算をDecimalで一貫処理し、丸め誤差の累積を排除

同様の課題、抱えていませんか?

あなたのビジネス課題も、最新の技術で解決できます。 まずは30分の無料技術相談から、状況をお聞かせください。

自社の課題もSaaS化できるか相談する

プロジェクト単位(請負)・技術顧問、どちらにも対応可能です

全ケーススタディを見る