Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Projekt aplikacji powinien umożliwiać jej skalowanie w poziomie
Główną zaletą chmury jest elastyczne skalowanie — możliwość korzystania z dokładnie takiej pojemności, jakiej potrzebujesz, skalowania w górę w miarę wzrostu obciążenia i skalowania w dół, gdy dodatkowa pojemność nie jest potrzebna. Zaprojektuj aplikację, aby mogła skalować ją w poziomie, dodawać lub usuwać wystąpienia, dopasowując podaż do zapotrzebowania.
Skalowalność jest mierzona według współczynnika przyrostu przepływności do zwiększenia zasobów. W idealnym przypadku w dobrze zaprojektowanym systemie obie liczby są proporcjonalne: dwukrotna alokacja zasobów podwoi przepływność. Skalowalność jest na ogół ograniczana przez powstawanie wąskich gardeł lub punktów synchronizacji w systemie.
Zalecenia
Unikaj lepkości instancji. Lepkość, nazywana też afinity 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 generowany przez użytkownika generującego duży ruch 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. Upewnij się, że każda instancja może obsłużyć dowolne żądanie.
Zidentyfikuj wąskie gardła. Skalowanie w poziomie nie jest magicznym rozwiązaniem wszystkich problemów z wydajnością. Na przykład, jeśli wąskim gardłem jest baza danych działająca w tle, nie pomoże dodawanie kolejnych serwerów sieciowych. Najpierw zidentyfikuj i usuń wąskie gardła w systemie, zanim zwiększysz liczbę instancji, aby rozwiązać problem. 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.
Projektowanie autonomicznych i odłączonych składników komunikujących się za pośrednictwem protokołów komunikacji asynchronicznej. W idealnym przypadku składniki powinny mieć własny, niezależny stan i używać zdarzeń do przekazywania wszelkich zmian lub działań do składników zewnętrznych. Pomaga to niezależnie skalować tylko przeciążony komponent. Zaimplementuj mechanizmy sterowania przepływem, aby zarządzać ruchem i stopniowo zmniejszać wydajność. Konsumenci powinni kontrolować własną stawkę zużycia. Producenci powinni kontrolować własną szybkość transmisji, łącznie z możliwością wstrzymania. Kolejki wiadomości są dobrymi opcjami, aby przejmować dodatkowe obciążenie i umożliwić konsumentom wykonywanie pracy w dogodnym dla nich czasie.
Unikaj niepotrzebnej komunikacji, koordynacji i oczekiwania.
Odciążaj zadania asynchroniczne w naturalny sposób. Zadania takie jak wysyłanie wiadomości e-mail, akcje, w których użytkownik nie potrzebuje natychmiastowej odpowiedzi, oraz 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. pl-PL: W miarę możliwości zadania wymagające dużej ilości zasobów procesora lub zasobów wejścia/wyjścia powinny być przenoszone do zadań w tle, aby zminimalizować obciążenie interfejsu, który obsługuje żądania użytkowników.
Skalowanie automatyczne oparte na wbudowanych funkcjach automatycznego skalowania i metrykach użycia w czasie rzeczywistym. 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 rozszerzać skalowanie 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ń. Obserwuj aplikacje i ich komunikację, aby zidentyfikować wąskie gardła i podejmować bardziej trafne decyzje. 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 być o krok przed zapotrzebowaniem. Lepiej szybko dodawać nowe instancje, aby poradzić sobie z dodatkowym ruchem przy dużym obciążeniu, a potem stopniowo zmniejszać skalę.
Zaprojektuj, uwzględniając skalowalność. Pamiętaj, że przy elastycznym skalowaniu aplikacja będzie miała okresy skalowania do wewnątrz, kiedy wystąpienia są 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 zamykaj system w sposób uporządkowany.
- Użytkownicy usługi powinni wspierać obsługę błędów przejściowych i ponawianie prób.
- W przypadku długotrwałych zadań weź pod uwagę podzielenie pracy, używając punktów kontrolnych lub wzorca Potoki i filtry.
- Umieść elementy robocze w kolejce, aby inne wystąpienie mogło przejąć pracę, jeśli dane wystąpienie zostanie usunięte w trakcie przetwarzania.
Rozważ skalowanie w celu zapewnienia nadmiarowości. Skalowanie w górę może zwiększyć niezawodność aplikacji. Rozważmy na przykład skalowanie w wielu strefach dostępności, używając na przykład usług strefowo nadmiarowych. Takie podejście może poprawić przepływność aplikacji, a także zapewnić odporność, jeśli jedna strefa ulegnie awarii.
Modelowanie i optymalizowanie skalowalności systemu. Możesz modelować swój system przy użyciu podejścia takiego jak prawo Amdahla. Kwantyfikuj skalowalność na podstawie parametrów, takich jak rywalizacja i współistnienie. Zator odnosi się do opóźnienia z powodu oczekiwania lub kolejkowania udostępnianych zasobów. Spójność odnosi się do opóźnienia, aby dane stały się spójne. Na przykład, wysoka rywalizacja oznacza przetwarzanie sekwencyjne, które można zrównoleglić, podczas gdy wysoka spójność sugeruje nadmiar zależności między procesami, co prowadzi do zmniejszenia interakcji. Podczas projektowania obciążenia można obliczyć maksymalną efektywną pojemność systemu, aby uniknąć sytuacji, w której podaż przewyższa zapotrzebowanie, co prowadzi do marnotrawstwa.
Powiązane zasoby
- Skalowanie automatyczne
- Asynchroniczne wzorce przesyłania wiadomości
- Zadania w tle
- Wzorzec potoków i filtrów