amiru.dev
System Design

スケーラブルな決済システムの設計

1 min read
44 views
paymentsdistributed systemsarchitecture

決済システムを設計するには、高い一貫性、信頼性、およびセキュリティが求められます。この記事では、決済処理のための高レベルアーキテクチャを設計します。

主要な概念

  1. Idempotency(冪等性): リトライによって二重課金が発生しないようにします。
  2. ACID Transactions(ACIDトランザクション): 財務記録にはリレーショナルデータベースを使用します。
  3. Asynchronous Processing(非同期処理): メッセージキューを使用してサービスを分離します。

インタラクティブなシステムPlayground

最新の決済システムのフローをリアルタイムで体験してください。コンポーネントをクリックして役割を学んだり、シミュレーションを開始してトランザクションがクライアントからデータベースなどにどのように伝わるかを確認したりできます。

アーキテクチャ

決済システムの高レベルアーキテクチャを以下に示します。

決済フロー

  1. クライアントは、一意のIdempotency key(冪等性キー)を含む決済リクエストを送信します。
  2. API Gatewayは、それをPayment Service(決済サービス)にルーティングします。
  3. Payment Serviceは、このIdempotency keyがすでに処理されているかどうかをデータベースで確認します。
  4. 処理されていない場合、保留中の決済レコードを作成します。
  5. 外部のPayment Provider(決済プロバイダー)を呼び出します。
  6. 決済が成功すると、データベースを更新し、「Payment Succeeded(決済成功)」イベントをKafkaに発行します。
  7. Notification Service(通知サービス)がイベントをピックアップし、ユーザーにメールを送信します。

このアーキテクチャは、信頼性とスケーラビリティを保証します。