Перейти к содержанию

A. Sportsbook Bet Placement

Раздел 06

Тип материала — инженерный walkthrough. HYPOTHETICAL — модель и схемы.

Архитектура и владельцы

flowchart LR
 A["Player API"] --> B["Acceptance service"] --> C["Bet and wallet DB"] --> D["Outbox relay"]

Контракт и нормальная последовательность

Вход tenant/key, quote_version, stake_minor, currency. Acceptance владеет outcome, wallet DB — reserve. API проверяет identity, лимит и действительность quote; commit создаёт bet и hold.

sequenceDiagram
 participant A as Player API
 participant B as Acceptance service
 participant C as Bet and wallet DB
 participant D as Outbox relay
 A->>B: Send versioned input
 B->>C: Commit bet and hold
 C-->>B: Return durable evidence
 B->>D: Advance downstream processing

Отказ и replay

Commit успешен, ответ потерян. Второй запрос с тем же key читает outcome; новый key проверяет остаток. Relay догоняет committed outbox, сохраняя event ID.

sequenceDiagram
 participant B as Acceptance service
 participant C as Bet and wallet DB
 participant O as Recovery owner
 B->>C: Attempt operation
 Note over B,C: Lost response after commit
 O->>C: Read outcome by original key
 C-->>O: Verified state or explicit pending

Мониторинг и сверка

Сверить accepted IDs, holds, outbox frontier. Измерять pending age, rejected stale quotes и lock waits.

Альтернативы

Local commit упрощает инвариант. Remote reserve требует pending, fenced finalization и протокола release.

Распределённый runtime сценария NOT_RUN. Локальные примеры