Zalecenia dotyczące optymalizacji skalowania i partycjonowania

Dotyczy tego zalecenia listy kontrolnej wydajności platformy Azure Well-Architected Framework:

PE:05 Optymalizowanie skalowania i partycjonowania. Uwzględnij niezawodne i kontrolowane skalowanie i partycjonowanie. Projekt jednostki skalowania obciążenia jest podstawą strategii skalowania i partycjonowania.

W tym przewodniku opisano zalecenia dotyczące skalowania i partycjonowania obciążenia. Skalowanie to możliwość zwiększenia lub zmniejszenia zasobów przydzielonych do obciążenia na podstawie zapotrzebowania. Partycjonowanie obejmuje podzielenie obciążenia na mniejsze, możliwe do zarządzania jednostki w celu dystrybucji danych i przetwarzania między wiele zasobów. Obciążenie, które nie skaluje się lub partycjonuje, może mieć niską wydajność w okresach wysokiego zapotrzebowania i niedostatecznie wykorzystywaną pojemność w okresach niskiego zapotrzebowania.

Definicje

Okres Definicja
Automatyczne skalowanie Funkcja, która automatycznie dostosowuje limity pojemności usługi na podstawie wstępnie zdefiniowanych konfiguracji, umożliwiając skalowanie w górę lub w dół zgodnie z potrzebami.
Pojemność Górny limit lub maksymalna pojemność danej usługi lub funkcji.
Koligacja klienta (koligacja sesji) Celowe kierowanie żądań od pojedynczego klienta do pojedynczego wystąpienia serwera w celu zapewnienia spójnego zarządzania sesjami.
Spójność (rozproszona baza danych) Jednolitość danych w wielu węzłach w rozproszonej bazie danych, zapewniając, że wszystkie repliki mają te same dane w danym punkcie w czasie.
Spójność (relacyjna baza danych) Właściwość transakcji przenosząc bazę danych z jednego prawidłowego stanu do innego, zachowując integralność danych.
Poziom spójności Konfiguracja, która definiuje sposób i czas replikacji danych w rozproszonym systemie bazy danych, określając kompromis między spójnością a wydajnością.
Blokowanie danych Mechanizm służący do zapobiegania równoczesnym aktualizacjom tych samych danych.
Skalowanie w poziomie Podejście do skalowania, które dodaje wystąpienia danego typu zasobu.
Optymistyczna współbieżność Podejście do aktualizowania baz danych, które używają migawek do wprowadzania aktualizacji zamiast tradycyjnych mechanizmów blokowania.
Partycjonowanie Proces fizycznego dzielenia danych na oddzielne magazyny danych.
Skalowalność Możliwość dynamicznego zmieniania limitów pojemności obciążenia w celu uwzględnienia różnych poziomów zapotrzebowania.
Jednostka skalowania Grupa zasobów, które skalują się proporcjonalnie do siebie.
Koligacja stanu Przechowywanie danych sesji klienta na jednym serwerze, tak aby ten sam serwer obsługiwał kolejne żądania od tego samego klienta.
Skalowanie w pionie Podejście skalowania, które dodaje pojemność obliczeniową do istniejących zasobów.

Kluczowe strategie projektowania

Zarówno skalowanie, jak i partycjonowanie przyczyniają się do wydajności, zapewniając efektywne wykorzystanie zasobów, a obciążenie może obsługiwać różne obciążenia. Te rozwiązania są szczególnie ważne w środowiskach chmury, w których aplikacje muszą być elastyczne i dostosowywane do zmieniających się wymagań. Skalowanie zapewnia zwiększenie pojemności obciążenia w celu spełnienia rosnących wymagań. Partycjonowanie umożliwia efektywne dzielenie zadań lub danych w celu obsługi tych rosnących potrzeb. Podstawą obu tych procesów jest projekt jednostki skalowania obciążenia. Określa, jak obciążenie powinno rosnąć i dystrybuować zadania. Dzięki włączeniu niezawodnego i kontrolowanego podejścia do skalowania i partycjonowania można sidestep potencjalne nieefektywności obciążeń.

Optymalizowanie skalowania

Optymalizacja skalowania to proces dostosowywania liczby serwerów, wystąpień lub zasobów w celu spełnienia zmieniających się wymagań obciążenia. Gwarantuje to, że obciążenie może obsłużyć zwiększony ruch lub zapotrzebowanie bez pogorszenia wydajności lub przestoju.

Wybieranie strategii skalowania

