W oparciu o to, co zrozumiałem na temat ostatecznej spójności, wszystkie te usługi (konsumenci) otrzymają wydarzenie w tym samym czasie i przetworzą je osobno, co w dobrym scenariuszu doprowadzi do spójności danych.
Nie, niekoniecznie. Jak skomentowałem, nie możemy cofnąć wysłanego e-maila, więc nadal potrzebujemy czegoś w rodzaju „sekwencji”. IPC w zakresie zarządzania danymi opartymi na zdarzeniach nie jest zwolnione z organizacji 1 .
Na przykład wiadomość e-mail nie powinna zostać wysłana, chyba że poprzednie transakcje zakończą się powodzeniem, a usługa e-mail otrzyma dowód. 3)
Co jednak jeśli usługa nie przetworzy zdarzenia? np. nagłe rozłączenie, błąd bazy danych itp. Jaki jest dobry wzorzec / praktyka obsługi tych błędów transakcji?
Przywitaj się z błędami obliczeń rozproszonych . To właśnie komplikują sprawy i, jak zwykle, nie ma srebrnych kul, z którymi można by sobie poradzić.
Przed wyruszeniem w podróż w poszukiwaniu Zaginionej Arki musimy najpierw zapytać organizację. Często rozwiązaniem jest sposób, w jaki organizacja boryka się z tymi problemami w prawdziwym świecie .
Co robią wszyscy (działy), gdy brakuje niektórych danych lub są one niekompletne?
Przekonamy się, że różne działy mają różne rozwiązania, które łącznie stanowią rozwiązanie do wdrożenia.
W każdym razie, oto kilka praktyk, które mogą pomóc nam w realizacji strategii.
Zamiast zapewniać, że system jest cały czas w spójnym stanie, możemy zaakceptować, że system go dostanie w pewnym momencie w przyszłości. Takie podejście jest szczególnie przydatne w przypadku długotrwałych operacji biznesowych.
Sposób, w jaki system może osiągnąć spójność, różni się w zależności od systemu. Może obejmować od zautomatyzowanych procesów do pewnego rodzaju interwencji człowieka. Na przykład typowe próbowanie go ponownie później lub kontakt z obsługą klienta .
Przerwij wszystkie operacje
Przywróć system do spójnego stanu dzięki kompensacji transakcji . Musimy jednak wziąć pod uwagę, że transakcje te mogą również zawieść, co może doprowadzić nas do punktu, w którym niespójność jest jeszcze trudniejsza do rozwiązania. I znowu nie możemy cofnąć wysłanego e-maila.
W przypadku małej liczby transakcji takie podejście jest wykonalne, ponieważ liczba transakcji kompensujących jest również niska. Gdyby w IPC było zaangażowanych kilka transakcji biznesowych, obsługa jednej transakcji kompensacyjnej dla każdej z nich byłaby trudna.
Jeśli pójdziemy na transakcje kompensacyjne , okaże się, że wzorzec projektowy wyłącznika jest bardzo przydatny - i obowiązkowo ośmielę się powiedzieć -
Transakcje rozproszone
Pomysł polega na objęciu wielu transakcji w ramach jednej transakcji, poprzez ogólny proces zarządzania znany jako Transaction Manager . Częstym algorytmem do obsługi transakcji rozproszonych jest zatwierdzanie dwufazowe .
Główną troską rozproszonych transakcji jest to, że polegają one na blokowaniu zasobów w trakcie ich trwania, a jak wiemy, w przypadku Menedżera transakcji może się również nie udać .
Jeśli menedżerowie transakcji zostaną narażeni na szwank, możemy skończyć z kilkoma blokadami w różnych kontekstach ograniczonych, co skutkuje nieoczekiwanymi zachowaniami wynikającymi z kolejkowania wiadomości. 2)
Rozkład operacji. Czemu?
Jeśli dekomponujesz istniejący system i znajdziesz kolekcję pojęć, które naprawdę chcą mieścić się w granicach pojedynczej transakcji, być może zostaw je do końca.
Sam Newman
Zgodnie z powyższymi argumentami Sam - w swojej książce Building Microservices - stwierdza, że jeśli naprawdę nie możemy sobie pozwolić na ostateczną spójność, powinniśmy teraz unikać podziału operacji.
Jeśli nie możemy sobie pozwolić na podział niektórych operacji na dwie lub więcej transakcji, można powiedzieć, że - prawdopodobnie - transakcje te należą do tego samego ograniczonego kontekstu, a przynajmniej do kontekstu przekrojowego, który pozostaje do modelowania.
Na przykład w naszym przypadku zdajemy sobie sprawę, że transakcje nr 1 i nr 2 są ze sobą ściśle powiązane i prawdopodobnie oba mogą należeć do tego samego ograniczonego kontekstu Konta , Użytkownicy , Rejestr , cokolwiek ...
Rozważ umieszczenie obu operacji w granicach tej samej transakcji. Ułatwi to obsługę całej operacji. Waży również poziom krytyczności każdej transakcji. Prawdopodobnie, jeśli transakcja nr 2 zakończy się niepowodzeniem, nie powinno to zagrozić całej operacji. W razie wątpliwości zapytaj organizację .
1: Nie taki rodzaj aranżacji, jaki myślisz. Nie mówię o orkiestrze ESB. Mówię o tym, aby usługi reagowały na właściwe wydarzenie.
2: Możesz znaleźć ciekawe opinie Sama Newmana dotyczące transakcji rozproszonych.
3: Sprawdź odpowiedź Davida Parkera na ten temat.