Efektywność wydajności

Ukończone

Załóżmy, że artykuł informacyjny jest publikowany w jednym z ostatnich ogłoszeń o produkcie w organizacji. Dodatkowa rozgłos z artykułu informacyjnego przynosi duży napływ ruchu do twojej witryny internetowej. Czy witryna internetowa może obsługiwać ten ruch? Czy Twoja witryna może przejąć dodatkowe obciążenie bez powolnego lub nieodpowiadanego?

W tej lekcji przyjrzymy się niektórym podstawowym zasadom zapewniania doskonałej wydajności aplikacji. Szczególnie zasady skalowania i optymalizacji, które składają się na filar wydajności.

Co to jest zapewnianie wydajności?

Wydajność jest zgodna z dostępnymi zasobami aplikacji z zapotrzebowaniem, które otrzymuje. Zapewnianie wydajności obejmuje skalowanie zasobów, identyfikację i optymalizację potencjalnych wąskich gardeł oraz optymalizację kodu aplikacji w celu uzyskania najwyższej wydajności.

Przyjrzyjmy się kilku wzorcom i rozwiązaniom, które można wykorzystać w celu zwiększenia skalowalności i wydajności aplikacji.

Skalowanie w górę i zwiększanie skali w poziomie

Zasoby obliczeniowe można skalować w dwóch kierunkach:

  • Skalowanie w górę polega na dodawaniu większej ilości zasobów w ramach pojedynczego wystąpienia. Znany również jako skalowanie w pionie.

    An illustration that shows scaling up by adding resources to a virtual machine.

  • Zwiększanie skali w poziomie polega na dodawaniu wystąpień. Znany również jako skalowanie w poziomie.

    An illustration that shows scaling out by adding instances to increase performance.

Skalowanie w górę dotyczy dodawania większej liczby zasobów, takich jak procesor CPU lub pamięć, do pojedynczego wystąpienia. Tym wystąpieniem może być maszyna wirtualna lub usługa PaaS.

Dodanie większej pojemności do wystąpienia zwiększa ilość zasobów udostępnianych aplikacji, ale wiąże się z pewnymi ograniczeniami. Maszyny wirtualne są ograniczone do pojemności hosta, na którym są uruchamiane, a hosty mają ograniczenia fizyczne. Skalując wystąpienie w górę, można w końcu napotkać te ograniczenia. Uniemożliwiają one dodanie do wystąpienia kolejnych zasobów.

Skalowanie w górę dotyczy dodawania większej liczby wystąpień do usługi. Mogą to być maszyny wirtualne lub usługi PaaS. Zamiast zwiększać pojemność poprzez poprawę wydajności pojedynczego wystąpienia, zwiększamy ją poprzez dodanie ogólnej liczby wystąpień.

Zaletą skalowania na zewnątrz jest możliwość nieskończonego skalowania, jeśli do architektury można dodawać kolejne maszyny. Skalowanie na zewnątrz wymaga zastosowania pewnego rodzaju rozkładu obciążenia. Na przykład moduł równoważenia obciążenia, który dystrybuuje żądania na dostępnych serwerach lub mechanizm odnajdywania usług do identyfikowania aktywnych serwerów, do których mają być wysyłane żądania.

W obu rodzajach skalowania ilość zasobów można zmniejszyć, co wiąże się z optymalizacją kosztów.

Skalowanie automatyczne polega na dynamicznym przydzielaniu zasobów w celu dopasowania do wymagań dotyczących wydajności. Gdy rośnie ilość pracy, aplikacja może potrzebować dodatkowych zasobów, aby utrzymać wymagane poziomy wydajności i spełniać warunki umów dotyczących poziomu usług (SLA). Ponieważ zapotrzebowanie spada i dodane zasoby nie są już potrzebne, można je cofnąć, aby zminimalizować koszty.

Skalowanie automatyczne wykorzystuje elastyczność środowisk hostowanych w chmurze, zmniejszając nakłady pracy związane z zarządzaniem. Zmniejsza potrzebę ciągłego monitorowania wydajności systemu przez operatora i podejmowania decyzji o dodaniu lub usunięciu zasobów.

