Projektuj pod kątem skalowania w poziomie

Projekt aplikacji powinien umożliwiać jej skalowanie w poziomie

Główną zaletą chmury jest elastyczne skalowanie — możliwość używania jak najwięcej pojemności, skalowania w górę w miarę wzrostu obciążenia i skalowania w przypadku, gdy dodatkowa pojemność nie jest potrzebna. Projektowanie aplikacji tak, aby go można ją było skalować w poziomie, dodając lub usuwając nowe wystąpienia odpowiednio do wymagań zapotrzebowania.

Zalecenia

Unikaj lepkości wystąpień. Lepkość, nazywana też koligacją sesji, występuje wtedy, gdy żądania danego klienta są zawsze kierowane do tego samego serwera. Stickiness ogranicza możliwość skalowania aplikacji w poziomie. Na przykład ruch z użytkownika o dużej ilości nie będzie dystrybuowany między wystąpieniami. Przyczyny lepkości obejmują przechowywanie stanu sesji w pamięci i używanie kluczy szyfrowania charakterystycznych dla danego komputera. Zadbaj o to, aby każde wystąpienie mogło obsłużyć dowolne żądanie.

Zidentyfikuj wąskie gardła. Skalowanie w poziomie nie umożliwia rozwiązania wszystkich problemów z wydajnością. Na przykład jeśli wąskim gardłem jest baza danych zaplecza, nie pomoże dodawanie kolejnych serwerów internetowych. Najpierw zidentyfikuj i usuń przeszkody związane z wąskimi gardłami w systemie, a następnie spróbuj rozwiązać problem, dodając kolejne wystąpienia. Stanowe części systemu są najbardziej prawdopodobną przyczyną wąskich gardeł.

Rozłóż obciążenia według wymagań w zakresie skalowalności. Aplikacje często składają się z wielu obciążeń o różnych wymaganiach dotyczących skalowania. Na przykład aplikacja może mieć witrynę publiczną i oddzielną witrynę administracyjną. W witrynie publicznej mogą występować nagłe wzrosty ruchu. Z kolei obciążenie witryny administracyjnej jest mniejsze i bardziej przewidywalne.

Odciążaj naturalnie zadania asynchroniczne. Zadania takie jak wysyłanie wiadomości e-mail, akcje, w których użytkownik nie potrzebuje natychmiastowej odpowiedzi, a integracja z innymi systemami to dobre miejsca do korzystania z asynchronicznych wzorców obsługi komunikatów.

Przenieś zadania intensywnie korzystające z zasobów. W miarę możliwości zadania wymagające dużej ilości zasobów procesora CPU lub zasobów we/wy powinny być wykonywane w tle, aby zminimalizować obciążenie frontonu, który obsługuje żądania użytkowników.

Korzystaj z wbudowanych funkcji skalowania automatycznego. Wiele usług obliczeniowych platformy Azure ma wbudowaną obsługę skalowania automatycznego. Jeśli obciążenie aplikacji jest przewidywalne i regularne, warto ustawić harmonogram skalowania w poziomie. Można na przykład skalować w godzinach pracy. Z kolei jeśli obciążenie nie jest przewidywalne, skalowanie automatyczne można wyzwalać za pomocą metryk wydajności, takich jak procesor CPU lub długość kolejki żądań. Aby zapoznać się z najlepszymi rozwiązaniami skalowania automatycznego, zobacz Skalowanie automatyczne.

Rozważ użycie agresywnego skalowania automatycznego dla obciążeń o znaczeniu krytycznym. W przypadku obciążeń o znaczeniu krytycznym warto przygotować się na wzrost zapotrzebowania. Lepiej jest szybko dodać nowe wystąpienia, obsługujące dodatkowy ruch związany z dużym obciążeniem, a później stopniowo zmniejszać skalę.

Podczas projektowania uwzględnij skalowanie w pionie. Pamiętaj o tym, że skalowanie ma być elastyczne. Czasami aplikacja będzie wymagać skalowania w pionie, gdy wystąpienia będą usuwane. Aplikacja musi bezpiecznie obsługiwać usuwanie wystąpień. Oto wybrane metody zapewniania takiej obsługi:

  • Nasłuchuj zdarzeń zamknięcia (jeśli są dostępne) i prawidłowo zamykaj wystąpienia.
  • Klienci/użytkownicy usługi powinni obsługiwać błędy przejściowe i ponawianie prób.
  • W przypadku długotrwałych zadań weź pod uwagę przerwanie pracy przy użyciu punktów kontrolnych lub wzorca Potoki i filtry.
  • Umieść elementy robocze w kolejce, aby inne wystąpienie mogło wznowić pracę, jeśli dane wystąpienie zostanie usunięte w trakcie przetwarzania danych.

Rozważ skalowanie pod kątem nadmiarowości. Skalowanie w górę może zwiększyć niezawodność aplikacji. Rozważmy na przykład skalowanie w górę w wielu strefach dostępności, na przykład przy użyciu usług strefowo nadmiarowych. Takie podejście może poprawić przepływność aplikacji, a także zapewnić odporność, jeśli jedna strefa ulegnie awarii.