Wybór strategii skalowania obejmuje podjęcie decyzji między metodami pionowymi lub poziomymi w celu zwiększenia pojemności obciążenia na podstawie określonych wymagań. Wybranie właściwej strategii zapewnia efektywne dostosowanie zasobów w celu spełnienia wymagań związanych z obciążeniami bez nadmiernego użycia lub strat. Aby wybrać właściwą strategię skalowania, należy poznać przypadki użycia skalowania w pionie i w poziomie oraz jak spełniają potrzeby obciążenia.

Omówienie skalowania w pionie. Skalowanie w pionie umożliwia zwiększenie pojemności pojedynczego zasobu, na przykład uaktualnienie do większego serwera lub rozmiaru wystąpienia. Skalowanie w pionie jest przydatne, gdy obciążenie może korzystać ze zwiększonej mocy obliczeniowej, pamięci lub innych zasobów w ramach jednego wystąpienia. Skalowanie w pionie jest odpowiednie dla obciążeń, które nie są łatwo podzielone na mniejsze części lub gdy architektura aplikacji nie obsługuje skalowania w poziomie.

Omówienie skalowania w poziomie. Za pomocą skalowania w poziomie można dodać więcej wystąpień lub zasobów, aby rozłożyć obciążenie na wiele serwerów. Skalowanie w poziomie oferuje korzyści, takie jak zwiększona odporność, zwiększona pojemność i możliwość obsługi zwiększonego ruchu lub zapotrzebowania na obciążenia. Jest ona skuteczna w przypadku aplikacji natywnych dla chmury przeznaczonych do uruchamiania na wielu węzłach. Skalowanie w poziomie jest odpowiednie dla obciążeń, które można podzielić na mniejsze części, które są uruchamiane niezależnie.

Omówienie obciążenia. Przydatność skalowania w pionie lub poziomie zależy od określonych cech i wymagań obciążenia. Regularne monitorowanie wydajności i testowanie w następujących obszarach może pomóc zoptymalizować strategię skalowania w czasie:

  • Wymagania: Zapoznaj się z konkretnymi wymaganiami obciążenia, biorąc pod uwagę czynniki, takie jak wymagania dotyczące zasobów, potrzeby dotyczące skalowalności i ograniczenia obciążenia.

  • Jednostki skalowania: utwórz projekt jednostki skalowania dla składników, które mają być skalowane razem. Na przykład 100 maszyn wirtualnych może wymagać dwóch kolejek i trzech kont magazynu do obsługi dodatkowego obciążenia. Jednostka skalowania to 100 maszyn wirtualnych, dwie kolejki i trzy konta magazynu. Należy niezależnie skalować wszystkie składniki, które doświadczają wahań użycia pojemności.

  • Architektura: ocena projektu architektury aplikacji. Niektóre aplikacje mogą być z założenia zaprojektowane do skalowania w poziomie z bezstanowymi składnikami, które można łatwo dystrybuować między wieloma wystąpieniami. Inne aplikacje mogą mieć składniki stanowe lub zależności, które sprawiają, że skalowanie w pionie jest bardziej odpowiednie. Oceń wymagania dotyczące skalowalności i elastyczności obciążenia.

Projektowanie infrastruktury do skalowania

Projektowanie infrastruktury do skalowania to proces tworzenia architektury, która może obsługiwać rosnące wymagania i obciążenie przez dodawanie lub dostosowywanie zasobów w razie potrzeby. Obejmuje planowanie i wdrażanie rozwiązań, które można skalować w poziomie lub w pionie w celu dostosowania do wzrostu. Strategie obejmują unikanie pojedynczychtonów, które mogą stać się wąskimi gardłami i oddzieleniem składników aplikacji w celu zapewnienia niezależnej skalowalności. Podczas projektowania obciążenia, które ma być skalowalne, może efektywnie dystrybuować obciążenie między wiele zasobów, co zapobiega wąskim gardłom i maksymalizuje wykorzystanie zasobów.

Unikaj pojedynczych singli. Należy unikać używania jednego, scentralizowanego zasobu dla całego obciążenia. Zamiast tego dystrybuuj obciążenie między wiele zasobów, aby uzyskać lepszą skalowalność, odporność na uszkodzenia i wydajność. Zapoznaj się z kilkoma konkretnymi przykładami i zagadnieniami dotyczącymi projektowania, aby uniknąć pojedynczych elementów w zasobach obciążeń:

  • Bilansowanie obciążenia opartego na kolejce: zamiast polegać na pojedynczej kolejce do przetwarzania komunikatów, rozważ podzielenie obciążenia na wiele kolejek w celu rozłożenia obciążenia przetwarzania. Zapewnia lepszą skalowalność i przetwarzanie równoległe.

  • Przetwarzanie danych: pojedyncze wzorce często pojawiają się w scenariuszach przetwarzania danych, w których przetwarzanie nie jest obsługiwane. Podziel długotrwałe zadania na mniejsze zadania, które można skalować lepiej, aby rozłożyć obciążenie między wiele zasobów i skorzystać z równoległości.

  • Wzorce projektowe: wzorce projektowe, takie jak fan-out/Fan-in lub Potoki i filtry , mogą pomóc uniknąć pojedynczych wystąpień w przepływach pracy. Te wzorce umożliwiają dystrybucję zadań przetwarzania w wielu zasobach oraz promowanie skalowalności i elastyczności.

