System Design Space
Граф знанийНастройки

Обновлено: 25 марта 2026 г. в 04:52

Payment System — платёжная система

medium

Классическая задача: idempotency, authorization/capture/refund, payment orchestration, ledger и reconciliation.

Платежная система начинается с денег как инварианта: retries, duplicates и partial failures здесь опаснее любого недостатка производительности.

Кейс помогает связать ledger, idempotency keys, auth-capture flow, reconciliation, anti-fraud checks и audit trail в одну корректную архитектуру.

В интервью и design review он полезен тем, что быстро показывает, умеете ли вы говорить о correctness first и только потом о масштабировании.

Safety First

Нулевой приоритет ошибки денег: идемпотентность, double-spend protection и audit trail.

Regulatory Constraints

Закладывайте compliance, traceability и контролируемые ручные процедуры.

Risk Controls

Fraud scoring, лимиты и аномалии должны встраиваться в критический путь транзакции.

Resilience

Система обязана сохранять корректность даже при деградации зависимостей.

Источник

System Design Interview

Классический подход к payment architecture: orchestration, ledger и интеграция с PSP.

Открыть главу

Payment System - это не просто API для списания денег. Это распределённая система, где критичны корректность состояний, идемпотентность, устойчивость к частичным сбоям и безопасность обработки чувствительных данных. Базовый принцип: exactly-once на практике заменяется at-least-once + idempotency + reconciliation.

Требования

Функциональные

  • Создание payment intent для заказа (authorization/capture flow).
  • Поддержка карт и альтернативных платёжных методов через PSP.
  • Идемпотентные операции списания и возврата (refund/partial refund).
  • Webhooks от PSP для статусов: authorized, captured, failed, chargeback.
  • История платежей и прозрачный audit trail для support/finance.

Нефункциональные

Доступность: 99.99%

Платежи - критичный revenue path, простои напрямую бьют по бизнесу.

Латентность: p95 < 300ms

Checkout должен оставаться отзывчивым и предсказуемым для пользователя.

Корректность: No double charge

Система не должна дважды списывать при retry и сетевых сбоях.

Безопасность: PCI DSS scope control

Минимизируем обработку card data внутри платформы.

High-Level Architecture

Payment Platform: High-Level Map

sync checkout path + async settlement/reconcile path

Sync Plane

Checkout -> Payment API -> Orchestrator -> PSP Adapter -> PSP
intent + authorization/capture

Async Plane

Payment DB -> Ledger -> Outbox
durable write model
Webhook Proc -> Reconcile -> Finance
status convergence + reporting

Платежная платформа разделена на синхронный checkout-контур и асинхронный settlement/reconcile контур.

Ключевой паттерн — разделение синхронного checkout path и асинхронного settle/reconcile path. Это повышает устойчивость, снижает latency для пользователя и делает финансовые статусы проверяемыми.

Critical Flows

Payment Flow Explorer

Сценарии в формате read/write-style explorer: sync checkout и async settlement.

1
Create Intent
idempotency key
2
Orchestrate Auth
state transition
3
PSP Call
authorize/capture
4
Persist State
payment db + ledger
5
Checkout Response
authorized/captured
Sync path: проиграйте сценарий, чтобы пройти весь checkout-контур от intent до ответа клиенту.

Sync payment path: operational notes

  • Payment API создаёт intent и фиксирует idempotency key для безопасных retry.
  • Orchestrator управляет переходами INITIATED -> AUTHORIZED -> CAPTURED.
  • PSP adapter изолирует provider-specific логику от core домена.
  • Синхронный ответ checkout не ждёт полного settle/reconcile цикла.
  • Промежуточные статусы записываются в payment db для recoverability.

Async settle/reconcile path: operational notes

  • Webhooks обрабатываются как at-least-once события с дедупликацией.
  • Ledger/outbox фиксируют финансовые эффекты в immutable-проводках.
  • Reconcile jobs сверяют внутренние статусы с отчетами PSP.
  • Расхождения (missing capture/refund mismatch) идут в remediation queue.
  • Finance и support получают события через outbox без прямой связи с PSP.

Data model (упрощённо)

payment_transactions

  • payment_id (UUID), order_id, customer_id
  • amount, currency, status, psp_reference
  • idempotency_key, created_at, updated_at

ledger_entries

  • entry_id, payment_id, account_id
  • direction (debit/credit), amount, currency
  • entry_type (auth/capture/refund/chargeback)

Надёжность и консистентность

Обязательные паттерны

  • Idempotency key для всех mutating операций (authorize/capture/refund).
  • Transactional outbox для публикации событий без потери и дублей.
  • Retry с exponential backoff + jitter и circuit breaker на PSP вызовы.
  • State machine со строгими переходами (INITIATED -> AUTHORIZED -> CAPTURED/FAILED/REFUNDED).
  • Ежедневная reconciliation между внутренним ledger и отчётами PSP.

Опасные anti-patterns

  • Считать webhook единственным источником истины без регулярной сверки.
  • Не хранить idempotency key или делать его короткоживущим.
  • Писать финстатус в одной таблице без immutable журнала изменений.
  • Смешивать бизнес-логику checkout и gateway-specific код в одном модуле.
  • Обрабатывать PAN/CVV в своей системе без строгой необходимости.

Security и compliance минимум

  • Card data tokenization: PAN/CVV не должны попадать в ваш core сервис.
  • mTLS/service identity между внутренними сервисами платежного контура.
  • Строгий RBAC для операций refund/manual capture.
  • Непрерывный audit trail для финансовых и операционных действий.
  • Границы PCI DSS scope: чем меньше зона, тем ниже операционные риски.

Reference

Payment Intents

Практический пример stateful payment flow с authorization/capture.

Открыть документацию

Связанные главы

  • Rate Limiter - Защита платёжных API от всплесков трафика, abuse-сценариев и перегрузки критического пути.
  • API Gateway - Единая точка входа, auth, маршрутизация и policy enforcement перед payment-оркестратором.
  • Identification/AuthN/AuthZ - Управление доступом к операциям списания, возврата и админским финансовым действиям.
  • Шифрование, ключи и TLS - Криптографическая защита платежного контура: mTLS, key management и защита данных в транзите.

Чтобы отмечать прохождение, включи трекинг в Настройки