Co to jest event sourcing?

Definicja event sourcingu

Event Sourcing (pozyskiwanie zdarzeń) to wzorzec architektoniczny i sposób zarządzania stanem aplikacji, w którym wszystkie zmiany stanu agregatu (obiektu domenowego, np. zamówienia, konta użytkownika) są zapisywane jako sekwencja niezmiennych (immutable) zdarzeń (eventów) w porządku chronologicznym. Zamiast przechowywać tylko aktualny stan obiektu (jak w tradycyjnych bazach danych), przechowuje się całą historię zdarzeń, które doprowadziły do tego stanu. Aktualny stan agregatu można w dowolnym momencie odtworzyć (zrekonstruować), odtwarzając sekwencję zdarzeń od początku.

Jak działa event sourcing?

W systemie opartym na Event Sourcingu:

  • Polecenia (Commands): Przychodzące polecenia (intencje zmiany stanu) są walidowane przez agregat.
  • Generowanie zdarzeń: Jeśli polecenie jest poprawne, agregat generuje jedno lub więcej zdarzeń domenowych opisujących fakt, że zmiana stanu nastąpiła (np. ZamówienieZłożone, AdresDostawyZmieniony, ProduktDodanyDoKoszyka). Zdarzenia są faktami z przeszłości i są niezmienne.
  • Zapisywanie zdarzeń (Event Store): Wygenerowane zdarzenia są zapisywane w specjalnym magazynie zdarzeń (Event Store) w kolejności ich wystąpienia. Event Store działa jak append-only log (dziennik tylko do dopisywania).
  • Aktualizacja stanu agregatu: Agregat aktualizuje swój wewnętrzny stan, aplikując logikę zawartą w obsłudze nowo wygenerowanego zdarzenia.
  • Odtwarzanie stanu: Aby uzyskać aktualny stan agregatu (np. przy obsłudze kolejnego polecenia), system odczytuje wszystkie zdarzenia dotyczące tego agregatu z Event Store i odtwarza je po kolei, aplikując zmiany stanu. W celu optymalizacji często stosuje się mechanizmy migawek (snapshots), zapisując okresowo pełny stan agregatu.
  • Publikacja zdarzeń: Zapisane zdarzenia mogą być publikowane do innych części systemu (np. poprzez brokera wiadomości), które mogą na nie reagować (np. aktualizując modele odczytu w architekturze CQRS).

Korzyści z event sourcingu

Stosowanie wzorca Event Sourcing przynosi szereg korzyści:

  • Pełna historia zmian (Audit Log): Przechowywanie pełnej historii zdarzeń stanowi naturalny dziennik audytowy, pozwalający dokładnie prześledzić, jak stan agregatu zmieniał się w czasie i dlaczego.
  • Możliwość odtwarzania stanu z przeszłości: Łatwo jest odtworzyć stan systemu z dowolnego punktu w przeszłości, co jest przydatne do debugowania, analizy czy testowania.
  • Elastyczność w tworzeniu modeli odczytu: Zapisane zdarzenia mogą być wykorzystane do budowania wielu różnych modeli odczytu (projekcji), zoptymalizowanych pod kątem różnych potrzeb analitycznych czy widoków w aplikacji, bez wpływu na model zapisu.
  • Wysoka wydajność zapisu: Zapisywanie zdarzeń do append-only logu jest zazwyczaj bardzo szybką operacją.
  • Naturalne wsparcie dla architektury zorientowanej na zdarzenia (EDA): Event Sourcing doskonale komponuje się z EDA, gdzie zdarzenia są podstawowym mechanizmem komunikacji.
  • Ułatwione debugowanie i analiza przyczyn błędów: Pełna historia zdarzeń ułatwia zrozumienie, co doprowadziło do błędnego stanu.

Wyzwania i złożoność event sourcingu

Implementacja Event Sourcingu wiąże się również z pewnymi wyzwaniami:

  • Złożoność koncepcyjna: Jest to wzorzec bardziej złożony do zrozumienia i wdrożenia niż tradycyjne podejście oparte na przechowywaniu aktualnego stanu.
  • Odtwarzanie stanu: Odtwarzanie stanu z długiej historii zdarzeń może być czasochłonne. Wymaga to stosowania optymalizacji, takich jak migawki (snapshots).
  • Wersjonowanie zdarzeń i schematów: W miarę ewolucji systemu, struktura zdarzeń może się zmieniać. Konieczne jest wdrożenie mechanizmów obsługi różnych wersji zdarzeń (event schema versioning).
  • Zarządzanie Event Store: Magazyn zdarzeń staje się kluczowym elementem systemu i wymaga odpowiedniego zarządzania, skalowania i tworzenia kopii zapasowych.
  • Spójność ostateczna (Eventual Consistency): W systemach rozproszonych, gdzie zdarzenia są propagowane asynchronicznie, modele odczytu mogą być aktualizowane z pewnym opóźnieniem (eventual consistency).

Kiedy stosować event sourcing?

Event Sourcing jest szczególnie wartościowy w systemach, gdzie:

  • Kluczowe jest posiadanie pełnej historii zmian stanu (audyt).
  • Istnieje potrzeba odtwarzania stanu z przeszłości.
  • Wymagana jest duża elastyczność w tworzeniu różnych widoków danych (modeli odczytu).
  • Architektura systemu opiera się na zdarzeniach (EDA).
  • Mamy do czynienia ze złożoną logiką biznesową i potrzebą analizy przyczynowo-skutkowej.

Często stosuje się go w połączeniu z wzorcem CQRS.

Podsumowanie

Event Sourcing to potężny wzorzec architektoniczny, który zmienia sposób myślenia o zarządzaniu stanem aplikacji, koncentrując się na zapisywaniu historii zdarzeń, a nie tylko aktualnego stanu. Oferuje on unikalne korzyści w zakresie audytu, elastyczności i analizy, ale wprowadza również dodatkową złożoność. Jest to zaawansowana technika, która może przynieść znaczące korzyści w odpowiednio dobranych zastosowaniach.


autor

ARDURA Consulting

ARDURA Consulting specjalizuje się w dostarczaniu kompleksowego wsparcia w obszarach: body leasingu, rozwoju oprogramowania, zarządzania licencjami, testowania aplikacji oraz zapewnienia jakości oprogramowania. Nasze elastyczne podejście i doświadczony zespół gwarantują efektywne rozwiązania, które napędzają innowacje i sukces naszych klientów.


ZOBACZ TAKŻE:

Etyka w body leasingu

Na czym polega etyka w body leasingu? Na skróty Specyficzne wyzwania etyczne w body leasingu Etyczne postępowanie dostawcy wobec klienta Etyczne postępowanie klienta wobec dostawcy Etyczne traktowanie kontraktorów IT Budowanie...

Czytaj więcej...

Efektywność oprogramowania

Efektywność oprogramowania w kontekście zarządzania zasobami IT odnosi się do optymalnego wykorzystania licencji oprogramowania w organizacji. Oznacza to, że oprogramowanie jest używane w sposób, który maksymalizuje jego wartość dla organizacji,...

Czytaj więcej...