Rozdziel składniki. Oddzielenie składników aplikacji jest ważnym aspektem projektowania pod kątem skalowalności. Obejmuje ona podzielenie aplikacji na mniejsze, niezależne składniki, które mogą działać i skalować niezależnie w oparciu o określone wymagania dotyczące obciążenia. Jeśli na przykład jeden składnik wymaga więcej zasobów ze względu na zwiększone zapotrzebowanie, możesz skalować ten składnik bez wpływu na inne. Ta elastyczność zapewnia wydajną alokację zasobów i zapobiega wąskim gardłom. Rozdzielając składniki, można odizolować awarie i zminimalizować wpływ na ogólną aplikację. Jeśli jeden składnik ulegnie awarii, inne składniki mogą nadal działać niezależnie.

Składniki oddzielone są łatwiejsze do konserwacji i aktualizowania. Zmiany lub aktualizacje jednego składnika można wprowadzać bez wpływu na inne, ponieważ są niezależne. Postępuj zgodnie z poniższymi wytycznymi, aby rozdzielić składniki aplikacji pod kątem skalowalności:

  • Rozdzielenie problemów: identyfikowanie obowiązków i funkcji aplikacji. Podziel obowiązki na oddzielne składniki na podstawie określonych zadań. Na przykład mogą istnieć oddzielne składniki uwierzytelniania użytkownika, przetwarzania danych i interfejsu użytkownika.

  • Luźne sprzężenie: zaprojektuj składniki, aby komunikowały się ze sobą za pomocą dobrze zdefiniowanych interfejsów i protokołów. Ten projekt zmniejsza zależności między składnikami i umożliwia łatwiejsze zastępowanie lub skalowanie poszczególnych składników.

  • Komunikacja asynchroniczna: użyj asynchronicznych wzorców komunikacji, takich jak kolejki komunikatów lub architektury sterowane zdarzeniami, aby dalej rozdzielić składniki. Wzorce te umożliwiają składnikom niezależne przetwarzanie zadań we własnym tempie, co zwiększa ogólną skalowalność.

  • Mikrousługi: rozważ zaimplementowanie mikrousług, które są małymi, niezależnymi usługami, które koncentrują się na określonych funkcjach biznesowych. Każdą mikrousługę można opracowywać, wdrażać i skalować niezależnie, zapewniając większą elastyczność i skalowalność.

Projektowanie aplikacji do skalowania

Podczas skalowania obciążenia należy zaprojektować aplikację w celu rozłożenia obciążenia. Tylko dlatego, że można dodać więcej replik na poziomie infrastruktury, nie oznacza, że aplikacja może używać replik. Projektowanie aplikacji do skalowania polega na tworzeniu struktury aplikacji, dzięki czemu może obsłużyć zwiększone zapotrzebowanie, rozkładając obciążenie między zasoby. Unikaj rozwiązań wymagających koligacji klienta, blokowania danych lub koligacji stanu dla pojedynczego wystąpienia, jeśli to możliwe. Chcesz kierować klienta lub proces do zasobu, który ma dostępną pojemność. Aby zaprojektować skalowalność aplikacji, rozważ następujące strategie:

Eliminowanie stanu sesji po stronie serwera. Aplikacje powinny być bezstanowe, jeśli to możliwe. W przypadku aplikacji stanowych należy użyć magazynu stanów zewnętrznego dla serwera. Stan sesji zewnętrznej to praktyka przechowywania danych sesji poza serwerem aplikacji lub kontenerem. Stan sesji można zewnętrznie rozdzielić na wiele serwerów lub usług, umożliwiając bezproblemowe zarządzanie sesjami w środowisku rozproszonym. Podczas zewnętrznego określania stanu sesji należy wziąć pod uwagę następujące kwestie:

  • Oceń wymagania dotyczące sesji. Informacje o danych sesji, które muszą być przechowywane i zarządzane. Rozważ atrybuty sesji, przekroczenia limitu czasu sesji i wszelkie określone wymagania dotyczące replikacji sesji lub trwałości. Określ rozmiar stanu sesji oraz częstotliwość operacji odczytu i zapisu.

  • Wybierz rozwiązanie. Wybierz rozwiązanie magazynu, które jest zgodne z potrzebami w zakresie wydajności i skalowalności. Opcje obejmują użycie rozproszonej pamięci podręcznej, bazy danych lub usługi stanu sesji. Podczas wyboru należy wziąć pod uwagę czynniki, takie jak spójność danych, opóźnienie i skalowalność.

  • Konfigurowanie aplikacji Zaktualizuj aplikację, aby korzystała z wybranego rozwiązania magazynu stanu sesji. Może być konieczne zmianę plików konfiguracji aplikacji lub kodu w celu nawiązania połączenia z usługą magazynu zewnętrznego.

  • Zaktualizuj logikę. Zmień logikę zarządzania sesjami aplikacji, aby przechowywać i pobierać dane sesji z zewnętrznego rozwiązania magazynu. Aby zarządzać stanem sesji, może być konieczne użycie interfejsów API lub bibliotek udostępnionych przez rozwiązanie magazynu.

