Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Czym jest Exponential Backoff i Random Jitter?

Okładka posta: Czym jest Exponential Backoff i Random Jitter?
Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
W rozwoju systemów rozproszonych błędy to nie wyjątek, a norma. Sieć może się zawiesić, usługa - tymczasowo upaść, baza - odmówić na sekundę. I w tym momencie pojawia się proste, ale niebezpieczne pytanie: jak dokładnie powtarzać zapytanie? Jeśli zrobisz to tak samo, system łatwo sam się zniszczy.
Angry Spongebob Squarepants GIF.gif
Właśnie tutaj pojawiają się opóźnienie eksponencjalne (exponential backoff) i losowy jitter (random jitter).

Exponential Backoff

Exponential Backoff to strategia ponownych prób, w której każda następna próba (retry) odbywa się z coraz większym opóźnieniem. Idea jest bardzo prosta: jeśli coś się zepsuło, nie warto od razu ponownie pukać do tych samych drzwi. Pierwsza próba może być niemal natychmiastowa, druga - po sekundzie, trzecia - po dwóch, potem cztery, osiem i tak dalej. Opóźnienie rośnie eksponencjalnie.
To daje systemowi czas na "złapanie oddechu". Jeśli usługa jest tymczasowo przeciążona lub upada z powodu szczytowego obciążenia, exponential backoff zmniejsza nacisk, a nie go zwiększa. Bez tej strategii klienci zaczynają masowo próbować ponownie w tym samym czasie, a nawet zdrowa usługa może nie wytrzymać takiego naporu.
Jednak tutaj jest podstępny moment. Wyobraź sobie tysiąc klientów, którzy jednocześnie otrzymali błąd i używają takiej samej formuły backoff. Wszyscy będą czekać jedną sekundę, potem dwie, potem cztery - i znów razem uderzą w serwer. Powstaje zsynchronizowany tłum, który przychodzi falami. To już znany problem - efekt "thundering herd".
Dlatego do exponential backoff prawie zawsze dodaje się losowy jitter (random jitter). Jitter to małe losowe przesunięcie w opóźnieniu. Zamiast czekać dokładnie 4 sekundy, klient może poczekać 3.2, inny - 4.7, jeszcze ktoś - 2.9. Wszystkie te same opóźnienia eksponencjalne są zachowane, ale zapytania nie przychodzą już jednocześnie.
Z jitterem system zaczyna działać "żywiej" i stabilniej. Obciążenie rozkłada się w czasie, usłudze łatwiej się odbudować, a prawdopodobieństwo ponownego upadku z powodu masowych prób ponownych znacznie maleje. To szczególnie ważne dla API, kolejek, pracowników zadań i wszelkich integracji z zewnętrznymi usługami.
Tor Muppets GIF.gif
W rezultacie exponential backoff odpowiada na pytanie "kiedy powtarzać?", a jitter - "jak zrobić to niezsynchronizowane z wszystkimi innymi? Razem tworzą podstawową architekturę dla niezawodnych systemów. Jeśli masz retry bez backoff - to czerwony flag. Jeśli jest backoff bez jittera - żółty. A gdy są oba, system ma znacznie większe szanse przetrwać rzeczywiste, a nie laboratoryjne awarie.

Ten post nie ma jeszcze żadnych dodatków od autora.

Czym jest Elasticsearch i jak działa?
22 lis 12:35

Czym jest Elasticsearch i jak działa?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest baza danych typu time-series?
22 lis 12:42

Czym jest baza danych typu time-series?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
22 lis 12:49

Co to jest VACUUM w PostgreSQL?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest B-Tree (drzewo zrównoważone)?
22 lis 12:58

Czym jest B-Tree (drzewo zrównoważone)?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Fix problem with installing Ruby 3.4.3 (and not only) via RVM on macOS (Apple Silicon)
30 gru 14:05

Fix problem with installing Ruby 3.4.3 (and not only) via RVM on macOS (Apple Silicon)

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Problem Grzmiącego Stada: co to jest i dlaczego łamie produkcję
15 sty 10:14

Problem Grzmiącego Stada: co to jest i dlaczego łamie produkcję

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Podłączenie usługi Elasticsearch do aplikacji Rails (Coolify w chmurze, serwer na Hetzner).
15 lut 13:45

Podłączenie usługi Elasticsearch do aplikacji Rails (Coolify w chmurze, serwer na Hetzner).

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
„Brak miejsca na urządzeniu” - kiedy Docker zjadł cały dysk
15 lut 19:57

„Brak miejsca na urządzeniu” - kiedy Docker zjadł cały dysk

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
15 lut 20:03

Sidekiq 7.3.x i connection_pool 3.0 - niekompatybilność, która łamie pracowników

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska