Co je Event-Driven Architecture?
Event-Driven Architecture je způsob návrhu aplikací, při kterém jednotlivé komponenty komunikují prostřednictvím událostí (events).
Událost informuje systém o tom, že se něco stalo. Může jít například o:
- vytvoření objednávky,
- dokončení platby,
- registraci uživatele,
- změnu stavu objednávky,
- naskladnění produktu.
Představme si e-commerce aplikaci. Když zákazník vytvoří objednávku, systém vytvoří událost:
OrderCreated
Na tuto událost může následně reagovat platební služba, skladový systém i služba pro zasílání notifikací. Služba, která objednávku vytvořila, přitom nemusí každou z nich přímo volat.
Request-Response vs. Event-Driven
U klasického modelu request-response může komunikace vypadat například takto:
Order Service → Payment Service → Warehouse Service → Notification Service
Každá služba čeká na odpověď předchozí. Pokud je některá služba pomalá nebo nedostupná, může to ovlivnit celý požadavek.
V event-driven modelu může tok vypadat takto:
Order Service → OrderCreated
A následně:
OrderCreated → Payment Service
OrderCreated → Warehouse Service
OrderCreated → Notification Service
Rozdíl spočívá v tom, že služba pouze oznámí, co se stalo. Ostatní komponenty se samy rozhodnou, zda a jak na danou událost zareagují.
Výsledkem je volnější propojení jednotlivých částí systému.
Message Queues a Event Brokery
Ve větších aplikacích se události často neposílají přímo mezi jednotlivými službami. Místo toho může mezi nimi fungovat message broker, který zprávy přijímá a distribuuje.
Zjednodušeně:
Producer → Message Broker → Consumers
Broker může zajišťovat například doručování zpráv, jejich dočasné uložení, opakované zpracování nebo distribuci zpráv více consumerům.
Dvě technologie, které se v této souvislosti často používají, jsou RabbitMQ a Apache Kafka.
RabbitMQ vs. Kafka
RabbitMQ je message broker vhodný především pro klasické zpracování zpráv, queues a background tasks. Může být užitečný například při zpracování objednávek nebo generování dokumentů na pozadí.
Kafka je distribuovaná event streaming platforma navržená pro práci s velkým množstvím událostí. Hodí se zejména tam, kde je potřeba zpracovávat velké objemy dat a umožnit více systémům pracovat se stejným tokem událostí.
Neexistuje jednoduchá odpověď na otázku, která technologie je „lepší“. Správná volba závisí na konkrétním problému, objemu dat, požadavcích na zpracování a způsobu škálování.

Jak vypadá event-driven objednávka?
Představme si jednoduchý e-commerce systém:
- Vytvoření objednávky
Order Service vytvoří objednávku a publikuje OrderCreated. - Platba
Payment Service událost zachytí a po úspěšné platbě vytvoří PaymentCompleted. - Sklad
Warehouse Service na událost zareaguje a aktualizuje stav zásob. - Notifikace
Notification Service odešle zákazníkovi potvrzení objednávky.
Výsledný tok je:
OrderCreated → PaymentCompleted → InventoryUpdated → NotificationSent
Každá služba přitom řeší vlastní úkol a není pevně závislá na ostatních.
Co když některá služba nefunguje?
Jednou z výhod event-driven architektury je možnost asynchronního zpracování.
Pokud je například Notification Service dočasně nedostupná, může událost zůstat uložená v message brokeru a být zpracována, jakmile bude služba znovu dostupná.
Tento přístup však přináší i nové výzvy. Vývojáři musí řešit například duplicity událostí, retry mechanismy, pořadí zpráv, monitoring nebo situace, kdy zpracování události selže.
Kdy se Event-Driven Architecture vyplatí?
EDA může být vhodná zejména pro:
- e-commerce platformy,
- platební a logistické systémy,
- IoT aplikace,
- analytické platformy,
- real-time monitoring,
- notifikační systémy,
- aplikace s množstvím background procesů.
Výhodou může být také jednodušší škálování jednotlivých komponent. Pokud například Payment Service zpracovává výrazně více požadavků než ostatní části systému, můžeme škálovat právě tuto část nezávisle.
U malé a jednoduché aplikace však může event-driven architektura přinést zbytečnou komplexitu. Přidává totiž další komponenty, které je potřeba monitorovat, spravovat a udržovat.
Závěr
Event-Driven Architecture umožňuje aplikacím reagovat na události, aniž by jednotlivé komponenty musely být navzájem pevně propojené. Díky tomu mohou být systémy flexibilnější, škálovatelnější a odolnější.
Ne každá aplikace ale potřebuje Kafka, RabbitMQ nebo komplexní event-driven architekturu. Nejdůležitější je nejprve pochopit, jaký problém chceme vyřešit, a teprve poté vybrat architekturu a technologie, které nejlépe odpovídají konkrétním požadavkům.