Eliminowanie koligacji klienta. Koligacja klienta jest również znana jako koligacja sesji lub sesje sticky. W przypadku wyeliminowania koligacji klienta żądania klientów są dystrybuowane równomiernie między wieloma replikami lub serwerami bez kierowania wszystkich żądań od klienta do tej samej repliki. Ta konfiguracja może poprawić skalowalność i wydajność aplikacji, zezwalając dowolnej dostępnej repliki na przetwarzanie żądań.

Przejrzyj algorytm równoważenia obciążenia. Algorytm równoważenia obciążenia może spowodować przypadkowe i sztuczne przypinanie klienta, w którym zbyt wiele żądań jest wysyłanych do jednego wystąpienia zaplecza. Przypinanie może się zdarzyć, jeśli algorytm jest skonfigurowany do zawsze wysyłania żądań od tego samego użytkownika do tego samego wystąpienia. Może się to również zdarzyć, jeśli żądania są zbyt podobne do siebie.

Eliminowanie blokowania danych. Blokowanie danych zapewnia spójność, ale ma wady wydajności. Może to spowodować eskalacje blokady i negatywnie wpłynąć na współbieżność, opóźnienie i dostępność. Aby wyeliminować blokowanie danych, należy zaimplementować optymistyczną współbieżność. Nierelacyjne bazy danych powinny używać optymistycznej kontroli współbieżności i mieć odpowiedni poziom spójności. Strategia partycjonowania danych powinna również obsługiwać potrzeby współbieżności.

Użyj dynamicznego odnajdywania usług. Dynamiczne odnajdywanie usług to proces automatycznego wykrywania i rejestrowania usług w systemie rozproszonym. Umożliwia klientom odnajdywanie dostępnych usług bez ścisłej pary z określonymi wystąpieniami. Klienci nie powinni mieć bezpośredniej zależności od określonego wystąpienia w obciążeniu. Aby uniknąć tych zależności, należy użyć serwera proxy do dystrybucji i redystrybucji połączeń klienckich. Serwer proxy działa jako pośrednik między klientami i usługami, zapewniając warstwę abstrakcji, która umożliwia dodawanie lub usuwanie usług bez wpływu na klientów.

Użyj zadań w tle. Gdy aplikacja jest skalowana, może obsłużyć rosnące obciążenie lub większą liczbę współbieżnych żądań. Odciążanie intensywnych zadań, ponieważ zadania w tle umożliwiają głównej aplikacji obsługę żądań użytkowników bez przeciążenia operacji intensywnie korzystających z zasobów. Wykonaj następujące kroki, aby odciążyć zadania jako zadania w tle:

  1. Znajdź zadania intensywnie korzystające z procesora CPU i operacji we/wy w aplikacji, które można odciążyć. Te zadania zazwyczaj obejmują duże obliczenia lub interakcje z zasobami zewnętrznymi, takimi jak bazy danych lub operacje sieciowe.

  2. Zaprojektuj aplikację tak, aby obsługiwała zadania w tle. Rozdziel zadania intensywnie korzystające z głównej logiki aplikacji i udostępniają mechanizm uruchamiania zadań w tle i zarządzania nimi.

  3. Zaimplementuj przetwarzanie zadań w tle przy użyciu odpowiednich technologii lub struktur. Uwzględnij funkcje udostępniane przez język programowania lub platformę, takie jak programowanie asynchroniczne, wątkowanie lub kolejki zadań. Zawierają intensywne operacje w oddzielnych zadaniach lub wątkach. Te zadania można uruchamiać współbieżnie lub planowo uruchamiać w określonych odstępach czasu.

  4. Dystrybuuj zadania w tle, jeśli istnieje wiele z nich lub jeśli zadania wymagają znacznego czasu lub zasobów. Aby uzyskać jedno z możliwych rozwiązań, zobacz wzorzec konkurencyjnych konsumentów.

