SlideShare a Scribd company logo
1 of 60
Download to read offline
www.accesto.com
Event Driven
Architecture, the easy way
Michał Kurzeja, Accesto
“the easy way”?
Co to jest Event
Driven Architecture*?
*Architektura sterowana zdarzeniowo
Co to jest zdarzenie?
Czym nie jest Event Driven Architecture?
- EDA to nie mirkoserwisy
- EDA nie musi być asynchroniczne
Podejście Tradycyjne czyli “nie Event-Driven”
!!!
Różne znaczenia
“event-driven”
1. Event notification
Event Notification
2. Event carried state
Event-carried state
Event-carried state
3. Event Sourcing
Event Sourcing
Event Sourcing
Event Sourcing
● Audyt
● Debugowanie
● Historyczny stan
● Alternatywny stan
● W praktyce - duużo trudniejsze niż się wydaje
4. CQRS
CQRS
CQRS
Prosta implementacja
Zalety tego podejścia Event Driven
- Łatwe skalowanie
- Łatwe rozszerzanie
- niski coupling (niskie sprzęganie)
- niskie koszty
- łatwe wdrożenie w istniejących systemach
Czy coś tracimy
- audyt?
- historyczny i alternatywny stan
- wydajność?
Częste błędy
Zła nazwa
- brak czasu przeszłego
- AssignTask
- przekazanie intencji
- SendNotification
- powoduje brak rozszerzalności kodu
- nazwa handlera
Generalizowanie
- skup się na zachowaniu
- a nie na danych
- Prawidłowo:
- OrderConfirmed
- OrderShipped
- Nieprawidłowo:
- OrderChanged, OrderUpdated
“Prosty” async
- “tylko zmienimy transport”
- Problemy
- duuużo, ale o tym zaraz
Popularne problemy
“Prosty” async
- niespodzianki w “legacy”
- retry
- systemy zewnętrzne
- dostarczenie (jedno, brak, wielokrotne)
“Prosty” async - zgubione zdarzenie
- gubimy np. start transakcji, albo utworzenie czegoś
- co jeśli przyjdzie event zakończenia, albo zmiany tego
“Czegoś”
Przepływ zdarzeń a transakcje
Przepływ zdarzeń a transakcje
Przepływ zdarzeń a transakcje
doctrine_transaction middleware
Przepływ zdarzeń i transakcje
● Zdarzenie wysłane, a transakcja odrzucona
● Transakcja przeszła, ale nie udało się wysłać zdarzenia
Przepływ zdarzeń a transakcje
commit do db jest tu
DispatchAfterCurrentBusStamp, DispatchAfterCurrentBusMiddleware
Async a przepływ zdarzeń a transakcje
- At most once delivery - możliwe przeoczenie
- At least once delivery - możliwa duplikacja
- at most once processing
- “Listen to yourself”
Obsługa błędów
- Jak wpływa na przepływ zdarzeń w systemie?
- Czy błąd jest “blokujący”
- Czy warto błąd obsługiwać?
Ukryte intencje
- Co jeśli OCZEKUJEMY reakcji na event?
- Co jeśli OCZEKUJEMY informacji zwrotnej?
Wzorzec SAGA, Process Manager
Zdarzenia a czas
- kiedy zdarzenie zaszło?
- problem z danymi w zdarzeniu, czy są aktualne
- dotyczy “grubych” zdarzeń
Event cascades, nieznane flow
Causation/Correlation ID
Pominięcie
Wszystko musi iść przez system,
np. bezpośrednia zmiana w db nie jest możliwa
EDA? Bardzo chętnie!
“Gratisowe” zalety
- bardzo prosta integracja z innymi systemami
- uproszczone debugowanie
- korzystamy z causation/correlation id i Datadog
- i więcej
Decoupling na siłę to
zły pomysł
Pytania?
Pytania po prezentacji? Napisz do mnie! :)
michal@accesto.com
accesto.com/blog/
Kontakt
twitter.com/accestoPL
facebook.com/accesto

More Related Content

Similar to Event-driven architecture, the easy way.pdf

Minimalizowanie niepewności w Scrumie
Minimalizowanie niepewności w ScrumieMinimalizowanie niepewności w Scrumie
Minimalizowanie niepewności w ScrumieJacek Wieczorek
 
