Spis treści[Ukryć][Pokazać]
Dostępność aplikacji nigdy nie była traktowana tak poważnie, jak dzisiaj, kiedy używamy aplikacji nie tylko do komunikacji, czy to osobistej, czy zawodowej, i kiedy aplikacje to biznes.
Aplikacje, które nie są stale online lub są niestabilne, tracą użytkowników i znaczenie, ostatecznie stając się przestarzałe. Stało się to w mgnieniu oka. Ponieważ internet nigdy nie śpi i działa 24 godziny na dobę, 7 dni w tygodniu, ta sama idea musi dotyczyć aplikacji.
Skalowalność ma kluczowe znaczenie dla osiągnięcia tego celu i zapewnienia dostępności aplikacji. Równoważenie obciążenia jest jednym z najważniejszych elementów zapewniających dostępność. Wiele osób nadal uważa, że równoważenie obciążenia można osiągnąć za pomocą prostego skryptu.
Jednak tak nie jest. Tylko on zapewnia dostęp do programów na całym świecie — w dowolnym czasie iz dowolnego urządzenia.
W tym poście przyjrzymy się między innymi równoważeniu obciążenia, jego algorytmom i jego powiązaniu z mikrousługami. Zaczynajmy!
Co to jest równoważenie obciążenia?
Wraz ze wzrostem zapotrzebowania na stronę internetową lub aplikację biznesową pojedynczy serwer wkrótce nie będzie w stanie obsłużyć całego obciążenia. Organizacje rozdzielają obciążenie pracą na wiele serwerów, aby zaspokoić popyt. Ta metoda, znana jako „równoważenie obciążenia”, zapobiega przeciążeniu pojedynczego serwera, co może spowodować jego spowolnienie, odrzucenie żądań, a nawet awarię.
Równoważenie obciążenia równomiernie rozdziela ruch sieciowy, aby uniknąć awarii spowodowanej przeciążeniem zasobów. Dzięki tej metodzie aplikacje, strony internetowe, bazy danych i inne zasoby komputerowe działają lepiej i są bardziej dostępne. Pomaga również we właściwym i terminowym przetwarzaniu żądań użytkowników.
Z perspektywy użytkownika równoważenie obciążenia służy jako niewidoczny pośrednik między klientem a zbiorem serwerów, zapewniając, że żądania połączeń nie zostaną porzucone. Aplikacje, strony internetowe, bazy danych i usługi online najprawdopodobniej upadłyby, gdyby popyt stał się zbyt duży bez równoważenia obciążenia.
Setki tysięcy żądań użytkowników mogą być wysyłane jednocześnie do jednej strony internetowej o dużym natężeniu ruchu. Do prawidłowego wypełnienia stron internetowych żądaną zawartością, taką jak tekst, obrazy, wideo i strumieniowe przesyłanie dźwięku, potrzeba wielu serwerów. Równoważenie obciążenia jest powszechnie stosowane w farmach serwerów witryn internetowych o dużym natężeniu ruchu, a także w serwerach DNS, bazach danych i witrynach FTP (File Transfer Protocol).
Jeśli pojedynczy serwer jest przeciążony, może to działać nieprawidłowo lub nawet ulec awarii. Systemy równoważenia obciążenia zmniejszają ryzyko przestojów, równomiernie rozdzielając żądania użytkowników między zbiór serwerów. Jeśli jeden z serwerów w grupie ulegnie awarii, ruch jest przekierowywany do innych serwerów w grupie. Moduł równoważenia obciążenia automatycznie dodaje nowe serwery w procesie dystrybucji ruchu, gdy są one dodawane do puli serwerów.
Jak działa równoważenie obciążenia?
Działa w następujący sposób:
- Kiedy klient otrzymuje żądanie, na przykład za pośrednictwem przeglądarki lub aplikacji, próbuje połączyć się z serwerem.
- Gdy system równoważenia obciążenia otrzymuje żądanie, kieruje je do jednego z serwerów w grupie serwerów w oparciu o wzorce ustalone przez algorytm (lub farmę).
- Serwer odbiera żądanie połączenia i odpowiada klientowi za pośrednictwem modułu równoważenia obciążenia.
- Gdy system równoważenia obciążenia otrzyma odpowiedź, dopasowuje adres IP klienta do adresu IP wybranego serwera. Następnie odpowiedź jest przesyłana z pakietem.
- Odciążanie SSL to proces odszyfrowywania danych przy użyciu protokołu szyfrowania Security Socket Layer, dzięki czemu serwery nie muszą tego robić.
- Proces jest powtarzany aż do zakończenia sesji.
Metody równoważenia obciążenia
Aby wybrać, który z serwerów w farmie serwerów otrzyma następne żądanie, każda technika równoważenia obciążenia wykorzystuje zestaw kryteriów. Istnieje pięć typowych podejść do równoważenia obciążenia:
- Round Robin: To jest domyślne podejście i działa tak, jak się wydaje. Moduł równoważenia obciążenia rozdziela żądania w rotacyjny sposób, zaczynając od pierwszego serwera w grupie i przechodząc w dół, gdzie czeka na ponowne wywołanie. Ta metoda zapewnia, że każdy serwer obsługuje mniej więcej taką samą liczbę połączeń.
- Ważona Okrągły Robin: To podejście przypisuje każdemu serwerowi wagę (lub preferencję), która jest generalnie proporcjonalna do jego pojemności. Im więcej żądań otrzymuje serwer, tym wyższa jest waga. Na przykład serwer o wadze równej dwa otrzymuje dwa razy więcej żądań niż serwer o wadze równej jeden.
- Przyklejona sesja: To podejście, znane również jako trwałość sesji, polega na łączeniu określonych klientów i serwerów na czas trwania sesji. Aby nawiązać połączenie, system równoważenia obciążenia wykorzystuje plik cookie lub adres IP użytkownika w celu identyfikacji atrybutu użytkownika. Po nawiązaniu połączenia żądania użytkownika są kierowane do tego samego serwera, aż do zakończenia sesji. Optymalizuje to zasoby sieciowe, jednocześnie poprawiając komfort użytkowania.
- Najmniej połączeń: Ta strategia zakłada, że wszystkie żądania skutkują równym obciążeniem serwera. W rezultacie serwer z najmniejszą liczbą żądań otrzymuje następne żądanie.
- Hash IP: Algorytm ten generuje unikalny klucz skrótu na podstawie źródłowego i docelowego adresu IP klienta i serwera. Klucz służy do kierowania żądania i umożliwia wznowienie utraconego połączenia z tym samym serwerem.
Sprzęt vs. Oprogramowanie do równoważenia obciążenia
Sprzętowy moduł równoważenia obciążenia
Sprzęt fizyczny, taki jak urządzenie, tworzy sprzętowe moduły równoważenia obciążenia. Kierują one ruch do serwerów w zależności od czynników, takich jak liczba istniejących połączeń, wykorzystanie procesora i wydajność serwera. Sprzętowe systemy równoważenia obciążenia mają zastrzeżone oprogramowanie układowe, które należy konserwować i aktualizować, gdy pojawiają się nowe wersje i poprawki zabezpieczeń.
Sprzętowe moduły równoważenia obciążenia często zapewniają wyższą wydajność i kontrolę, a także szerszy zakres możliwości, takich jak uwierzytelnianie Kerberos i akceleracja sprzętowa SSL, ale wymagają pewnego poziomu wiedzy w zakresie zarządzania i konserwacji. Ponieważ sprzętowe moduły równoważenia obciążenia są mniej elastyczne i skalowalne niż programowe moduły równoważenia obciążenia, istnieje skłonność do nadmiernej alokacji sprzętowych modułów równoważenia obciążenia.
Oprogramowanie do równoważenia obciążenia
Programowe moduły równoważenia obciążenia są zazwyczaj łatwiejsze do skonfigurowania niż ich sprzętowe odpowiedniki. Są również bardziej ekonomiczne i elastyczne oraz dobrze współpracują ze środowiskami programistycznymi. Metoda programowa umożliwia dostosowanie modułu równoważenia obciążenia do dokładnych wymagań środowiska. Zwiększona elastyczność może odbyć się kosztem dodatkowego czasu spędzonego na konfigurowaniu systemu równoważenia obciążenia.
Balansery programowe zapewniają większą elastyczność w dokonywaniu modyfikacji i aktualizacji niż sprzętowe, które mają bardziej zamknięte pudełko. Wstępnie spakowane maszyny wirtualne mogą być używane jako programowe moduły równoważenia obciążenia (VM). Maszyny wirtualne pozwolą zaoszczędzić trochę czasu na ustawianie, ale mogą nie mieć wszystkich funkcji dostępnych w ich sprzętowych odpowiednikach.
Prosta implementacja równoważenia obciążenia
Wykorzystamy do tego bibliotekę Spring Cloud budować aplikacje które łączą się z innymi aplikacjami w sposób równoważący obciążenie. Podczas przetwarzania zdalnych zgłoszeń serwisowych możemy łatwo konstruować równoważenie obciążenia przy użyciu dowolnej techniki. Rozważ poniższy kod jako przykład. Zaczniemy od podstawowej aplikacji serwerowej.
Serwer będzie miał tylko jeden punkt końcowy HTTP i będzie działał w kilku instancjach. Następnie utworzymy aplikację kliencką, która używa Load Balancer do dystrybucji żądań między kilkoma instancjami serwera.
serwer
Zaczynamy od podstawy Buty sprężynowe aplikacja dla naszego przykładowego serwera:
Na początek wstrzykujemy konfigurowalną zmienną o nazwie instance_ID. Pomaga nam to rozróżnić wiele działających instancji. Następnie tworzymy pojedynczy punkt końcowy HTTP GET, który zwraca wiadomość i identyfikator instancji.
Domyślna instancja o ID 1 będzie działać na porcie 8080. Wystarczy dodać kilka parametrów programu, aby uruchomić drugą instancję:
klientem
Przyjrzyjmy się teraz kodowi klienta. W tym miejscu pojawia się Load Balancer, więc zacznijmy od włączenia go do naszej aplikacji:
Następnie opracowujemy implementację ServiceInstanceListSupplier. Jest to jeden z najważniejszych interfejsów w Load Balancer. Określa, w jaki sposób lokalizujemy dostępne wystąpienia usług.
Zakodujemy na stałe dwie oddzielne instancje naszego przykładowego serwera w naszej przykładowej aplikacji. Działają w tym samym systemie, ale korzystają z oddzielnych portów:
Utwórz teraz klasę LoadBalancerConfiguration:
Ta klasa ma tylko jeden cel: tworzy program budujący WebClient z równoważeniem obciążenia do wykonywania zdalnych żądań. Nasza adnotacja zawiera fikcyjną nazwę usługi.
Wynika to z faktu, że najprawdopodobniej nie będziemy znać dokładnych nazw hostów i portów do uruchamiania instancji z wyprzedzeniem. W rezultacie używamy fikcyjnej nazwy jako symbolu zastępczego, a platforma zastąpi rzeczywiste informacje, gdy wybierze działającą instancję.
Następnie utwórzmy klasę Configuration, która będzie używana do tworzenia instancji naszej dostawy instancji usługi. Zwróć uwagę, że używamy tego samego aliasu co poprzednio:
Możemy teraz zbudować prawdziwą aplikację kliencką. Wyślijmy 10 zapytań do przykładowego serwera za pomocą komponentu bean WebClient z wcześniejszego:
Na podstawie danych wyjściowych widzimy, że równoważymy obciążenie między dwiema oddzielnymi instancjami:
Równoważenie obciążenia w mikroserwisach
Architektura mikrousług jest wykorzystywana przez kilka firm, takich jak Netflix i Amazon, do tworzenia aplikacji biznesowych jako zestawu luźno połączonych usług. Hiperskalowalność i ciągłe dostarczanie skomplikowanych aplikacji to tylko dwa z powodów przejścia na tę rozproszoną, luźno połączoną architekturę.
Zespoły tych przedsiębiorstw wdrożyły strategie Agile i DevOps, aby tworzyć aplikacje szybciej iz mniejszą awaryjnością niż tradycyjne metody. Należy jednak zachować równowagę między złożonością architektury rozproszonej a wymaganiami aplikacji, wymaganiami dotyczącymi skali i ograniczeniami czasu wprowadzania na rynek.
Przez wiele lat kontrolery dostarczania aplikacji (ADC) odgrywały kluczową rolę w spełnianiu wymagań dotyczących poziomu usług dla aplikacji korporacyjnych hostowanych lokalnie lub w chmurze. Klient angażujący się w aplikację opartą na mikrousługach nie musi wiedzieć o instancjach, które ją udostępniają, aby niezależnie rozwijać klienta i mikrousługi.
To jest właśnie oddzielenie zapewniane przez odwrotne proxy lub system równoważenia obciążenia. Ponownie, równoważenie obciążenia jest rozwiązaniem zapewniającym, że mikrousługi mogą obsłużyć popyt, bezpieczeństwo i dostępność.
Łącząc tradycyjne równoważenie obciążenia północ-południe między aplikacjami klienckimi i mikrousługami z wdrażaniem wschód-zachód w celu uzyskania skalowalności poziomej, uzyskasz znaczny wzrost. Celem jest utrzymanie bezpiecznego i regulowanego środowiska wymaganego przez IT bez poświęcania elastyczności rozwoju lub Automatyzacja DevOps wymagania.
Benefity
Równoważenie obciążenia zapewnia różne korzyści, poprawiając wykorzystanie zasobów, dostarczanie danych i czas odpowiedzi w przypadku witryn i aplikacji o dużym natężeniu ruchu, a także baz danych, które otrzymują dużą liczbę zapytań. Równoważenie obciążenia zapewnia szybką i prawidłową realizację żądań użytkowników w scenariuszach o dużym natężeniu ruchu.
Oszczędzają użytkownikom kłopotów związanych z powolnymi programami i zasobami. Równoważenie obciążenia pomaga również uniknąć przestojów i uprościć zabezpieczenia, zmniejszając ryzyko utraty produktywności i zysków dla Twojej firmy.
- Równoważenie obciążenia zapewnia elastyczność dodawania i usuwania serwerów zgodnie z zapotrzebowaniem, a także zarządzanie ruchem w celu uzyskania optymalnej wydajności. Ponieważ podczas konserwacji ruch jest przekierowywany na inne serwery, możliwe jest również przeprowadzenie konserwacji serwera bez zakłócania pracy użytkowników.
- Równoważenie obciążenia zapewnia wbudowaną redundancję poprzez podział ruchu między zestaw serwerów. Możesz natychmiast przekierować obciążenie na inne serwery, jeśli jeden z nich ulegnie awarii, minimalizując wpływ na użytkowników.
- Jeśli korzystanie z aplikacji lub strony internetowej rośnie, zwiększony ruch może pogorszyć jej wydajność, jeśli nie zostanie skutecznie obsłużony. Dzięki równoważeniu obciążenia możesz dodać serwer rzeczywisty lub wirtualny, aby sprostać zapotrzebowaniu bez zakłócania usługi. Moduł równoważenia obciążenia identyfikuje nowe serwery w momencie ich podłączenia do sieci i bez wysiłku włącza je do działania. Ta metoda jest lepsza niż migracja strony z przeciążonego serwera na nowy, co często wiąże się z pewnymi przestojami.
Wnioski
Równoważenie obciążenia jest kluczowym elementem współczesnych systemów odpornych na uszkodzenia. Możemy po prostu konstruować aplikacje, które rozsyłają żądania do wielu instancji usług, korzystając z różnych metod równoważenia obciążenia. Firmy muszą obsługiwać skomplikowane systemy informatyczne, aby bezpiecznie dostarczać aplikacje.
Konfiguracja, wdrażanie i konserwacja mikrousług międzydomenowych może być podatna na błędy, kosztowna i czasochłonna. Dział IT powinien korzystać z najlepszych praktyk i technologii automatyzacji, widoczności, analizy i orkiestracji, które są zgodne z ich procesami Agile i DevOps, aby ułatwić konfigurację i konserwację tych mikrousług.
Dodaj komentarz