Konfigurowanie skalowania

Konfigurowanie skalowania to proces konfigurowania i dostosowywania parametrów w celu dynamicznego przydzielania zasobów na podstawie wymagań obciążeń. Obejmuje ona strategie, takie jak używanie funkcji skalowania automatycznego, zrozumienie granic skalowania usługi i implementowanie znaczących metryk obciążenia. Właściwa konfiguracja zapewnia, że aplikacja może reagować na różne wymagania przy jednoczesnym maksymalizacji wydajności. Podczas konfigurowania skalowania należy wziąć pod uwagę następujące strategie:

Korzystanie z usług z skalowaniem automatycznym. Funkcja automatycznego skalowania automatycznie skaluje infrastrukturę w celu spełnienia wymagań. Korzystanie z ofert typu platforma jako usługa (PaaS) z wbudowanymi funkcjami autoskalowania. Łatwość skalowania w usłudze PaaS jest główną zaletą. Na przykład skalowanie maszyn wirtualnych w zewnątrz wymaga oddzielnego modułu równoważenia obciążenia, obsługi żądań klienta i stanu przechowywanego zewnętrznie. Oferty PaaS obsługują większość tych zadań.

Ograniczenie skalowania automatycznego. Ustaw limity automatycznego skalowania, aby zminimalizować nadmierne skalowanie, co może spowodować niepotrzebne koszty. Czasami nie można ustawić limitów skalowania. W takich przypadkach należy ustawić alerty, aby otrzymywać powiadomienia, gdy składnik osiągnie maksymalny limit skali i przeskalowany.

Omówienie granic skalowania usługi. Gdy rozumiesz limity skalowania usług, przyrosty i ograniczenia, możesz podejmować świadome decyzje podczas wybierania usługi. Granice skalowania określają, czy wybrana usługa może obsłużyć oczekiwane obciążenie, skalować wydajnie i spełniać wymagania dotyczące wydajności aplikacji. Skalowanie granic, które należy wziąć pod uwagę, obejmują:

  • Limity skalowania: limity skalowania to maksymalna pojemność, którą może obsłużyć lokalizacja lub usługa. Ważne jest, aby znać te limity, aby zapewnić, że usługa może pomieścić oczekiwane obciążenie i obsługiwać szczytowe użycie bez obniżenia wydajności. Każdy zasób ma górny limit skali. Jeśli musisz wykraczać poza limity skalowania, należy podzielić obciążenie na partycje.

  • Skalowanie przyrostowe: skalowanie usług na zdefiniowanych przyrostach. Na przykład usługi obliczeniowe mogą być skalowane według wystąpień i zasobników, podczas gdy bazy danych mogą być skalowane według wystąpień, jednostek transakcji i rdzeni wirtualnych. Ważne jest, aby zrozumieć te przyrosty, aby zoptymalizować alokację zasobów i zapobiec flappingu zasobów.

  • Ograniczenia skalowania: niektóre usługi umożliwiają skalowanie w górę lub w poziomie, ale ograniczenie możliwości automatycznego odwrócenia skalowania. Konieczne jest ręczne skalowanie lub ponowne wdrożenie nowego zasobu. Te ograniczenia są często używane do ochrony obciążenia. Skalowanie w dół lub skalowanie w dół może mieć wpływ na dostępność i wydajność obciążenia. Usługa może wymuszać pewne ograniczenia lub ograniczenia, aby zapewnić, że obciążenie ma wystarczające zasoby do efektywnego działania. Te ograniczenia mogą mieć wpływ na spójność i synchronizację danych, szczególnie w systemach rozproszonych. Usługa może mieć mechanizmy umożliwiające obsługę replikacji danych i spójności podczas skalowania w górę lub w poziomie, ale nie zapewniają takiego samego poziomu obsługi skalowania w dół lub w poziomie.

Używanie istotnych metryk obciążenia. Skalowanie powinno używać znaczących metryk obciążenia jako wyzwalaczy skalowania. Istotne metryki obciążenia obejmują proste metryki, takie jak procesor CPU lub pamięć. Obejmują one również bardziej zaawansowane metryki, takie jak głębokość kolejki, zapytania SQL, zapytania niestandardowe metryk i długość kolejki HTTP. Rozważ użycie kombinacji prostych i zaawansowanych metryk obciążenia jako wyzwalacza skalowania.

Użyj buforu. Bufor jest nieużywaną pojemnością, która może służyć do obsługi skoków zapotrzebowania. Dobrze zaprojektowane plany obciążeń dla nieoczekiwanych skoków obciążenia. Należy dodać bufor do obsługi skoków skalowania w poziomie i w pionie.

