Cel slajdu: Slajd omawia zagadnienie „Ważony Round Robin (Weighted Round Robin)” w kontekście: Proporcjonalny rozdział żądań w klastrach heterogenicznych.
Proporcjonalny rozdział żądań w klastrach heterogenicznych
Kompensacja różnic wydajnościowych za pomocą wag przypisanych do węzłów
Ważony Round Robin (ang. Weighted Round Robin): Slajd przedstawia zagadnienie Proporcjonalny rozdział żądań w klastrach heterogenicznych w ramach tematu Ważony Round Robin (Weighted Round Robin) na przykładach konfiguracji i diagnostyki w systemie Linux. Zasady semantyki i buforowania odpowiedzi opisano w RFC 9110 i RFC 9111, a popularną implementację pośrednika stanowi Squid.
W produkcyjnych centrach danych jednorodność sprzętowa jest stanem rzadko spotykanym w dłuższej perspektywie czasowej. W miarę rozwoju infrastruktury przedsiębiorstwa do klastra dołączane są serwery nowszych generacji, dysponujące znacznie wydajniejszymi procesorami oraz większą ilością pamięci operacyjnej, podczas gdy starsze maszyny wciąż pozostają w eksploatacji. Stosowanie w takim środowisku zwykłego algorytmu Round Robin prowadziłoby do marnotrawstwa zasobów maszyn mocnych lub przeciążenia maszyn słabszych. Rozwiązaniem tego problemu jest algorytm Weighted Round Robin (ważony algorytm karuzelowy).
Każdy węzeł w konfiguracji pośrednika otrzymuje atrybut wagi (ang. weight). Liczba ta określa proporcję ruchu, jaka powinna trafić do danego serwera w pełnym cyklu rotacyjnym. Jeżeli w klastrze pracują trzy maszyny o wagach odpowiednio 5, 3 i 2, to na każde 10 żądań pierwsza otrzyma 5, druga 3, a trzecia 2. Naiwna implementacja tego algorytmu polegałaby na wysłaniu pięciu kolejnych żądań do serwera pierwszego, następnie trzech do drugiego i dwóch do trzeciego. Takie podejście generuje jednak niepożądane zjawisko mikroudarów (ang. traffic bursts), gwałtownie obciążając pojedynczą maszynę w krótkim przedziale czasu.
Z tego względu zaawansowane serwery proxy, w tym Nginx, implementują tzw. wygładzony ważony algorytm karuzelowy (ang. Smooth Weighted Round Robin). W każdym kroku decyzyjnym algorytm modyfikuje bieżące wagi węzłów: dodaje do bieżącej wagi każdego serwera jego wagę efektywną, wybiera maszynę o najwyższej wartości bieżącej, po czym odejmuje od jej wagi sumę wag wszystkich serwerów w puli. W rezultacie ruch jest perfekcyjnie wymieszany w czasie (np. sekwencja: A, B, A, C, A, B, A, B, A, C), co zapobiega powstawaniu wąskich gardeł w kolejkach procesora serwerów zaplecza.
Wyjaśnienie skrótów i pojęć:
Forward Proxy – pośrednik wychodzący reprezentujący klientów wobec serwerów zewnętrznych.
Reverse Proxy – pośrednik przychodzący reprezentujący serwery wobec klientów zewnętrznych.
Cache (pamięć podręczna) – przechowywanie kopii odpowiedzi w celu skrócenia czasu i ograniczenia ruchu, RFC 9111.
ACL (Access Control List) – lista reguł kontroli dostępu do zasobów przez proxy.
Przydatne łącza: RFC 9110 (HTTP – semantyka); RFC 9111 (buforowanie HTTP); Squid (dokumentacja).