Równoważenie obciążenia, czyli właśnie load balancing, jest techniką używaną w sieciach komputerowych oraz systemach informatycznych do rozłożenia obciążenia na wiele zasobów lub serwerów. Obciążeniem może być np. ruch sieciowy czy żądania klientów, a celem load balancingu jest zoptymalizowanie wydajności, zapewnienie niezawodności i dostępności usług.
Szczególnym przypadkiem load balancingu jest równoważenie obciążenia w chmurze. Jeżeli jesteś twórcą aplikacji, która zaczyna odnosić skuces i staje się popularna na całym świecie, to w pewnym momenci może pojawić się obawa o właściwe skalowanie, optymalizację i zabezpieczenie aplikacji przy utrzymaniu zadowolenia użytkowników. W tym momencie do dzieła wkracza load balancing.
Co to jest równoważenie obciążenia w chmurze?
Równoważenie obciążenia, czyli load balancing w chmurze, to w pełni rozproszone, definiowane programowo rozwiązanie, które równoważy ruch użytkowników do wielu backendów, aby uniknąć zatorów i zapewnić niskie opóźnienia (latencję). Istnieją różne rodzaje równoważenia obciążenia, w zależności od rodzaju ruchu, z którym masz do czynienia, globalnego lub regionalnego.
Jak działa load balancer w chmurze?
Załóżmy, że jeden z użytkowniów aplikacji znajduje się w Nowym Jorku, czyli w regionie us-east4. Żeby Twoja aplikacja mogła działać najefektywniej, dobrze jeżeli wdrożysz w tym regionie instanckę backendową i skonfigurujesz wirtualny adres IP równoważący obciążenie.
Jeżeli odkryjesz, że w innych regionach rónież przybywa użytkowników, to również tam utwórz instacje backendowe. Robiąc to możesz być pewien, że nie pojawią się zmiany w wirtualnym adresie IP ani ustawieniach usługi DNS.
Tworzenie instancji w różnych regionach daję Ci pewną elastyczność. Co się stanie, jeżeli przykładowo Twoi użytkownicy z Indii, którzy kierowani są do instacji w tamtejszym regionie trafią na ich przeciążenie? W tamim przypadku instancję zaczna się automatycznie skalować w górę, aby odpowiedzieć na dodatkowe obciążenie, a sami użytkownicy na czas tej zmiany zostaną przekierowani do instancji backendowych w innym refgionie. Po bezproblemowym przeskalowaniu instancji w pierwotnym regionie, użytkownicy zostaną z powrotem przypisani do oryginalnych instancji.
Równoważenie obciążenia w chmurze wykorzystuje wirtualne adresy IP typu anycast, zapewniając pojedynczy, globalny wirtualny adres IP frontonu. To co jest szczególnie ważne dla użytkowników, to fakt iż load balancing w chmruze zapewnia międzyregionalne przełączanie awaryjne, szybkie automatyczne skalowanie i skalowanie do milionów zapytań na sekundę. Mamy tu do czynienia z zewnętrznym równoważeniem obciążenia w warstwie 7.
W przypadku aplikacjki trójwarstwowej, po frontendzie trafiasz na oprogramowanie pośredniczące (middleware) oraz źródła danych, z którymi możesz wchodzić w interakcję, aby spełnić żądanie użytkownika. Tutaj potrzebujesz dodatkowej, czwartej warstwy, którą stanowi wewnętrzny load balancer, umiejscowiony między frontendem a pozostałymi warstwami wewnętrznymi.
Wewnętrzne równoważenie obciążenia warstwy 4 jest przeznaczone dla ruchu TCP/UDP za RFC 1918 VIP, gdzie zachowany jest adres IP klienta. To co otrzymujesz to m.in. automatyczne kontrole stanu przy braku środkowego serwera proxy (middle proxy). Do rónoważenia obciążenia wykorzystywane są zdefiniowane programowo elementy sterujące siecią i płaszczyzną danych.
Jak korzystać z load balancingu w chmurze?
Przyjrzyjmy się modelowi działania danych Cloud Load Balancingu w praktyce, czyli w chmurze Google Cloud. Do globalnego równoważenia obciążenia HTTP(S) dostępne są globalne wirtualne adresy IP anycast, IPv4 lub IPv6, powiązane z regułą przekazywania (forwarding rule), która kieruje ruch do docelowego serwera proxy, któy kończy sesję klienta. Oczywiście w przypadku protokołu HTTP(S) jest to też miejsce, w któym wdrażasz certyfikaty.
Co ważne, nie mówimy w tym wypadku o pojedynczym urządzeniu, ale logice rozproszonej w całej infrastrukturze. Skonfigurowana mapa URL zapewnia routing w warstwie 7 i kieruje żądanie klienta do odpowiedniej usługi backendu. Usługami backendu mogą być zarządzane grupy instancji lub grupy punktów końcowych sieci dla konteneryzowanych obciążeń.
Jest to również miejsce, w któym określa się pojemność i kondycję usługi, a Cloud CDN umożliwia buforowanie treści w celu poprawy wydajności. To właśnie tutaj możesz skonfigurować reguły zapory sieciowej, aby kontrolować ruch do i z backendu.
Wewnętrzna konfiguracja load balancingu działa w ten sam sposób. Nadal mamy regułę przekazywania, ale tutaj wskazuje ona bezpośrednio na usługę backendu. Reguła przekazywania ma wirtualny adres IP, protokół i maksymalnie pięć portów.
Jak zadbać o bezpieczeństwo?
Google w kwestiach bezpieczeństwa często odnosi się do dobrych praktyk. Jak wyglądają one w tym przypadku? Po pierwsze, postaraj się wszędzie zastosować protokół SSL. Dzięki równoważeniu obciążenia proxy HTTP(S) i SSL możesz korzystać z certyfikatów zarządzanych przez Google. W och przypadku Google zajmuje się dostarczaniem i zarządzaniem cyklem życia certyfikatu SSL.
Usługa Cloud Load Balancing pozwala także na obsługę wielu certyfikatów SSL, co sprawdzi się szczególnie w sytuacji, w której chcesz obsługiwać wiele domen przy użyciu tego samego adresu IP i portu równoważącego obciążenie. Globalne równoważenie obciążenia absorbuje i rozprasza ataki wolumetryczne z warstwy 3, 4 na globalną infrastrukturę równoważenia obciążenia Google. Dodatkowo, korzystając z Cloud Armor, możesz chronić się przed atakami na poziomie aplikacji od warstwy 3 do 7. Używając Identity Aware Proxy i zapór sieciowych, możesz uwierzytelniać i autoryzować dostęp do swoich backendów.
Uruchamianie klasycznego load balancera dla aplikacji w chmurze
Zobaczmy jak w kilku krokach skonfigurować zewnętrzny moduł równoważenia obciążenia apliakcji za pomocą backendu grupy instancji zarządzanej przez Compute Engine.
Konfiguracja zasobu certyfikatu SSL
Zanim rozpoczniesz tworzenie load balancera koniecznie skonfiguruj zasób certyfikatu SSL. Google rekomenduje skorzystanie z certyfikatów zarządzanych przez Google.
Konfiguracja uprawnień
Pamiętaj, że musisz mieć uprawnienia do tworzenia instancji Compute Engine, reguł zapory sieciowej oraz zarezerwowanych adresów IP w projekcie. Uznawane role to właściciel projektu lub redaktor. Możesz też posiadać poniższe role, w zależności od zadania:
- Tworzenie intancji – Instance Admin
- Dodawanie i usuwanie regół firewalla – Security Admin
- Tworzenie komponentów load balancera – Network Admin
- Tworzenie projektu – Project Creator
Utworzenie zarządzanej grupy instancji
Aby poprawnie skonfigurować load balancera wykorzystującego zaplecze Compute Engine, twoje maszyny wirtualne muszą znajdować się w grupie instancji. Zarządzana grupa instancji udostępnia maszyny wirtualne, na któych działają serwery backendowe zewnętrznego modułu równoważenia obciążenia HTTP(S).
Rozpocznij od utworzenia szablonu instancji. Następnie utwórz zarządzaną grupę instancji i wybierz ten szablon.
Dodaj nazwany port (named port) do grupy instancji
W tym kroku powinieneś zdefiniować usługę HTTP dla swojej grupy instancji oraz zmapować nazwę portu na odpowieni port. Usługa load balancingu przekaże ruch zgodnie z tym wskazaniem.
Utwórz regułę firewalla
Może to być przykładowa reguła fw-allow-health-check czyli reguła ruchu przychodzącego, która zezwala na ruch z systemów sprawdzania stanu Google Cloud.
Zarezerwuj zewnętrzny adres IP
Na etapie, w którym Twoje instancje są już gotowe i działają, kolejnym krokiem jest konfiguracja globalnego, statycznego zewnętrznego adresu IP, który będzie używany przez Twoich klientów aby połączyć się z modułem równoważenia obciążenia.
Skonfiguruj moduł równoważenia obciążenia
Dochodzimy do siódmego, jakże ważnego kroku czyli konfiguracji load balancera. W tym celu musisz w konsoli wejść na podstronę “Load balancing” oraz wybrać opcję “Create load balancer”. Jeżeli wybrałeś protokuł HTTP(S), wejdź w kartę “Application Load Balancer (HTTP/S).” Po przejściu kolejnych kroków pamiętaj o konfiguracji frontendu, backendu oraz reguł hosta i ścieżki.
Połączenie domeny z modułem równoważenia obciążenia
Kiedy już stworzysz moduł równoważenia obciążenia zanotuj adres IP z nim powiązany. Aby skierować domenę do modułu load balancera, utwórz rekord A korzystając z usługi rejestracji domeny (domain registration service). W przypadku dodania wielu domen do certyfikatu SSL powinieneś dodać rekord A do każdej z nich, a wóczas wszystkie będą wskazywały adres IP modułu load balancingu.
Przetestowanie ruchu wysyłanego do Twoich instancji
Zbliżając się do końca tej procedury pozostaje przetestowania działania load balancera. Pamiętaj, że w całym procesie mogą pomóc Ci eksperci FOTC. Pomoc może być szczególnie przydatna jeżeli środowisko chmurowe jest dla Ciebie nowością. Przy okazji dowiesz się jak je poprawnie skonfigurować aby zoptymalizować koszty.