Zapobiegaj flappingowi. Flapping jest warunkiem pętli, który występuje, gdy jedno zdarzenie skalowania wyzwala odwrotne zdarzenie skalowania, tworząc ciągłą akcję skalowania wstecznego i z powrotem. Na przykład jeśli skalowanie w elemecie zmniejsza liczbę wystąpień, może to spowodować wzrost użycia procesora CPU w pozostałych wystąpieniach, wyzwalając zdarzenie skalowane w poziomie. Zdarzenie skalowania w poziomie powoduje spadek użycia procesora CPU, powtarzając proces.

Ważne jest, aby wybrać odpowiedni margines między progami skalowania w poziomie i skalowania w poziomie, aby uniknąć trzepotania. Możesz zapobiec częstym i niepotrzebnym akcjom skalowania w poziomie, ustawiając progi, które zapewniają znaczącą różnicę w użyciu procesora CPU.

Użyj sygnatur wdrożenia. Istnieją techniki, które ułatwiają skalowanie obciążenia. Aby łatwo skalować obciążenie, można użyć wzorca sygnatur wdrażania , dodając co najmniej jedną jednostki skalowania.

Ryzyko: Skalowanie pomaga optymalizować koszty poprzez dostosowanie pojemności w celu zaspokojenia zapotrzebowania, może to spowodować całkowity wzrost kosztów w długich okresach wysokiego zapotrzebowania.

Testowanie skalowania

Testowanie skalowania obejmuje symulowanie różnych scenariuszy obciążeń w kontrolowanym środowisku w celu oceny sposobu reagowania obciążenia na różne poziomy zapotrzebowania. Pomaga to zapewnić wydajne skalowanie obciążeń, maksymalizując wydajność podczas różnych obciążeń.

Należy upewnić się, że obciążenia są skalowane wydajnie w rzeczywistych warunkach. Niezbędne jest przeprowadzenie testów obciążeniowych i przeciążeniowych w środowisku, które odzwierciedla konfigurację środowiska produkcyjnego. Te testy, przeprowadzone w środowiskach nieprodukcyjnych, umożliwiają ocenę strategii skalowania w pionie i w poziomie oraz określenie, która z nich optymalizuje wydajność najbardziej efektywnie. Oto zalecane podejście do testowania skalowania:

  • Definiowanie scenariuszy obciążeń. Zidentyfikuj kluczowe scenariusze obciążeń, które należy przetestować, takie jak zwiększenie ruchu użytkowników, współbieżne żądania, ilość danych lub użycie zasobów.

  • Użyj środowiska testowego przypominającego środowisko produkcyjne. Utwórz oddzielne środowisko testowe, które dokładnie przypomina środowisko produkcyjne pod względem infrastruktury, konfiguracji i danych.

  • Ustaw metryki wydajności. Zdefiniuj metryki wydajności do mierzenia, takie jak czas odpowiedzi, przepływność, wykorzystanie procesora CPU i pamięci oraz współczynniki błędów.

  • Opracowywanie przypadków testowych. Twórz przypadki testowe, które symulują różne scenariusze obciążeń, stopniowo zwiększając obciążenie w celu oceny wydajności na różnych poziomach.

  • Wykonywanie i monitorowanie testów. Uruchom testy przy użyciu zdefiniowanych przypadków testowych i zbierz dane wydajności na każdym poziomie obciążenia. Monitorowanie zachowania obciążeń, zużycia zasobów i obniżenia wydajności.

  • Analizowanie i optymalizowanie skalowania. Przeanalizuj wyniki testu, aby zidentyfikować wąskie gardła wydajności, ograniczenia skalowalności lub obszary pod kątem poprawy. Zoptymalizuj konfigurację, infrastrukturę lub kod, aby zwiększyć skalowalność i wydajność. Ukończenie skalowania zajmuje trochę czasu, więc przetestuj skutki opóźnień skalowania.

  • Zależności adresów. Znajdź potencjalne problemy z zależnościami. Skalowanie lub partycjonowanie w jednym obszarze obciążenia może powodować problemy z wydajnością w zależności. Stanowe części obciążenia, takie jak bazy danych, są najczęstszą przyczyną problemów z wydajnością zależności. Bazy danych wymagają starannego projektowania w celu skalowania w poziomie. Należy wziąć pod uwagę miary, takie jak optymistyczna współbieżność lub partycjonowanie danych, aby umożliwić większą przepływność w bazie danych.

  • Ponownie przetestuj po korektach. Powtórz testy skalowalności po zaimplementowaniu optymalizacji, aby zweryfikować ulepszenia i zapewnić, że obciążenie może wydajnie obsłużyć oczekiwane obciążenia.