[ISSA] Incident Responce
[ISSA] Incident Responce[ISSA] Incident Responce
[ISSA] Incident Responcemsobiegraj
 
Wydajność webowa jak to ugryźć
Wydajność webowa   jak to ugryźćWydajność webowa   jak to ugryźć
Wydajność webowa jak to ugryźćKonrad Kokosa
 
SkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel DecSkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel Deckraqa
 
Prezentacja witruallizacja dc 1.3
Prezentacja witruallizacja dc 1.3Prezentacja witruallizacja dc 1.3
Prezentacja witruallizacja dc 1.3Marta Pacyga
 
PLNOG15: Virtualization and automation of network and security services in Da...
PLNOG15: Virtualization and automation of network and security services in Da...PLNOG15: Virtualization and automation of network and security services in Da...
PLNOG15: Virtualization and automation of network and security services in Da...PROIDEA
 
[4developers] - Wydajność webowa - jak to ugryźć? (Konrad Kokosa)
[4developers] - Wydajność webowa - jak to ugryźć? (Konrad Kokosa)[4developers] - Wydajność webowa - jak to ugryźć? (Konrad Kokosa)
[4developers] - Wydajność webowa - jak to ugryźć? (Konrad Kokosa)PROIDEA
 
2020 11-15 marcin ludwiszewski - purple, red, blue and others - rainbow team...
2020 11-15 marcin ludwiszewski - purple, red, blue  and others - rainbow team...2020 11-15 marcin ludwiszewski - purple, red, blue  and others - rainbow team...
2020 11-15 marcin ludwiszewski - purple, red, blue and others - rainbow team...Marcin Ludwiszewski
 
Kanban - przestań zaczynać - zacznij kończyć
Kanban - przestań zaczynać - zacznij kończyćKanban - przestań zaczynać - zacznij kończyć
Kanban - przestań zaczynać - zacznij kończyćRemigiusz Kinas
 
Kilka mniej oczywistych zagrożeń dla ciągłości operacyjnej centrum przetwarza...
Kilka mniej oczywistych zagrożeń dla ciągłości operacyjnej centrum przetwarza...Kilka mniej oczywistych zagrożeń dla ciągłości operacyjnej centrum przetwarza...
Kilka mniej oczywistych zagrożeń dla ciągłości operacyjnej centrum przetwarza...Pawel Wawrzyniak
 

Similar to Event-driven architecture, the easy way.pdf (11)

Minimalizowanie niepewności w Scrumie
Minimalizowanie niepewności w ScrumieMinimalizowanie niepewności w Scrumie
Minimalizowanie niepewności w Scrumie
 
[ISSA] Incident Responce
[ISSA] Incident Responce[ISSA] Incident Responce
[ISSA] Incident Responce
 
Wydajność webowa jak to ugryźć
Wydajność webowa   jak to ugryźćWydajność webowa   jak to ugryźć
Wydajność webowa jak to ugryźć
 
SkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel DecSkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel Dec
 
university day 1
university day 1university day 1
university day 1
 
Prezentacja witruallizacja dc 1.3
Prezentacja witruallizacja dc 1.3Prezentacja witruallizacja dc 1.3
Prezentacja witruallizacja dc 1.3
 
PLNOG15: Virtualization and automation of network and security services in Da...
PLNOG15: Virtualization and automation of network and security services in Da...PLNOG15: Virtualization and automation of network and security services in Da...
PLNOG15: Virtualization and automation of network and security services in Da...
 
[4developers] - Wydajność webowa - jak to ugryźć? (Konrad Kokosa)
[4developers] - Wydajność webowa - jak to ugryźć? (Konrad Kokosa)[4developers] - Wydajność webowa - jak to ugryźć? (Konrad Kokosa)
[4developers] - Wydajność webowa - jak to ugryźć? (Konrad Kokosa)
 
2020 11-15 marcin ludwiszewski - purple, red, blue and others - rainbow team...
2020 11-15 marcin ludwiszewski - purple, red, blue  and others - rainbow team...2020 11-15 marcin ludwiszewski - purple, red, blue  and others - rainbow team...
2020 11-15 marcin ludwiszewski - purple, red, blue and others - rainbow team...
 