Optymalizowanie wydajności sieci

Podczas optymalizacji pod kątem wydajności przyjrzysz się wydajności sieci i magazynu, aby upewnić się, że ich poziomy mieszczą się w dopuszczalnych limitach. Te poziomy wydajności mogą mieć wpływ na czas odpowiedzi aplikacji. Wybranie odpowiednich technologii sieci i magazynowania dla architektury pomaga zapewnić użytkownikom najlepsze środowisko pracy.

Dodanie warstwy obsługującej komunikaty między usługami może okazać się korzystne dla poprawy wydajności i skalowalności. Warstwa obsługująca komunikaty tworzy bufor, dzięki któremu żądania mogą kontynuować bezbłędny przepływ, w razie gdyby aplikacja odbierająca nie mogła nadążyć. Gdy aplikacja działa za pośrednictwem żądań, odpowiada na nie w kolejności, w jakiej zostały odebrane.

Optymalizowanie wydajności magazynu

W wielu rozwiązaniach wielkoskalowych dane są dzielone na odrębne partycje z możliwością oddzielnego dostępu i zarządzania. Należy uważnie dobrać strategię partycjonowania w celu zmaksymalizowania korzyści i zminimalizowania niekorzystnych skutków. Partycjonowanie może pomóc w zwiększeniu skalowalności, zmniejszeniu stopnia rywalizacji o zasoby i zoptymalizowaniu wydajności.

Stosowanie buforowania w ramach architektury pozwala zwiększyć wydajność. Buforowanie to mechanizm służący do przechowywania często używanych danych lub zasobów (stron internetowych, obrazów) w celu szybszego pobierania. Buforowanie można stosować w różnych warstwach aplikacji. Zastosowanie buforowania między serwerami aplikacji a bazą danych pozwala skrócić czas pobierania danych.

Możesz również użyć buforowania między użytkownikami a serwerami internetowymi, umieszczając zawartość statyczną bliżej użytkowników. Ten typ buforowania zmniejsza czas potrzebny na zwrócenie stron internetowych do użytkowników. Ma to również dodatkowy wpływ na odciążanie żądań z bazy danych lub serwerów internetowych, zwiększając wydajność innych żądań.

Identyfikowanie wąskich gardeł wydajności w aplikacji

Aplikacje rozproszone i usługi działające w chmurze to złożone oprogramowanie składające się z wielu ruchomych części. W środowisku produkcyjnym ważne jest, aby móc śledzić sposób, w jaki użytkownicy korzystają z systemu. Ważne jest również śledzenie wykorzystania zasobów i ogólne monitorowanie kondycji i wydajności systemu. Informacje te można wykorzystywać jako pomoc diagnostyczną do wykrywania i korygowania problemów. Można też używać ich do wykrywania potencjalnych problemów i zapobiegania ich występowaniu.

Optymalizacja wydajności obejmuje zrozumienie sposobu działania samych aplikacji. Błędy, słabe działanie kodu i wąskie gardła w systemach zależnych mogą być odkrywane za pomocą narzędzia do zarządzania wydajnością aplikacji. Często te problemy mogą być ukryte lub zaciemniane dla użytkowników, deweloperów i administratorów, ale mogą mieć negatywny wpływ na ogólną wydajność aplikacji.

Przejrzyj wszystkie warstwy aplikacji oraz zidentyfikuj i skoryguj wąskie gardła wydajności. Wąskie gardła mogą dotyczyć niezadowalającej obsługi pamięci w aplikacji, a nawet procesu dodawania indeksów do bazy danych. Może to być proces iteracyjny, ponieważ usunięcie jednego wąskiego gardła może spowodować odkrycie kolejnego, którego istnienie było do tej pory nieznane.

Dzięki dokładnemu podejściu do monitorowania wydajności możesz określić typy wzorców i praktyk, z których może korzystać architektura.

Sprawdź swoją wiedzę

1.

Który z poniższych jest przykładem skalowania w górę (skalowanie w pionie)?

2.

Który z poniższych jest przykładem skalowania w poziomie (skalowanie w poziomie)?