Payments Infrastructure

Відмовостійкий Платіжний Шлюз

Проектування мікросервісу для обробки транзакцій під високим навантаженням. Фокус на Ідемпотентності, ACID транзакціях та Нульовій втраті даних.

99.99%
Uptime Design
0%
Double Spending
REST
Архітектура

01 Виклик (Проблема)

Чому це було складно?

Бізнесу необхідно було інтегрувати нового провайдера (Stripe/Adyen) для виходу на глобальні ринки. Стара система обробляла платежі синхронно за принципом "fire-and-forget", що призводило до критичних проблем:

  • Ризик подвійних списань Через таймаути мережі клієнти повторювали запити, і гроші списувалися двічі за одне замовлення.
  • Неузгодженість даних База даних показувала "Pending", а Банк — "Success". Був відсутній механізм звірки.

02 Рішення та Артефакти

1. Логіка Ідемпотентності (Sequence)

Request Deduplication Logic SVG
Sequence Diagram showing Idempotency

Логіка: Перед обробкою API перевіряє Redis на наявність Idempotency-Key. Якщо ключ існує (заблокований), повертається кешований результат, запобігаючи повторному виклику Банку.

2. Модель Даних (ERD)

ER Diagram

3. Специфікація OpenAPI

openapi.yaml
paths:
  /v1/payments:
    post:
      summary: Initiate a secure transaction
      parameters:
        - in: header
          name: Idempotency-Key # Critical for safety
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required: [amount, currency, token]
              properties:
                amount:
                  type: integer
                  example: 5000 # in cents
                currency:
                  type: string
                  example: "USD"
      responses:
        '201':
          description: Transaction Created
        '409':
          description: Conflict (Idempotency Key used)

Технології та Стандарти

REST API Redis (Locking) PostgreSQL PCI DSS Scope