Blokowanie optymistyczne czy pesymistyczne: którego użyć przy rezerwacji lub realizacji zamówienia?
Share

In this article
Używaj blokowania pesymistycznego, gdy wielu użytkowników konkuruje o ten sam wiersz, np. ostatnie bilety na wydarzenie. Używaj blokowania optymistycznego, czyli pola wersji, gdy konflikty są rzadkie, np. przy rezerwacjach lub koszykach rozłożonych na wiele slotów i produktów. Wybierz metodę na podstawie tego, jak często dwaj pisarze faktycznie trafiają na ten sam wiersz.
Jaka jest różnica między blokowaniem optymistycznym a pesymistycznym?
Blokowanie pesymistyczne blokuje innych pisarzy, gdy jedna transakcja trzyma wiersz, więc konflikty czekają. Blokowanie optymistyczne pozwala wszystkim działać, a następnie odrzuca zapis, jeśli pole wersji zmieniło się pod spodem, co wymusza ponowienie próby. Pierwsze kosztem opóźnienia daje pewność; drugie kosztem sporadycznych powtórzeń eliminuje oczekiwanie.
Kiedy blokowanie optymistyczne jest lepszym wyborem?
Blokowanie optymistyczne sprawdza się, gdy zapisy są krótkie, a kolizje rzadkie. W slotach rezerwacyjnych Trexind pole wersji oznacza, że zapis przegrywający wyścig powoduje konflikt, a nie ciche nadpisanie, i wymusza ponowną próbę na aktualnym stanie slotu. Trzymanie blokady przez cały czas żądania kosztowałoby więcej niż oszczędzało.
Kiedy blokowanie pesymistyczne jest lepszym wyborem?
Blokowanie pesymistyczne sprawdza się na jednym gorącym wierszu, o który walczy wielu kupujących w tym samym momencie, np. ostatnie bilety na popularne wydarzenie. Tam powtarzające się próby optymistyczne powodują chaos i zmuszają przegranych do powtarzania całej realizacji zamówienia. Krótka blokada pozwala drugiemu kupującemu poczekać kilka milisekund i zobaczyć, że bilety się wyprzedały.
Jak zdecydować dla własnego systemu?
Zastanów się, jak często dwóch pisarzy trafia na ten sam wiersz i jaki koszt ma dla użytkownika przegrana próba. Rzadkie kolizje i tanie powtórzenia wskazują na optymistyczne. Częste kolizje na jednym wierszu lub kosztowne powtórzenia wskazują na pesymistyczne. Zmierz poziom konfliktów przed podjęciem decyzji; ta sama aplikacja może używać obu metod.
Wiele wierszy, mało kolizji na wiersz: optymistyczne (stan magazynowy dla setek SKU)
Jeden wiersz, wielu jednoczesnych pisarzy: pesymistyczne (ostatnie bilety na wydarzenie)
Zapis odbywa się raz na encję: krótka blokada jest w porządku (przesłanie egzaminu)
W skrócie
Ostatnie bilety na wydarzenie (FindYourVibe) · Wysoka konkurencja na jednym wierszu · Pesymistyczna blokada wiersza · Przegrany czeka kilka milisekund zamiast powtarzać cały proces realizacji
Sloty na wizyty i stoliki (Trexind) · Niska konkurencja, krótkie zapisy · Optymistyczne pole wersji · Blokada na czas całego żądania nie jest opłacalna
Stan magazynowy dla wielu SKU (Skyxis) · Niska konkurencja, koszyki rzadko trafiają na ten sam wiersz · Optymistyczne pole wersji · Blokada na czas realizacji zamówienia kosztuje więcej niż sporadyczne powtórzenia
Przesłanie próby egzaminu (PS Classes) · Jednorazowo na próbę · Blokada Redis na ID próby · Przesłanie odbywa się raz, więc kilka milisekund blokady jest tańsze niż uszkodzony ranking
Artykuł pierwotnie opublikowany na sakshamjain.codes/blog/optimistic-vs-pessimistic-locking. Potrzebujesz takiego rozwiązania? Zobacz moje usługi na NexoRush lub napisz do mnie.