⚖️ Load balancer — polityki rozdziału żądań
Kieruj napływające żądania do serwerów zaplecza politykami round-robin, least-connections, ważoną i losową. Obserwuj, jak kolejki, opóźnienia i wykorzystanie rozjeżdżają się przy zmiennym ruchu i różnej wydajności serwerów.
O symulacji load balancera
Ta symulacja modeluje load balancer rozdzielający napływające żądania między pulę serwerów zaplecza. Żądania napływają jako proces Poissona, z odstępami między nadejściami wyznaczanymi z rozkładu wykładniczego według wzoru minus logarytm naturalny liczby losowej o rozkładzie jednostajnym, podzielony przez tempo napływu lambda. Każdy serwer obsługuje jedno żądanie naraz, z własnym wykładniczo rozłożonym czasem obsługi ustalonym przez indywidualne tempo obsługi mu, podczas gdy oczekujące żądania czekają w kolejce przypisanej do danego serwera.
Przyciski polityk przełączają między round-robin, least-connections, ważonym i losowym dysponowaniem, a suwaki dostosowują liczbę serwerów (od 2 do 8), tempo napływu lambda (od 0,5 do 9) oraz prędkość symulacji. Animacja pokazuje żądania podróżujące z węzła LB do wybranego serwera, głębokość kolejki jako kropki oraz statystyki na żywo dotyczące średniego opóźnienia, ukończonych żądań, żądań w systemie i odrzuconych żądań. Ilustruje to, dlaczego systemy kolejkowe stają się niestabilne w miarę zbliżania się obciążenia do jedności — co jest kluczowym zagadnieniem w rzeczywistych systemach rozproszonych.
Najczęściej zadawane pytania
Czym jest load balancer i co pokazuje ta symulacja?
Load balancer znajduje się przed kilkoma serwerami zaplecza i decyduje, który z nich powinien obsłużyć każde napływające żądanie. Ta symulacja animuje tę decyzję w czasie rzeczywistym, pokazując żądania płynące z centralnego węzła LB do serwerów w ramach czterech różnych polityk dysponowania, z kolejkami, opóźnieniem i wykorzystaniem na żywo, dzięki czemu można porównać zachowanie poszczególnych polityk.
Jak działa tutaj polityka round-robin?
Round-robin utrzymuje wskaźnik, który cyklicznie przechodzi przez serwery w ustalonej kolejności: serwer 0, potem 1, potem 2, i z powrotem do 0. Jest sprawiedliwy pod względem liczby żądań i trywialny w implementacji, ale ignoruje, jak bardzo zajęty lub jak szybki jest każdy serwer, więc nadal może gromadzić kolejki na wolniejszych serwerach.
Jaka jest różnica między dysponowaniem least-connections a ważonym?
Least-connections wysyła każde nowe żądanie do serwera z najmniejszą liczbą aktywnych żądań, licząc zarówno bieżące zadanie, jak i kolejkę, więc dostosowuje się do nierównomiernego obciążenia. Dysponowanie ważone natomiast wybiera serwer z prawdopodobieństwem proporcjonalnym do jego wagi, która w tym modelu jest równa jego tempu obsługi, więc szybsze serwery otrzymują proporcjonalnie więcej ruchu niezależnie od bieżącego obciążenia.
Co kontrolują suwaki Servers, Arrival rate i Sim speed?
Suwak Servers ustala liczbę istniejących serwerów zaplecza, od 2 do 8. Suwak Arrival rate ustala lambda, czyli średnią liczbę żądań na symulowaną sekundę, od 0,5 do 9. Suwak Sim speed skaluje tempo, w jakim upływa symulowany czas w stosunku do czasu rzeczywistego, pozwalając oglądać powoli lub przyspieszyć, bez zmiany leżących u podstaw statystyk.
Czym są napływy Poissona i dlaczego są używane?
Proces Poissona modeluje niezależne zdarzenia losowe zachodzące ze stałym średnim tempem, przy czym odstępy między nadejściami mają rozkład wykładniczy. Symulacja generuje każdy odstęp jako minus logarytm naturalny liczby losowej o rozkładzie jednostajnym, podzielony przez lambda. Rzeczywisty ruch webowy i sieciowy jest nierównomierny (bursty) i dobrze przybliżany przez ten model, dlatego jest to standardowe założenie w teorii kolejek.
Dlaczego opóźnienie eksploduje, gdy wykorzystanie zbliża się do 100 procent?
Wykorzystanie rho to ułamek czasu, w którym serwer jest zajęty, równy jego tempu napływu podzielonemu przez tempo obsługi mu. Klasyczne wyniki teorii kolejek pokazują, że średni czas oczekiwania rośnie proporcjonalnie do jeden przez (jeden minus rho). W miarę zbliżania się rho do jedności ten wyraz dąży do nieskończoności, więc niewielkie wzrosty ruchu powodują gwałtowny wzrost kolejek i opóźnień, a powyżej rho równego jeden kolejka rośnie bez ograniczeń.
Co oznacza licznik Dropped?
Każdy serwer ma maksymalną długość kolejki wynoszącą dwanaście. Jeśli żądanie napływa do serwera, którego kolejka jest już pełna i który jest aktualnie zajęty, nie może zostać przyjęte i jest liczone jako odrzucone, a nie zakolejkowane. Rosnący licznik Dropped sygnalizuje, że system jest przeciążony dla wybranej polityki i tempa napływu.
Jak obliczane jest średnie opóźnienie w tym modelu?
Gdy żądanie kończy obsługę, symulacja bierze jego całkowity czas w systemie, czyli bieżący symulowany czas minus czas jego powstania, obejmujący zarówno oczekiwanie w kolejce, jak i obsługę. Te sumy są dodawane i dzielone przez liczbę ukończonych żądań, dając bieżące średnie opóźnienie pokazywane w panelu statystyk.
Czy ta symulacja jest fizycznie i matematycznie dokładna?
Wykorzystuje rzeczywiście wykładnicze czasy między nadejściami i obsługi, jednoserwerowe kolejki FIFO oraz standardowe cztery polityki dysponowania, więc wiernie odtwarza jakościowe zachowanie systemów kolejkowych typu M/M/c. Tempa obsługi serwerów są przypisywane według ustalonego wzorca, a nie losowo, a limit kolejki jest skończony, więc jest to wierny model dydaktyczny, a nie predyktor wydajności produkcyjnej.
Dlaczego round-robin nadal może powodować nierównowagę, mimo że liczby są równe?
Round-robin wyrównuje liczbę żądań otrzymywanych przez każdy serwer, ale nie ilość pracy. Jeśli żądania różnią się czasem obsługi lub serwery różnią się tempem mu, wolniejszy serwer otrzymujący tę samą liczbę zadań zaczyna zostawać w tyle, budując długą kolejkę, podczas gdy szybsze serwery opróżniają się do stanu bezczynności. Polityki least-connections i ważona rozwiązują ten problem, reagując na obciążenie lub pojemność.
Gdzie w świecie rzeczywistym wykorzystuje się te polityki równoważenia obciążenia?
Stanowią one podstawę farm serwerów WWW, sieci dostarczania treści, replik odczytu baz danych oraz siatek mikrousług. Reverse proxy, takie jak NGINX i HAProxy, oraz chmurowe load balancery oferują bezpośrednio tryby round-robin, least-connections i ważony. Symulacja oddaje te same kompromisy, które inżynierowie rozważają przy wyborze polityki dla ruchu produkcyjnego.