Jedna usługa - wiele maszyn

Gdy obciążenie przekracza możliwości pojedynczego serwera usługowego, można zastosować równoważenie obciążenia na większą liczbę maszyn. Sam proces jest o wiele trudniejszy niż proste rozrzucenie pakietów

Początkowo aplikacja firmowa zazwyczaj bywa obsługiwana przez pojedynczy serwer, który daje sobie radę z obsługą całego obciążenia. W miarę rozwoju usługi obsługiwanej przez daną aplikację pojawia się większe obciążenie, do którego obsługi firma musi rozdzielać zapytania na kilka maszyn. Zadanie to wykonuje load balancer, który kieruje ruch do właściwych maszyn.

Podstawowym działaniem load balancera jest kierowanie ruchu na podstawie informacji w warstwie drugiej i czwartej, na przykład na podstawie adresów IP lub MAC czy portu TCP. Rozwiązanie równoważące obciążenie musi mieć także utrzymanie sesji oraz obsługę kontroli dostępności serwerów, do których ruch jest kierowany. Jest to istotne, gdyż przekierowanie ruchu tej samej otwartej sesji użytkownika do innego serwera powoduje zerwanie sesji. Ponadto ruch nie może być kierowany do serwera, o którym wiadomo, że nie przyjmuje nowych żądań, bo jest wyłączony, uszkodzony lub maksymalnie obciążony.

Typowe algorytmy stosowane w load balancerach obejmują różne planowanie rozłożenia ruchu na farmę serwerów - między innymi kolejne przełączanie (round robin), minimalizację ilości pakietów lub pasma, analizę liczby połączeń lub czasu odpowiedzi, a także wykorzystanie informacji dostarczanych z serwerów usługowych za pomocą odpowiednich narzędzi czy protokołu SNMP.

Równoważenie w warstwie siódmej

Na rynku dostępne są load balancery, które potrafią rozkładać ruch na podstawie warstwy siódmej - działanie nazywa się czasami przełączaniem na podstawie treści. W tym modelu decyzje o skierowaniu ruchu do serwerów podejmowane są na podstawie dodatkowych informacji, takich jak: nagłówki HTTP, adres zasobu, identyfikator sesji SSL oraz dane formularzy HTML.

Zróżnicowanie w stosunku do prostego sterowania ruchem (do czwartej warstwy włącznie) sprawia, że obciążenie może być kierowane do właściwego serwera, także pod kątem usługi. Stąd wynika, że nie wszystkie serwery usługowe, do których load balancer kieruje ruch, muszą mieć zaimplementowany komplet usług. Zatem kierowanie ruchu na podstawie treści umożliwia dostrojenie konfiguracji i wyposażenia serwerów pod kątem obsługiwanego obciążenia - na przykład ruch związany z usługą HTTPS może być równoważony inaczej niż HTTP i kierowany do innych maszyn.

Czy ten serwer działa?

Do kontroli poprawności działania serwerów wykorzystuje się różne mechanizmy, takie jak: odpytanie ICMP (ping), SNMP oraz różne skrypty, które mogą przekierować do load balancera informacje nie tylko na temat dostępności i wydajności, ale także szczegółowe dane związane ze sprzętem, połączeniami sieciowymi, usługami systemu operacyjnego lub nawet informacje o pracy samej aplikacji. Pozyskane w ten sposób dane umożliwiają lepsze planowanie równoważenia obciążenia, by uwzględnić pracę najważniejszych elementów serwerów, a także dostatecznie wcześnie odłączyć sesje od serwera, który sygnalizuje pojawiające się problemy sprzętowe.

Utrzymać sesję

Utrzymywanie sesji jest niezbędne w przypadku protokołów, które nie zachowują informacji o stanie po obu stronach - a takim protokołem jest HTTP. Oznacza to, że wszystkie sesje danego użytkownika muszą być przetworzone przez ten sam serwer od początku do końca. Aby to zapewnić, wykorzystuje się różne kryteria - adres IP, przechowywane w przeglądarce cookie lub skrót kryptograficzny z różnych parametrów w adresie URL.

Jak usprawnić pracę serwerów

Niektóre urządzenia łączą load balancer z opcjami akceleracji treści lub serwowanych aplikacji. Najczęściej wykorzystywaną treść można wtedy wysłać z cache wbudowanego w load balancer, a także optymalizować obsługę protokołów niektórych aplikacji. Kolejną opcją, która przyspieszy pracę aplikacji, jest kompresja danych. W przypadku aplikacji Web 2.0, które często wykorzystują dużo arkuszy CSS oraz rozległe skrypty JavaScript, dobrze dostosowana kompresja może przyspieszyć transakcje od trzech do pięciu razy.

Ponieważ load balancer i tak ingeruje w połączenia TCP, może jednocześnie przeprowadzać optymalizację ruchu. Zazwyczaj zaczyna się od korekcji błędów, skalowania okien oraz buforowania, co umożliwia sprawniejsze wykorzystywanie pasma sieciowego i redukuje liczbę nawiązywanych połączeń.

Dalsza optymalizacja pomiędzy load balancerem a serwerami obejmuje multipleksowanie połączeń TCP, co umożliwia konsolidację żądań HTTP w znacznie mniejszej liczbie długo otwartych połączeń TCP. Taka optymalizacja znacząco zmniejsza obciążenie systemu operacyjnego serwera, gdyż redukuje narzut na otwieranie i zamykanie sesji. Urządzeniem, które potrafi wykonać taką optymalizację, jest Citrix NetScaler.

Integracja z siecią

Load balancer nie tylko musi rozdzielać ruch na podstawie różnych kryteriów, musi także integrować się z siecią, zatem powinien obsługiwać protokoły routingu (np. OSPF, RIP, BGP) i typowe opcje sieciowe, takie jak agregowanie łączy 802.3ad, tagowanie wirtualnych podsieci VLAN 802.1q. Oprócz tego powinien obsługiwać wiele protokołów (np. TCP, UDP, FTP, HTTP, HTTPS i SIP), by mógł pracować w różnych środowiskach. Jeśli organizacja świadczy różne usługi internetowe, dobry load balancer będzie mógł zarządzać ruchem więcej niż jednej usługi.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200