Co to jest skalowalność?
- 6 min
W świecie biznesu wzrost może być korzystny. Jednak gdy wzrost występuje zbyt szybko, a gdy nie zostały odpowiednio przygotowane, wzrost może powodować problemy. Jednym z tych problemów jest wzrost niezawodności aplikacji i usług, które nie zostały zaprojektowane do obsługi dużego wzrostu ruchu.
Dla klientów i użytkowników awaria jest awarią. Nie wiedzą ani nie dbają o to, czy nie są w stanie uzyskać dostępu do witryny z powodu kodu usterek, czy też dlatego, że zbyt wiele innych osób próbuje jednocześnie używać idealnie zakodowanej witryny.
Skalowalność to możliwość dostosowania się do zwiększonych wymagań lub zmieniających się potrzeb. Aplikacje i usługi muszą być w stanie obsłużyć większą ilość obciążeń, aby obsłużyć wzrost. Skalowalne aplikacje mogą obsługiwać coraz więcej żądań w czasie bez negatywnego wpływu na dostępność lub wydajność.
W tej lekcji zapoznasz się z relacją między skalowalnością a niezawodnością, znaczeniem planowania pojemności w osiąganiu skalowalności oraz krótko przejrzyj niektóre podstawowe pojęcia i terminy związane ze skalowaniem.
Relacja skalowalności/niezawodności
Dobrą wiadomością jest to, że zwiększenie skalowalności aplikacji może również sprawić, że będzie ona bardziej niezawodna. Jeśli na przykład system autoskaluje, biorąc pod uwagę awarię składnika na jednej maszynie wirtualnej, usługa autoskalowania dostarcza nową instancję w celu spełnienia minimalnych wymagań liczby maszyn wirtualnych. System staje się bardziej niezawodny. W innym przykładzie używasz usługi wyższego poziomu, takiej jak Azure Storage, która jest z założenia skalowalna. Jeśli masz problem z przechowywaniem danych, usługa jest zaprojektowana tak, aby była niezawodna, więc Twoje dane są replikowane.
Oto analogia: Pomyśl o rampach ułatwień dostępu, które często widzisz poza budynkami, które zostały początkowo zaprojektowane tak, aby pomieścić ludzi na wózkach inwalidzkich. Służą one do tego celu. Ale są one również używane przez rodziców z dziećmi w wózkach lub wagonach, lub przez małe dzieci, dla których schody są zbyt głębokie lub wysokie. To użycie jest dodatkową korzyścią.
Niezawodność jest często dodatkową korzyścią ze skalowalności. Jeśli projektujesz systemy tak, aby były skalowalne, prawdopodobnie będą one również bardziej niezawodne.
Planowanie skalowalności i pojemności
Planowanie pojemności obejmuje określenie zasobów potrzebnych do spełnienia zarówno obecnych, jak i przyszłych wymagań. To planowanie można wykonać przez przeanalizowanie bieżącego użycia zasobów, a następnie zaplanowanie przyszłego wzrostu.
Aby oszacować potrzeby dotyczące pojemności w przyszłości, należy wziąć pod uwagę takie czynniki jak:
- Oczekiwany wzrost firmy
- Okresowe wahania (sezonowe itd.)
- Ograniczenia aplikacji
- Identyfikacja wąskich gardeł i czynników ograniczających
Należy również ustawić cele poziomu usług, aby można było utworzyć plan zarządzania pojemnością, który niezawodnie spełnia lub przekracza te cele w miarę zmiany obciążenia i środowiska.
Planowanie pojemności jest procesem iteracyjnym. W ramach tego modułu dowiesz się, jak mapować wymagania dotyczące zasobów dla składników aplikacji.
Pojęcia i terminologia
Zanim będzie można w pełni zrozumieć pojęcia i strategie napotkane w tym module, musisz mieć pewną wiedzę na temat wymagań wstępnych kilku podstawowych pojęć i podstawowych terminów związanych ze skalowaniem.
- Skalowanie w górę: zwiększanie elementu, aby poradzić sobie ze zwiększonym obciążeniem. Określane również jako skalowanie w pionie.
- Skalowanie poziome: dodawanie większej liczby składników lub zasobów w celu rozłożenia obciążenia na architekturę rozproszoną. Na przykład użycie prostej architektury, która ma wiele zapleczy za zestawem frontonów. Wraz ze wzrostem obciążenia dodajemy więcej serwerów back-endowych i front-endowych, aby je obsłużyć. Określane również jako skalowanie w poziomie.
- Ręczne skalowanie: akcja człowieka jest niezbędna do zwiększenia ilości zasobów.
- Skalowanie automatyczne: system automatycznie dostosowuje ilość zasobów na podstawie obciążenia. Aby było jasne, kwota jest dostosowywana zarówno w górę, jak i w dół na podstawie zwiększonego lub zmniejszonego obciążenia.
- DIY skalowanie: Skalowanie typu "zrób to sam", w którym trzeba skonfigurować autoskalowanie automatyczne.
- Nieodłączna skala: usługi, które zostały utworzone w celu zapewnienia skalowalności i automatycznego skalowania w tle, bez żadnej interwencji z Państwa strony. Z twojego punktu widzenia wyglądają na prawie nieskończenie skalowalne, ponieważ można po prostu zużywać więcej zasobów bez konieczności zarządzania nimi ręcznie.
Architektura firmy Tailwind Traders
W tym module użyjemy przykładowej architektury fikcyjnej firmy sprzętowej o nazwie Tailwind Traders. Ich platforma handlu elektronicznego wygląda następująco:
Ten diagram jest dość złożony na pierwszy rzut oka, więc przyjrzyjmy się temu. Witryna internetowa ma fronton. to, z czym rozmawiasz, jeśli idziesz do tailwindtraders.com.
Interfejs frontowy komunikuje się z zestawem usług zaplecza. Te usługi zaplecza obejmują typowe elementy, takie jak usługa kuponowa, usługa koszyka zakupów, usługa zapasów itd. Wszystkie są uruchomione w usłudze Azure Kubernetes Service. W tej aplikacji występują inne części i technologie. Wszystko, na co należy się skupić, to fronton i usługi zaplecza uruchomione na platformie Kubernetes.
Pojedyncze punkty awarii
Teraz, gdy znasz całą architekturę, pośmińmy chwilę na zbadanie pojedynczych punktów awarii i miejsc, na które możemy zwrócić uwagę podczas myślenia o skalowaniu.
Wszystkie te usługi są pojedynczym punktem awarii — nie są tworzone pod kątem odporności ani skalowania. Jeśli jeden z nich zostanie przeciążony, prawdopodobnie ulegnie awarii i nie ma łatwego sposobu rozwiązania tego w tej chwili.
W dalszej części tego modułu przyjrzymy się innym sposobom projektowania tych usług, aby były bardziej skalowalne i niezawodne.
Wstępnie przygotowana pojemność
Przyjrzyjmy się innemu problemowi, który może okazać się kłopotliwy. Poniżej przedstawiono usługi/składniki, które wymagają wstępnej aprowizacji pojemności:
Na przykład w przypadku usługi Cosmos DB, z góry zapewniamy przepustowość. Jeśli przekroczymy te limity, zaczniemy zwracać komunikaty o błędach naszym klientom. W przypadku usług azure AI wybieramy warstwę, a ta warstwa ma maksymalną liczbę żądań na sekundę. Po osiągnięciu jednego z limitów klienci będą dławieni.
Czy znaczący wzrost ruchu, na przykład uruchomienie nowego produktu, sprawi, że osiągniemy te limity? W tej chwili nie wiemy. W dalszej części tego modułu omówimy kolejną kwestię.
Koszty
Nawet jeśli robimy rzeczy dobrze, nadal musimy zaplanować wzrost. Oto usługi z płatnością za użycie:
W tym miejscu używamy usług Azure Logic Apps i Azure Functions, które są przykładami technologii bezserwerowej. Te usługi są skalowane automatycznie, a my płacimy za każde żądanie. Twój rachunek rośnie, gdy rośnie baza twoich klientów. Powinniśmy przynajmniej być świadomi wpływu, jaki nadchodzące wydarzenia, takie jak uruchomienie produktu, mogą mieć na nasze wydatki związane z chmurą. Pracujemy nad zrozumieniem i przewidywaniem wydatków na chmurę w dalszej części tego modułu.