Oskar Dudycz

Pragmatic about programming

Jak SMS do byłej ma się do Event-Driven Design?

2020-02-24 oskar dudyczEvent Sourcing

cover

Cześć!

Zmęczenie, rozkojarzenie, szczególnie poparte porcją “soku z gumijagód”. Dodajmy do tego melancholię, odrobinę chandry i być może przypływ myśli “toż to świetny pomysł!“. Łapiemy telefon, klepiemy błyskotliwe w domyśle kilka zdań. Bach, wysyłamy. Czasem już w momencie naciśnięcia “wyślij” wiemy, że to był zły pomysł. Zwykle rano, gdy sprawdzamy gdzie pisaliśmy i dzwoniliśmy. No i OMG o_O ! Potem tylko kłębowisko myśli “A może nie odczytała tego?”, “Może da się to jeszcze usunąć?”, “Może to zedytuję?“. Czasem ma się szczęscie, na WhatsUp da się usunąć wiadomość, na Skype zedytować. Z tym, że pewności nie ma czy nie przeczytała. Zwykle pozostaje tylko przeprosić, lub staropolskie “ja tak tylko żartowałem!“. Sytuacji się nie cofnie, ale zwykle da się jeszcze to jakoś naprawić.

Po co Ci piszę te pierdoły? Często ludzie mnie pytają - a co w Event Sourcing, systemach opartych na zdarzeniach się stanie gdy puściliśmy złe zdarzenie (np. z brakującymi danymi, ze źle wypełnionymi, itd.). No i przepis jest bardzo zbliżony, bardzo podobny do wysyłania do swojej byłej/byłego:

  1. Przemyśl to - myślenia zawsze się przydaje, upewnij się z biznesem, że ten przepływ ma tak działać, napisz testy. To może Cię zabezpieczyć przed konsekwencjami.
  2. Jeśli wiadomość wysłaliśmy Skype to zedytujmy - umówmy się, wysyłanie wiadomości do byłej/byłego po gumijagodach nigdy nie jest dobrym pomysłem, nawet jeśli się takim wydaje. Jednak, jeśli jeszcze wiadomość nie została odczytana to jest szansa ratunku i można chociaż ten ton złagodzić. Tak samo jeśli mamy system event sourcingowy i wysyłamy zdarzenia z opóźnieniem (np. wzorcem “Outbox Pattern” - jak chcesz o nim poczytać to daj znać to opiszę go w jednym z kolejnych newsletterów lub na blogu) to możemy go jeszcze zedytować. Jeśli używamy np. Marten i pod spodem Postgres (czy też po prostu bazę relacyjną) możemy to zrobić zwykłą migracją. Czy to jest “best practice”? Nie do końca, ale działa o ile jeszcze zdarzenie nie wyszło. Poza tym umówmy się, nie mówimy tu o best practices, tylko o ratowaniu sytuacji.
  3. Jeśli wysłaliśmy wiadomość WhatsUp to spróbujmy ją usunąć - większość szyn (np. Kafka) umożliwia usunięcie wysłanych na nie wiadomości. Delikatnie mówiąc - nie jest to rozwiązanie sugerowane i ma swoje daleko idące konsekwencje. Ale da się zrobić . Może też nie być skuteczne, bo wiadomość mogłabyć już odczytana i usunięcie nic nie pomoże, ale przynajmniej ponownie nie zostanie już więcej odczytana. Nie jest to co bym sugerował, ale tak jak wiemy - jakoś się trzeba ratować.
  4. Przeprosić - można przeprosić, można powiedzieć, że to ktoś inny dorwał się do naszego telefonu - jak Cię złapą za rękę twierdzić, że to nie nasza ręka. Ogólnie wykonać tzw. “akcję korygującą”. To tak jak z fakturą. Jak już ją wystawiliśmy, nie możemy ją zedytować. Możemy tylko zrobić korektę. Albo jak przelejemy komuś za mało pieniędzy to nie edytujemy przelew tylko wysyłamy drugi z brakującą kwotą. Wbrew temu co zwykł mówić “biznes” w procesie jest zawsze jakieś wyjście awaryjne. W normalnym świecie, zawsze można zadzwonić do kogoś, ewentualnie napisać maila, zweryfikować. Tak samo powinniśmy robić w naszych systemach zwykle jesteśmy w stanie wykonać akcję korygującą.

No i wiadomo, podstawowa zasada - pijesz - nie pisz!

Jeśli interesują Cię więcej blasków i cieni Event-Driven Design to zapraszam Cię do obejrzenia nagrania z SegFault Unconference. Niestety strasznie cicho nagrane, więc zachęcam do ogladania na słuchawkach. Dla mnie ważne nagranie, bo tak jak pisałem wcześniej w newsletterach - debiut. Ciekawe dla mnie było to obejrzeć i zobaczyć jak z każdą minutą z w ch… zestresowanego przechodzę w coraz większy luz. Ciekawe doświadczenie!

Zachęcam też do lektury pierwszej części relacji z Domain Driven Design Europe 2020, nietypowa relacja, bo trochę też o mojej drodze i podejściu do DDD: https://oskar-dudycz.pl/2020/02/16/relacja-z-domain-driven-design-europe-2020-cz-1-event-sourcing/

Chciałbym też poinformować, że dzięki pomocy i wsparciu JetBrains będę miał do rozdysponowania prezenty na trasie Event Sourcing Tour. Najbliższy przystanek - czwartek 27 lutego (tak - ten czwartek!) w Opolu: https://www.meetup.com/pl-PL/Chillout-Meetup/events/268603135/

Niedługo będę miał też niespodziankę! Za 40 minut będę miał call, gdzie będę dogrywał temat - stay tuned!

Jak zwykle liczę bardzo na Twój feedback oraz propozycję do tematów, które by były dla Ciebie ciekawe do poczytania.

Pozdrawiam serdecznie!

Oskar

  • © Oskar Dudycz 2019-2020