決済システムを設計するには、高い一貫性、信頼性、およびセキュリティが求められます。この記事では、決済処理のための高レベルアーキテクチャを設計します。
主要な概念
- Idempotency(冪等性): リトライによって二重課金が発生しないようにします。
- ACID Transactions(ACIDトランザクション): 財務記録にはリレーショナルデータベースを使用します。
- Asynchronous Processing(非同期処理): メッセージキューを使用してサービスを分離します。
インタラクティブなシステムPlayground
最新の決済システムのフローをリアルタイムで体験してください。コンポーネントをクリックして役割を学んだり、シミュレーションを開始してトランザクションがクライアントからデータベースなどにどのように伝わるかを確認したりできます。
アーキテクチャ
決済システムの高レベルアーキテクチャを以下に示します。
決済フロー
- クライアントは、一意のIdempotency key(冪等性キー)を含む決済リクエストを送信します。
- API Gatewayは、それをPayment Service(決済サービス)にルーティングします。
- Payment Serviceは、このIdempotency keyがすでに処理されているかどうかをデータベースで確認します。
- 処理されていない場合、保留中の決済レコードを作成します。
- 外部のPayment Provider(決済プロバイダー)を呼び出します。
- 決済が成功すると、データベースを更新し、「Payment Succeeded(決済成功)」イベントをKafkaに発行します。
- Notification Service(通知サービス)がイベントをピックアップし、ユーザーにメールを送信します。
このアーキテクチャは、信頼性とスケーラビリティを保証します。