Kompromis: weź pod uwagę ograniczenia budżetowe i cele dotyczące wydajności kosztów obciążenia. Skalowanie w pionie może wiązać się z wyższymi kosztami ze względu na potrzebę większych i bardziej zaawansowanych zasobów. Skalowanie w poziomie oferuje oszczędności kosztów dzięki użyciu mniejszych wystąpień, które można dodawać lub usuwać na podstawie zapotrzebowania.

Partycjonowanie obciążenia

Partycjonowanie to proces dzielenia dużego zestawu danych lub obciążenia na mniejsze, bardziej zarządzane części nazywane partycjami. Każda partycja zawiera podzbiór danych lub obciążenia i jest zwykle przechowywany lub przetwarzany oddzielnie. Partycjonowanie umożliwia przetwarzanie równoległe i zmniejsza rywalizację. Podzielenie obciążenia na mniejsze jednostki umożliwia aplikacji niezależne przetwarzanie każdej jednostki. Rezultatem jest lepsze wykorzystanie zasobów i krótszy czas przetwarzania. Partycjonowanie pomaga również dystrybuować dane na wielu urządzeniach magazynujących, zmniejszając obciążenie poszczególnych urządzeń i poprawiając ogólną wydajność.

Omówienie partycjonowania

Konkretne używane podejście do partycjonowania zależy od typu danych lub obciążenia i używanej technologii. Oto niektóre typowe strategie partycjonowania:

  • Partycjonowanie poziome: w tym podejściu zestaw danych lub obciążenie jest podzielone na podstawie określonych kryteriów, takich jak zakresy wartości lub określone atrybuty. Każda partycja zawiera podzestaw danych spełniających zdefiniowane kryteria.

  • Partycjonowanie w pionie: w tym podejściu zestaw danych lub obciążenie jest podzielony na podstawie określonych atrybutów lub kolumn. Każda partycja zawiera podzbiór kolumn lub atrybutów, co umożliwia wydajniejszy dostęp do wymaganych danych.

  • Partycjonowanie funkcjonalne: w tym podejściu dane lub obciążenie są podzielone na podstawie określonych funkcji lub operacji, które należy wykonać. Każda partycja zawiera dane lub składniki niezbędne dla określonej funkcji, umożliwiając zoptymalizowane przetwarzanie i wydajność.

Partycjonowanie planu

Podczas partycjonowania należy wziąć pod uwagę czynniki, takie jak dystrybucja danych, wzorce zapytań, wzrost danych i wymagania dotyczące obciążenia. Odpowiednie planowanie i projektowanie są niezbędne, aby zapewnić skuteczność partycjonowania i zmaksymalizować wydajność. W przypadku partycjonowania jako myślenia jest to trudniejsze, ponieważ masz już aktywne obciążenie do utrzymania. Może być konieczne zmianę logiki dostępu do danych, dystrybucję dużych ilości danych między partycjami i obsługę ciągłego użycia podczas dystrybucji danych.

Implementowanie partycjonowania

Ważne jest analizowanie cech danych, wzorców dostępu, wymagań współbieżności i celów skalowalności podczas podejmowania decyzji o typie partycjonowania do użycia. Każdy typ partycjonowania ma swoje zalety i uwagi. Oto kilka czynników, które należy wziąć pod uwagę dla każdego typu partycjonowania:

  • Partycjonowanie w poziomie jest odpowiednie, gdy chcesz dystrybuować dane między wieloma zasobami lub serwerami w celu uzyskania lepszej skalowalności i wydajności. Jest to skuteczne, gdy obciążenie może być równoległe i przetwarzane niezależnie na każdej partycji. Rozważ partycjonowanie poziome, gdy wielu użytkowników lub procesów musi mieć dostęp do zestawu danych lub zaktualizować go jednocześnie.

  • Partycjonowanie pionowe jest odpowiednie, gdy niektóre atrybuty lub kolumny są często używane, podczas gdy inne są rzadziej używane. Partycjonowanie pionowe umożliwia wydajny dostęp do wymaganych danych przez zminimalizowanie niepotrzebnego pobierania danych.

  • Partycjonowanie funkcjonalne jest odpowiednie, gdy różne funkcje wymagają różnych podzestawów danych i mogą być przetwarzane niezależnie. Partycjonowanie funkcjonalne może zoptymalizować wydajność, umożliwiając każdej partycji skoncentrowanie określonych operacji.

Testowanie i optymalizowanie partycjonowania

Przetestuj schemat partycjonowania, aby sprawdzić skuteczność i wydajność strategii, aby można było wprowadzić zmiany w celu zwiększenia wydajności. Mierzenie czynników, takich jak czas odpowiedzi, przepływność i skalowalność. Porównaj wyniki z celami wydajności i zidentyfikuj wszelkie wąskie gardła lub problemy. Na podstawie analizy zidentyfikuj potencjalne możliwości optymalizacji. Może być konieczne ponowne dystrybuowanie danych między partycjami, dostosowanie rozmiarów partycji lub zmiana kryteriów partycjonowania.

