Skalowanie aplikacji
Lepiej rozbudować istniejące lokum, czy postawić obok drugie? Takie pytanie może sobie zadawać nie tylko właściciel domku z rosnącą wielopokoleniową rodziną, dotyczy ono również twórców serwisów internetowych zarządzających serwerami. I jak zobaczymy – odpowiedź na nie ma daleko idące konsekwencje.
Sukces, wzrost popularności serwisu, nowi użytkownicy – to scenariusz, którego życzy sobie chyba każdy autor lub właściciel aplikacji internetowej. Ci zaś, których życzenie się spełni, szybko dostrzegą, że za rosnącą popularnością usługi idzie większe obciążenie infrastruktury. Procesor jest coraz bardziej zajęty przetwarzaniem kolejnych żądań, w pamięci operacyjnej musi zmieścić się coraz więcej danych. W pewnym momencie zaczyna robić się „ciasno”, strony ładują się coraz wolniej, istnieje ryzyko, że usługa całkiem się zatrzyma. I tu dochodzimy do wspomnianego wcześniej pytania: powiększyć istniejący „dom” czy postawić obok kolejny. Tym domem dla aplikacji są różne formy: od serwerów fizycznych, przez maszyny wirtualne, po kontenery. Stoimy więc na przykład przed wyborem: rozbudować posiadany serwer, albo dokupić kolejny.
Piąć się wzwyż
W czasach, kiedy jedyną opcją był fizyczny serwer obie opcje wiązały się z osobistą ingerencją człowieka w serwerownię. Intuicja podpowiada w takich warunkach pierwszą z opcji, czyli rozbudowę istniejącego komputera. Tę opcję nazywamy skalowaniem wertykalnym (scale up, skalowanie wzwyż) – co pasuje do analogii dobudowywania kolejnych pięter w budynku. Zainstalowanie dodatkowej kości pamięci albo wymiana procesora w posiadanym już serwerze wydaje się opcją szybszą i tańszą niż nabywanie osobnego urządzenia, jego instalacja i konfiguracja. Przynajmniej dopóki jest jeszcze miejsce na płycie głównej. Poza tym jeśli oprogramowanie pozostaje na tym samym komputerze co wcześniej, to nie trzeba wprowadzać w nim zmian. Co innego dostosowanie aplikacji do pracy równolegle na wielu maszynach – to wymaga sposobu na podział zadań i zachowanie spójności danych.
Chmury rosną wszerz
Pojawianie się wirtualizacji i platform chmurowych każe spojrzeć na sytuację inaczej. Utworzenie nowej maszyny wirtualnej z przygotowanego wcześniej szablonu staje się proste i może ograniczać się nawet do pojedynczych kliknięć. Podejście polegające na dodawaniu kolejnych instancji aplikacji nazywamy skalowaniem horyzontalnym (scale out, skalowanie wszerz), co można skojarzyć z rozrastającym się osiedlem małych domków. W odróżnieniu od zwiększenia istniejącej maszyny, co może okazać się znacznie trudniejsze, zwłaszcza jeśli dane środowisko wirtualizacyjne nie posiada przewidzianych do tego narzędzi. Co więcej, jeśli mamy już do dyspozycji usługę chmurową, to zapewne dostępna jest opcja rozliczeń Pay as You Go, czyli płacenia tylko za uruchomione zasoby. Warto zatem pomyśleć nie tylko o rozrastaniu się, ale i cofaniu, wtedy kiedy zapotrzebowanie na naszą aplikację jest mniejsze – w wakacje, w wybrane dni tygodnia, czy nawet w danych godzinach. Tutaj różnica w łatwości wykonania będzie jeszcze bardziej widoczna: usunięcie niektórych instancji (scale in) będzie dużo prostsze niż odjęcie zasobów z jednej dużej maszyny wirtualnej (scale down).
Coś dla każdego
Ciekawym przypadkiem chmury jest Integrated Computing Standard. Dzięki technologii VMware dla tradycyjnych aplikacji oferuje funkcję sprawiającą, że skalowanie wertykalne (wzwyż) staje się jeszcze prostsze. Jest to „hot add” czyli zwiększenie zasobów maszyny wirtualnej „w locie”, bez zatrzymywania aplikacji. I to do pokaźnych rozmiarów, nawet 128 vCPU. Znajdziemy również udogodnienia dla skalowania horyzontalnego (wszerz), ale o tym w następny artykule.
Jak w praktyce użyć „hot add”? Opisuje to odcinek 9 Wideo Przewodnika po Integrated Computing Standard