Marcin Mroczkowski Programista JAVA/JEE
Temat: Event sourcing
Event sourcing to kolejny pattern z kanonu DDD (często polecany w połączeniu z CQRS), który od dłuższego czasu budzi moje zainteresowanie. W internecie można spotkać dużo przykładów, jak może to wyglądać, jednak ja jestem dość sceptyczny nastawiony.Istotą event sourcingu jest składowanie stanu aplikacji używając serii biznesowych zdarzeń, które uruchomione po kolei dają ostateczny stan aplikacji. Dzięki temu dostajemy bardzo dużo nowych możliwości i załatwiamy część funkcjonalności od razu m.in.:
- historię i logowanie zmian stanu(który od razu tworzy nam funkcję historii w aplikacji)
- pełny backtrace, bardzo pomocny w debugowaniu
- możliwość "przewijania" aplikacji w czasie, cofania specyficznych zdarzeń, bardzo pomocne w testowaniu, integracji i migracjach
Jeśli dobrze to rozumiem, to stan jest w zdarzeniach, więc żeby wyciągnąć agregat w celu wykonania operacji, należy przekalkulować wszystkie eventy od początku ? Takie rozwiązanie jest zupełnie nierealne... Z pewnością trzeba będzie zrobić i tak statyczny "snapshot" całego stanu, tak by dało się na nim w pracować z sensowną wydajnością. Czyli mamy tutaj już dwa modele danych, oznaczające to samo, tylko jeden statyczny, drugi w zdarzeniach.
Powiedzmy, że chcemy do tego zastosować CQRS, w celu zwiększenia wydajności odczytu. Tworzymy więc zdenormalizowany obraz danych i od tej pory interfejs do zapytań używa właśnie tego obrazu. Czy tu czai się trzeci model danych i w związku z tym potrojony czas wykonywania zapisów i nadmiarowośc w bazach ? Czas na dev i maintenance też zwielokrotniony. Do tego mamy problemy z synchronizacją trzech modeli.
Nie chcę, żeby zabrzmiało to jak krytyka tego patternu. Nie miałem do czynienia z żadną taka aplikacją, dlatego wszystko co zamieściłem to tylko i wyłącznie moje przypuszczenia. Czy ma ktoś może doświadczenia w tej materii, lub widział to cudo w praktyce ?