Kompromis: Partycjonowanie zwiększa złożoność projektowania i opracowywania obciążenia. Partycjonowanie wymaga konwersacji i planowania między deweloperami a administratorami baz danych.

Ryzyko: Partycjonowanie wprowadza pewne potencjalne problemy, które należy wziąć pod uwagę i rozwiązać, w tym:

  • Niesymetryczność danych: partycjonowanie może prowadzić do niesymetryczności danych, gdzie niektóre partycje otrzymują nieproporcjonalną ilość danych lub obciążenia w porównaniu z innymi. Niesymetryczność danych może spowodować nierównowagę wydajności i zwiększyć rywalizację o określone partycje.

  • Wydajność zapytań: słabo zaprojektowane schematy partycjonowania mogą negatywnie wpływać na wydajność zapytań. Jeśli zapytania muszą uzyskiwać dostęp do danych w wielu partycjach, może to wymagać dodatkowej koordynacji i komunikacji między partycjami, co prowadzi do zwiększonego opóźnienia.

Ułatwienia platformy Azure

Optymalizacja skalowania. Platforma Azure ma pojemność infrastruktury do obsługi skalowania w pionie i poziomie. Usługi platformy Azure mają różne warstwy wydajności znane jako jednostki SKU. Jednostki SKU umożliwiają skalowanie w pionie. Wiele zasobów platformy Azure obsługuje automatyczne skalowanie lub inne opcje skalowania w miejscu. Niektóre zasoby obsługują zaawansowane metryki lub niestandardowe dane wejściowe, aby obsługiwać zachowanie skalowania dostrajania. Większość implementacji skalowania na platformie Azure może ustawiać limity i obsługiwać niezbędną możliwość obserwowania, aby otrzymywać alerty o zmianie.

Usługa Azure Monitor umożliwia monitorowanie różnych metryk i warunków w aplikacjach i infrastrukturze. Za pomocą funkcji Monitor można wyzwalać akcje automatycznego skalowania na podstawie wstępnie zdefiniowanych reguł. Na przykład w usłudze Azure Kubernetes Service (AKS) można użyć funkcji Monitor, aby włączyć automatyczne skalowanie zasobników w poziomie (HPA) i automatyczne skalowanie klastra. Korzystając z funkcji monitorowania i alertów monitora, możesz efektywnie ułatwić skalowanie na platformie Azure i zapewnić, że aplikacje i infrastruktura mogą dynamicznie dostosowywać się do potrzeb.

Możesz również tworzyć niestandardowe skalowanie automatyczne na platformie Azure. Alerty można używać w obszarze Monitorowanie dla zasobów, które nie mają funkcji automatycznego skalowania. Te alerty można skonfigurować tak, aby były oparte na zapytaniach lub oparte na metryce i mogą wykonywać akcje przy użyciu Azure Automation. Usługa Automation udostępnia platformę do hostowania i uruchamiania programu PowerShell oraz kodu języka Python na platformie Azure, w chmurze i środowiskach lokalnych. Oferuje funkcje, takie jak wdrażanie elementów Runbook na żądanie lub zgodnie z harmonogramem, historia uruchamiania i rejestrowanie, zintegrowany magazyn wpisów tajnych i integracja kontroli źródła.

Projektowanie aplikacji do skalowania: Oto kilka sposobów, w jaki platforma Azure ułatwia projektowanie skalowania aplikacji;

  • Eliminowanie blokowania danych: w usłudze Azure SQL Database można włączyć zoptymalizowane blokowanie w celu zwiększenia wydajności baz danych, które wymagają ścisłej spójności.

  • Korzystanie z zadań w tle: platforma Azure oferuje usługi i wskazówki dotyczące implementowania zadań w tle. Aby uzyskać więcej informacji, zobacz Zadania w tle.

  • Implementowanie równoważenia obciążenia: platforma Azure udostępnia moduły równoważenia obciążenia, które nie wymagają koligacji klienta. Te moduły równoważenia obciążenia obejmują usługę Azure Front Door, Azure Application Gateway i Azure Load Balancer.

Partycjonowanie obciążenia: platforma Azure oferuje różne strategie partycjonowania dla różnych magazynów danych. Te strategie pomagają zwiększyć wydajność i skalowalność, dystrybuując dane między wieloma partycjami. Aby uzyskać więcej informacji, zobacz Strategie partycji danych.

Lista kontrolna wydajności wydajności

Zapoznaj się z pełnym zestawem zaleceń.