Zpět na domů

Návrh systému rezervace lístků

Článek rozebírá návrh škálovatelného systému rezervace lístků se zaměřením na API, databáze a konzistenci. Jsou popsány přístupy k vyhledávání, rezervaci a zpracování 10M DAU. Vhodný pro přípravu na seniorní pohovory.

Systém rezervace: od API do 10M DAU
Advertisement 728x90

Architektura systému rezervace vstupenek: od API po škálování

Systém rezervace vstupenek musí umožňovat prohlížení akcí, vyhledávání podle parametrů a spolehlivé rezervování bez dvojitého prodeje. Zaměřuje se na dostupnost dat při čtení a přísnou konzistenci při zápisu. Očekávaná zátěž — až 10 milionů uživatelů na populární událost, zpoždění vyhledávání pod 500 ms, poměr čtení k zápisu 100:1.

Klíčové entity: Event (akce s datem, popisem, typem), User (uživatel), Performer (umělec), Venue (místo konání s mapou míst), Ticket (vstupenka s místem, cenou, stavem), Booking (rezervace se seznamem vstupenek a stavem).

Návrh API endpointů

API je postaveno kolem tří prioritních funkcí. Začínáme jednoduchými endpointy, které upřesňujeme během návrhu.

Google AdInline article slot

Prohlížení akce:

GET /events/:id -> Event & Venue & Performer & Ticket[]

Vrací podrobnosti události, místa konání, umělce a seznam vstupenek pro vykreslení mapy míst na klientovi.

Vyhledávání:

Google AdInline article slot
GET /events/search?keyword={keyword}&start={start_date}&end={end_date}&pageSize={page_size}&page={page_number} -> Event[]

Filtrace podle klíčových slov, dat, stránkování pro vysokou propustnost.

Rezervace (počáteční verze):

POST /bookings/:eventId -> bookingId
{
  "ticketIds": string[],
  "paymentDetails": ...
}

Později rozdělujeme na rezervaci a potvrzení pro transakční spolehlivost.

Google AdInline article slot

Architektura na vysoké úrovni

Komponenty systému

  • API Gateway: směrování, autentizace, omezení rychlosti, logování.
  • Event Service: čtení dat o akcích, místech konání, umělcích z databáze.
  • Search Service: zpracování vyhledávacích dotazů s filtrací.
  • Booking Service: správa rezervací s transakcemi.
  • Databáze: PostgreSQL pro ACID transakce (Bookings, Tickets), NoSQL nebo cache pro čtení (Events, Venues).

Tok prohlížení: klient → Gateway → Event Service → databáze → odpověď s mapou míst.

Škálování pod zátěží

Pro 10 milionů DAU na událost používáme:

  • Cacheování: Redis pro častá čtení (akce, vyhledávání).
  • Škálování horizontální: podle eventId v Tickets/Bookings.
  • CQRS: oddělení čtení (read repliky) a zápisu (master).
  • Load Balancer: distribuce provozu mezi služby.

Poměr 100:1 čtení/zápis určuje prioritu read replik a CDN pro statická data (mapy míst).

Detaily rezervace a konzistence

Kritická oblast — vyhnutí se dvojí rezervaci. PostgreSQL s transakcemi a izolací Serializable nebo Optimistic Concurrency Control (OCC) na verzi vstupenky.

Proces:

  • Klient vybere ticketIds.
  • Booking Service spustí transakci: SELECT FOR UPDATE na Tickets.
  • Kontrola stavu (available), aktualizace na reserved.
  • Vytvoření záznamu Booking.
  • Potvrzení platby → stav confirmed.

Příklad tabulky Tickets:

| id | event_id | section | row | seat | price | status | version |

|----|----------|---------|-----|------|-------|--------|---------|

| 1 | 123 | A | 1 | 5 | 100 | available | 1 |

OCC: při UPDATE kontrolujeme version, reject při konfliktu.

Pro vysokou konkurenci — dočasné rezervace (TTL 10 min) v Redis.

Optimalizace vyhledávání

Základní SQL filtr se neškáluje na 10 milionů. Přecházíme k:

  • Elasticsearch pro fulltextové vyhledávání podle keyword, performer, venue.
  • Indexace Events s poli: name, date_range, location.
  • Fasetové vyhledávání pro filtry (datum, typ).

Tok: Search Service → ES dotaz → agregace → cache v Redis.

Zpoždění <500 ms je dosaženo přednačtením populárních akcí.

Hloubkové zkoumání škálovatelnosti

Databáze

  • Master PostgreSQL (Bookings, Tickets) — horizontálně škálováno podle eventId.
  • Read Repliky — 10+ pro prohlížení Events.
  • Redis — session, dočasné rezervace, top akce.
  • Elasticsearch — vyhledávání, analytika.

Migrace dat: Event Service zapisuje do Kafka → CDC → repliky/ES.

Monitorování a odolnost proti selhání

  • Circuit Breakers ve službách.
  • Health checks, auto-scaling.
  • Zálohy: WAL archivace v S3.

Co je důležité

  • Přísná konzistence pouze v Booking transakcích, eventual consistency pro vyhledávání.
  • OCC + dočasné zámky v Redis zabraňují 99 % konfliktů bez blokování.
  • CQRS/ES zajišťují <500 ms vyhledávání při zátěži 100:1.
  • Horizontální škálování podle eventId škáluje na 10M+ DAU.
  • API Gateway centralizuje security a throttling.

— Editorial Team

Advertisement 728x90

Číst dál