Kanban - przestań zaczynać - zacznij kończyć
Kanban - przestań zaczynać - zacznij kończyćKanban - przestań zaczynać - zacznij kończyć
Kanban - przestań zaczynać - zacznij kończyć
 
Kilka mniej oczywistych zagrożeń dla ciągłości operacyjnej centrum przetwarza...
Kilka mniej oczywistych zagrożeń dla ciągłości operacyjnej centrum przetwarza...Kilka mniej oczywistych zagrożeń dla ciągłości operacyjnej centrum przetwarza...
Kilka mniej oczywistych zagrożeń dla ciągłości operacyjnej centrum przetwarza...
 

More from Michał Kurzeja

Kolejkowanie w systemach multi-tenant - PHPCon 2023
Kolejkowanie w systemach multi-tenant - PHPCon 2023Kolejkowanie w systemach multi-tenant - PHPCon 2023
Kolejkowanie w systemach multi-tenant - PHPCon 2023Michał Kurzeja
 
Rozszerzalność Symfony - PHPCon 2023
Rozszerzalność Symfony - PHPCon 2023Rozszerzalność Symfony - PHPCon 2023
Rozszerzalność Symfony - PHPCon 2023Michał Kurzeja
 
Rozszerzalność aplikacji Symfony
Rozszerzalność aplikacji SymfonyRozszerzalność aplikacji Symfony
Rozszerzalność aplikacji SymfonyMichał Kurzeja
 
Docker reverse proxy z użyciem Traefik
Docker reverse proxy z użyciem TraefikDocker reverse proxy z użyciem Traefik
Docker reverse proxy z użyciem TraefikMichał Kurzeja
 
Symfony messenger - PHPers Summit 2019
Symfony messenger - PHPers Summit 2019Symfony messenger - PHPers Summit 2019
Symfony messenger - PHPers Summit 2019Michał Kurzeja
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Michał Kurzeja
 
Strangler Pattern in practice @PHPers Day 2019
Strangler Pattern in practice @PHPers Day 2019Strangler Pattern in practice @PHPers Day 2019
Strangler Pattern in practice @PHPers Day 2019Michał Kurzeja
 
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceDr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceMichał Kurzeja
 
Symfony2 - garść porad
Symfony2 - garść poradSymfony2 - garść porad
Symfony2 - garść poradMichał Kurzeja
 

More from Michał Kurzeja (12)

Kolejkowanie w systemach multi-tenant - PHPCon 2023
Kolejkowanie w systemach multi-tenant - PHPCon 2023Kolejkowanie w systemach multi-tenant - PHPCon 2023
Kolejkowanie w systemach multi-tenant - PHPCon 2023
 
Rozszerzalność Symfony - PHPCon 2023
Rozszerzalność Symfony - PHPCon 2023Rozszerzalność Symfony - PHPCon 2023
Rozszerzalność Symfony - PHPCon 2023
 
Rozszerzalność aplikacji Symfony
Rozszerzalność aplikacji SymfonyRozszerzalność aplikacji Symfony
Rozszerzalność aplikacji Symfony
 
Docker reverse proxy z użyciem Traefik
Docker reverse proxy z użyciem TraefikDocker reverse proxy z użyciem Traefik
Docker reverse proxy z użyciem Traefik
 
Symfony messenger - PHPers Summit 2019
Symfony messenger - PHPers Summit 2019Symfony messenger - PHPers Summit 2019
Symfony messenger - PHPers Summit 2019
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
 
Strangler Pattern in practice @PHPers Day 2019
Strangler Pattern in practice @PHPers Day 2019Strangler Pattern in practice @PHPers Day 2019
Strangler Pattern in practice @PHPers Day 2019
 
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceDr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyce
 
Serverless Architecture
Serverless ArchitectureServerless Architecture
Serverless Architecture
 
Docker workshop
Docker workshopDocker workshop
Docker workshop
 
Docker - introduction
Docker - introductionDocker - introduction
Docker - introduction
 
Symfony2 - garść porad
Symfony2 - garść poradSymfony2 - garść porad
Symfony2 - garść porad
 

Event-driven architecture, the easy way.pdf