Załóżmy taką sytuację:
- Użytkownik w panelu web uzupełnia formularz i go zatwierdza wysyłając żądanie do backendu
- Backend robi update na naszej bazie
- Backend wysyła żądanie do zewnętrznej aplikacji z danymi przesłanymi przez użytkownika
- Backend zapisuje do redisa dane formularza
W prawidłowym scenariuszu we wszystkich tych miejscach - u nas na bazie, w bazie zewnętrznej aplikacji, w redisie powinny być spójne dane. Ale przecież może dojść do sytuacji, że ta aplikacja backendowa wybuchnie między krokiem 2 a 3, lub 3 a 4 prowadząc do tego, że część danych nie będzie zaktualizowana.
Dodatkowo, gdy użytkownik szybko wyśle 3 żądania z innymi danymi, nazwijmy te żądania: A, B, C
, to przecież krok 2 może wykonać się w kolejności np. A, B, C
a krok 3 i 4 niekoniecznie, powodując, że dane będą niespójne.
Co w takiej sytuacji można zrobić? Gdy mamy do czynienia tylko z bazą, to temat jest w miarę prosty, bo używamy transakcji i tyle. Ale w tym przypadku? Załóżmy, że krok 2 i 3 się wykonuje, ale 4 nigdy nie, bo jest jakiś problem z redisem. Trzeba teraz cofnąć zmiany z kroku 2 i 3. W kroku 3 można to ograć transakcją, ale wycowanie zmian z kroku 2 to już nie taka prosta sprawa, bo przecież to jest zewnętrzny serwis. Trzeba strzelić POSTem z poprzednimi danymi..