Witam,
Zastanawiam się jak zachować spójność danych przy zastosowaniu event sourcingu, cqrs i np. Kafki.
Rozważmy 2 przypadki:
Przypadek 1:
- Kowalski rejestruje się z pseudonimem "Foo"
- Nowak rejestruje się z pseudonimem "Foo" w tym samym czasie
- Każdy microserwis ma dodany unikalny index na kolumnie z pseudonimem
- Pseudonimy służą jako login
Jak w takiej sytuacji zapobiec rejestracji 2x użytkownika o tym samym pseudonimie? Nie mamy transakcji. Po stronie microserwisu, który odbiera event i updatuje agregat na walidacje jest już za późno, ponieważ event już się wydarzył. W momencie walidacji, przed publikacją eventu użytkownik "Foo" nie istnieje.
Przypadek 2 - nieco bardziej abstrakcyjny:
- Losujemy UUID nowo utworzonego użytkownika na microserwisie A
- Losujemy UUID nowo utworzonego użytkownika na microserwisie B
- Publikujemy event z rejestracją
- Przez przypadek został wylosowany ten sam UUID, co narusza unikalny index na każdym z agregatów.
.
Pozdrawiam