Strategie architektoniczne służące optymalizacji kosztów komponentów

Dotyczy tego zalecenia listy kontrolnej dotyczącej optymalizacji kosztów Azure Well-Architected Framework:

CO:07 Optymalizowanie kosztów składników. Regularnie usuwaj lub optymalizuj starsze, niepotrzebne i niewystarczająco wykorzystywane komponenty obciążenia roboczego, w tym funkcje aplikacji, funkcje platformy i zasoby.

W tym przewodniku opisano zalecenia dotyczące optymalizowania kosztów składników obciążenia roboczego. Optymalizacja kosztów komponentów odnosi się do procesu oceny i poprawy wydajności kosztowej poszczególnych elementów w ramach obciążenia roboczego. Podkreśla on ciągły przegląd i potencjalne usunięcie nieaktualnych, niepotrzebnych lub rzadko używanych składników, takich jak funkcje aplikacji, funkcje platformy i zasoby. Obejmuje również optymalizację kosztów środowisk odzyskiwania po awarii oraz sposób unikania wprowadzania niezoptymalizowanych składników. Wskazówki zawarte w tym artykule dotyczą istniejących obciążeń, które nie są w fazie projektowania. Zaniedbanie regularnej optymalizacji komponentów może prowadzić do zawyżania kosztów, marnotrawstwa zasobów i nieefektywnych obciążeń roboczych, które pochłaniają zarówno czas, jak i pieniądze.

Definicje

Termin Definition
Funkcja aplikacji Odrębna funkcja w oprogramowaniu aplikacji, która umożliwia użytkownikom wykonywanie określonych zadań lub uzyskiwanie dostępu do określonych informacji.
Funkcja platformy Określona funkcjonalność lub możliwość zapewniana przez platformę. Może się ona różnić w zależności od platformy, ale ogólnie funkcje platformy są zaprojektowane w celu ulepszenia doświadczenia użytkownika, zwiększenia produktywności lub umożliwienia wykonywania określonych zadań lub działań.
Resource Pojedyncza jednostka lub składnik, który można tworzyć, konfigurować i wykorzystywać u dostawcy usług chmurowych.

Optymalizowanie składników obciążenia roboczego polega na udoskonaleniu różnych elementów obciążenia roboczego, w tym funkcji aplikacji, możliwości platformy i zasobów. Celem jest zapewnienie, że obciążenie robocze korzysta ze wszystkich komponentów wydajnie i opłacalnie. Strategie obejmują usuwanie, modyfikowanie i unikanie elementów, które powodują wydawanie większej kwoty, niż jest to konieczne. Proces optymalizacji kosztów komponentów zapewnia przydzielanie zasobów do funkcji i komponentów, które zapewniają największą wartość, unikając niepotrzebnych wydatków.

Optymalizuj funkcje aplikacji

Optymalizowanie funkcji aplikacji to proces usuwania, ponownego inwestowania lub monetyzacji funkcji aplikacji na podstawie wartości. Zapewnia ona przydzielanie zasobów do funkcji aplikacji, które zapewniają klientom największą wartość. Optymalizacja funkcji aplikacji pomaga uniknąć inwestowania w funkcje, które przyczyniają się do długu technicznego lub nie przynoszą wystarczającego zwrotu z inwestycji.

Oceń wartość funkcji aplikacji

Aby określić wartość funkcji, należy wziąć pod uwagę jej wpływ na ogólną aplikację i wartość dostarczaną klientom. Niektóre czynniki, które należy wziąć pod uwagę, obejmują:

  • Potrzeby klientów: oceń, jak dobrze funkcja spełnia wymagania i oczekiwania klientów. Opinie klientów, ankiety i dane użycia mogą być przydatne w zrozumieniu postrzeganej wartości.

  • Cele biznesowe: Oceń, w jaki sposób funkcja jest zgodna ze strategicznymi celami firmy. Zastanów się, jak funkcje obsługują generowanie przychodów, zadowolenie klientów lub przewagę konkurencyjną.

  • Wpływ na doświadczenie użytkownika: określ wpływ funkcji na poprawę doświadczenia użytkownika i poprawę użyteczności lub produktywności.

  • Wyróżnienie: oceń, czy funkcja zapewnia unikatowy punkt sprzedaży czy przewagę konkurencyjną w porównaniu z innymi aplikacjami na rynku.

Oceń koszt funkcji aplikacji

Ważne jest, aby zrozumieć koszty związane z każdą funkcją w celu efektywnej alokacji zasobów i optymalizacji. Podczas oceniania kosztów należy wziąć pod uwagę różne aspekty, takie jak:

  • Nakład pracy programistycznej: oceń czas, zasoby i wiedzę wymaganą do opracowania i utrzymania funkcji lub otaczających funkcji. Nie w pełni wykorzystywane funkcje często stają się kluczowym źródłem długu technicznego.

  • Konserwacja i obsługa techniczna: rozważ bieżące koszty związane z konserwacją i obsługą funkcji, w tym poprawki błędów, aktualizacje zabezpieczeń i rozwiązywanie problemów.

  • Infrastruktura i wykorzystanie zasobów: oceń wpływ funkcji na wymagania dotyczące infrastruktury, w tym zasoby serwera, pamięć masową i przepustowość.

  • Złożoność integracji: Oceń złożoność i koszty integracji funkcji z innymi systemami lub usługami innych firm.

  • Zagadnienia dotyczące wydajności: oceń wpływ funkcji na wydajność aplikacji, w tym skalowalność, czas odpowiedzi i użycie zasobów.

Przejrzyj wartość funkcjonalności aplikacji z uczestnikami projektu

Oceń wartość funkcji aplikacji z interesariuszami, angażując kluczowych pracowników, takich jak menedżerowie produktów, deweloperzy oprogramowania i analitycy biznesowi, aby ocenić wartość określonych funkcji dla celów biznesowych. Ta współpraca jest niezbędna do optymalizacji kosztów, ponieważ zapewnia wgląd w nakład działań utrzymaniowych i identyfikuje funkcje, które mogą utrudniać produktywność lub odciągać od tworzenia nowych, cennych funkcji. Twój zespół programistyczny może przekazać ważne informacje o tym, ile pracy potrzeba do utrzymania niektórych funkcji. Zachęcaj ich do zgłaszania uwag o funkcjach, które mogą przynosić więcej kłopotów niż korzyści, zwłaszcza jeśli te funkcje rozpraszają zespół od tworzenia nowych.

Określ dalszy los funkcji

Na podstawie analizy i oceny określ przyszły kierunek rozwoju funkcji aplikacji. Usuń, reinwestuj lub monetyzuj dowolną funkcję aplikacji, która nie zapewnia zwrotu z inwestycji:

  • Usuwanie: weź pod uwagę planowane wycofanie funkcji aplikacji na podstawie danych. Przyczyny usunięcia funkcji mogą obejmować niskie zapotrzebowanie klientów, wysokie koszty konserwacji, złożoność lub nadmiarowość, której naprawa nie jest warta wysiłku. Utwórz plan dotyczący usunięcia, który może obejmować refaktoryzowanie kodu, aktualizowanie zależności lub reorganizację interfejsu użytkownika.

    Ikona ryzyka Ryzyko: przypadkowo można usunąć funkcje, które są krytyczne dla niektórych użytkowników lub scenariuszy i mogą negatywnie wpłynąć na wydajność, operacje i zabezpieczenia w aplikacji.

  • Reinwestuj: niektóre funkcje aplikacji mogą nie dodać wystarczającej wartości w bieżącym stanie, ale mogą dodać wartość, jeśli ponownie w nie zainwestujesz. Reinwestycja oznacza przerobienie lub promowanie funkcji aplikacji. Nadaj priorytet zidentyfikowanym usprawnieniom według ich wartości i wykonalności. Określ mapę drogową i oś czasu wdrażania zmian. Rozważ czynniki, takie jak zasoby programistyczne, zależności i potencjalny wpływ na aplikację.

  • Monetyzacja: Przekształć funkcje aplikacji w szansę generowania przychodów za pośrednictwem monetyzacji. Czasami funkcje zapewniają użytkownikom wartość, ale nie są warte obecnych nakładów. Poznaj możliwości zarabiania na tych funkcjach, takie jak oferowanie ich jako oddzielne płatne dodatki lub licencjonowanie ich innym firmom.

Optymalizuj zasoby obciążenia

Optymalizacja zasobów obciążeń obejmuje usunięcie wszelkich zasobów, które nie są używane, oraz optymalizację wszelkich niewystarczająco wykorzystywanych zasobów, których wymaga obciążenie. Ten wysiłek może zaoszczędzić pieniądze, uniknąć strat i zapewnić, że obciążenie robocze korzysta tylko z zasobów, które dodają wartość.

Usuń nieużywane zasoby obciążenia roboczego. Nieużywane zasoby to wdrożone usługi, z których nie korzystają procesy robocze lub operacje. Te zasoby mogą być długotrwale bezczynne, osierocone lub zapomniane. Nie zapewniają zwrotu z inwestycji i powinieneś je usunąć. Typowe przyczyny nieużywanych zasobów to:

  • Alerty.
  • Wersje demonstracyjne.
  • Likwidacja środowiska.
  • Wycofanie funkcji.
  • Adresy IP.
  • Zapory sieciowe.
  • Dowód koncepcji.
  • Migawki.
  • Konta magazynowe.
  • Tymczasowe środowiska testowe.
  • Tymczasowe środowiska triage.

Aby usunąć nieużywane zasoby w obciążeniu roboczym, rozważ następujące kroki:

  1. Utwórz spis: przeprowadź dokładny spis wszystkich zasobów w ramach obciążenia roboczego w różnych środowiskach.

  2. Znajdowanie osieroconych zasobów: zasoby mogą stać się osierocone, gdy nie będą już potrzebne lub gdy zostaną usunięte zasoby nadrzędne. Możesz na przykład usunąć maszynę wirtualną, ale skojarzone z nią konto magazynu nie zostanie usunięte. Przejrzyj obciążenie robocze, aby zidentyfikować niepotrzebne lub osierocone zasoby.

  3. Usuwanie bezczynnych składników: wdrożony zasób zwykle wiąże się z kosztem. Nawet jeśli zasób umożliwia zatrzymanie lub ponowne przydzielenie, możesz nadal płacić za zasób. Rozważ usunięcie bezczynnych zasobów. Jeśli potrzebujesz danych, utwórz kopię zapasową najpierw, a następnie usuń zasób. Lepiej ponownie wdrożyć zasób i przywrócić dane, niż pozwolić zasobowi pozostać bezczynny.

Optymalizuj niewykorzystane zasoby. Niewykorzystane zasoby oznaczają niepotrzebne koszty, ponieważ płacisz za pojemność zasobów, która nie jest w pełni wykorzystywana. Identyfikowanie i optymalizowanie tych zasobów w celu zmniejszenia kosztów i efektywniejszego przydzielania zasobów. Aby ocenić i zoptymalizować koszt niedostatecznie wykorzystanych zasobów, wykonaj następujące kroki:

  1. Monitorowanie zasobów: użyj narzędzi do monitorowania wykorzystania procesora CPU, pamięci i pamięci masowej, których faktycznie używasz. Wybierz najlepszy plan zgodny z twoimi potrzebami na podstawie tych informacji.

  2. Analizowanie wykorzystania: przyjrzyj się danym, aby dowiedzieć się, które zasoby nie są używane. Zwróć uwagę na zasoby, które mają niskie wykorzystanie w dłuższym okresie lub duże różnice w użyciu między okresami dużego i małego obciążenia.

  3. Właściwe dopasowanie zasobów: sprawdź, czy istnieje zbyt wiele zasobów przydzielonych do funkcji, które nie są używane. Jeśli tak, dostosuj rozmiar, aby lepiej dopasować go do tego, czego rzeczywiście potrzebujesz.

  4. Automatyczne skalowanie: użyj automatycznego skalowania, aby dostosować używane zasoby w zależności od obciążenia. Upewnij się, że ustawiono maksymalny limit skalowania, aby uniknąć nagłych skoków, które mogą być kosztowne i niepotrzebne.

Po wprowadzeniu tych korekt przetestuj, aby upewnić się, że wszystko nadal działa tak, jak powinno. Ciągłe monitorowanie wykorzystania zasobów i dostosowywanie alokacji zasobów w miarę zmian zapotrzebowania na zasoby wynikającego z obciążenia w miarę upływu czasu. Regularne przeglądanie i optymalizowanie wykorzystania zasobów w celu utrzymania efektywności kosztowej i optymalizacji wydajności.

Optymalizuj zasoby odzyskiwania po awarii. Optymalizacja środowisk odzyskiwania po awarii polega na zapewnieniu efektywnego wykorzystania zasobów przydzielonych na potrzeby odzyskiwania po awarii. Ciepła (aktywna-pasywna) strategia odtwarzania awaryjnego jest typowym źródłem niedostatecznego wykorzystania. W ciepłej strategii odzyskiwania po awarii jedno środowisko odbiera całe obciążenie, podczas gdy drugie środowisko jest w stanie bezczynności do momentu wystąpienia scenariusza awarii. Aby zoptymalizować środowisko odzyskiwania po awarii, rozważ, jak podejście hot (active-active), cold (active-off) lub active-redeploy może pomóc uniknąć niedostatecznie wykorzystanych zasobów. Oto omówienie tych trzech metod odzyskiwania po awarii:

  • Plany aktywne: zarówno podstawowe, jak i pomocnicze środowiska obsługują ruch współbieżnie. To obciążenie robocze może równoważyć obciążenia między tymi środowiskami i reagować na wymagania w czasie rzeczywistym. Rozłożenie obciążenia między dwoma aktywnymi środowiskami umożliwia korzystanie z tańszych zasobów, zmniejszenie wąskich gardeł wynikających z pojedynczego punktu awarii i pełne wykorzystanie dostępnych zasobów. Może to prowadzić do obniżenia kosztów pod względem marnotrawstwa zasobów lub bezczynności. Podejście typu hot może wymagać większej inwestycji w synchronizację i utrzymanie parzystości między dwoma środowiskami.

  • Plany odtworzenia po awarii typu cold: Zimny model odzyskiwania po awarii obejmuje środowisko rezerwowe, które pozostaje uśpione, dopóki awaria nie wyzwoli potrzeby przejścia w tryb failover. Ponieważ środowisko rezerwowe nie działa aktywnie, koszty związane z operacjami obliczeniowymi, magazynem i siecią są zminimalizowane. Wydatki koncentrują się na przechowywaniu kopii zapasowych, obrazów maszyn wirtualnych lub szablonów. Przejście w tryb failover w modelu zimnego zapasu może trwać dłużej, ponieważ zasoby muszą być uruchamiane, a dane mogą być przywracane. Przed zatwierdzeniem tego podejścia upewnij się, że czas odzyskiwania jest zgodny z celami czasu odzyskiwania (RTO) firmy.

  • Active-redeploy: ta strategia używa infrastruktury jako kodu. Po wystąpieniu zdarzenia trybu failover wdrażasz środowisko pomocnicze przy użyciu wstępnie zdefiniowanych szablonów i skryptów. Bez wstępnie wdrożonych zasobów obliczeniowych w środowisku odzyskiwania po awarii można zaoszczędzić na kosztach związanych z utrzymywaniem bezczynnych zasobów. Ponosisz koszty tylko podczas rzeczywistego wdrożenia w scenariuszu trybu failover. Podobnie jak w przypadku zimnego podejścia ten model może wprowadzać dłuższe czasy odzyskiwania, zwłaszcza jeśli złożoność infrastruktury jest wysoka. Należy przetestować i zmierzyć czas odzyskiwania, aby upewnić się, że spełnia docelowy czas odzyskiwania (RTO).

Optymalizacja funkcji platformy

Optymalizacja funkcji platformy obejmuje wyeliminowanie lub zaktualizowanie funkcji platformy, takich jak warstwy wydajności i ustawienia konfiguracji, w celu zoptymalizowania kosztów. Pomaga dostosować wydatki do wymagań obciążenia roboczego i uniknąć niepotrzebnych wydatków na niepotrzebne funkcje. Poniżej przedstawiono kilka wskazówek dotyczących optymalizowania kosztów funkcji platformy:

  • Poznaj możliwości zakupionych usług: Zanim będzie można zoptymalizować, potrzebny jest jasny spis usług i ich funkcji na platformach w chmurze. Zapoznaj się z funkcjami i możliwościami platform lub usług w ramach Twojego obciążenia roboczego. Należy pamiętać o wybranym poziomie i funkcjach oferowanych przez każdy poziom. Jeśli na przykład nie potrzebujesz skalowania automatycznego ani zaawansowanych funkcji sieciowych, plan niższego poziomu może wystarczyć.

  • Wyłącz nieużywane funkcje: identyfikowanie i wyłączanie funkcji platformy, które kosztują pieniądze. Mogą istnieć niepotrzebne migawki pamięci masowej, nieużywane dyski, nadmiarowe funkcje zabezpieczeń lub nieużywane możliwości sieciowe.

  • Użyj odpowiednich wersji: nowsze wersje usługi mogą zapewnić podobną wydajność w tej samej cenie. Na przykład maszyna wirtualna z nowszym sprzętem często zapewnia taką samą wydajność dla mniej pieniędzy.

  • Użyj odpowiednich konfiguracji: możesz płacić za większą dostępność lub wydajność, niż potrzebujesz. Wyeliminuj gwarancje dostępności lub wydajności, których obciążenie nie potrzebuje.

  • Wyeliminuj niepotrzebną automatyzację: oceń procesy automatyzacji i zlikwiduj wszelką nieużywaną automatyzację, które mogą wiązać się z dodatkowymi kosztami.

  • Wyeliminuj nadmiarowość narzędzi: pozbądź się narzędzi, których nie potrzebujesz ani narzędzi, które udostępniają tę samą funkcję. Oceń potencjalne dublowanie się narzędzi używanych do tworzenia oprogramowania, pisania kodu, zabezpieczeń i monitorowania. Jeśli na przykład używasz funkcji GitHub Actions do tworzenia oprogramowania, nie musisz kupować innego narzędzia, które tworzy oprogramowanie. Przed zakupem funkcji lub narzędzi sprawdź, czy w obciążeniu roboczym znajduje się już narzędzie, które może wykonać to zadanie. Wyeliminuj nadmiarowość narzędzi, aby uniknąć marnotrawstwa pieniędzy i jak najlepiej wykorzystać to, co już masz.

Bądź metodyczny w działaniach optymalizacyjnych

Zapobieganie niezoptymalizowanym komponentom polega na proaktywnym zapewnieniu, że komponenty są niezbędne i zoptymalizowane przed dodaniem lub modyfikacją. Najlepszym sposobem na pozbycie się odpadów jest uniknięcie ich powstawania w pierwszej kolejności. Używaj strategii, które pozwalają uniknąć niepotrzebnych wydatków, eliminując źródłowe przyczyny nieefektywności i zapewniając ekonomiczne działanie obciążenia od samego początku. Aby zapobiec marnowaniu, rozważ następujące strategie:

  • Znajdź główną przyczynę, zanim zmienisz rozwiązania: zanim zaczniesz naprawiać problem, upewnij się, że wiesz, co rzeczywiście go powoduje. Jeśli na przykład witryna internetowa działa wolno, nie przełączaj się natychmiast do nowego systemu. Po pierwsze, dowiedz się, dlaczego jest wolno. Możesz dowiedzieć się, że prawdziwym problemem jest coś innego, takiego jak nieprawidłowe zapytania bazy danych. Rozwiąż rzeczywisty problem, aby zaoszczędzić czas i pieniądze.

  • Zastosuj metadane: Zastosuj metadane w celu organizowania i śledzenia zasobów. Metadane umożliwiają kategoryzowanie i grupowanie zasobów, co ułatwia śledzenie, usuwanie i unikanie osieroconych zasobów. Utwórz spójną strategię metadanych we wszystkich zasobach. Rozważ dodanie właścicieli, przewidywanego czasu trwania zasobu (na przykład sunset-30d), lub innych tagów.

  • Dokumentowanie nietypowych zmian: dokumentowanie wszelkich zmian wprowadzonych w infrastrukturze lub w konfiguracjach poza normalnym procesem kontroli środowiska roboczego w celu obniżenia nieoczekiwanych kosztów. Możesz na przykład zwiększyć możliwości skalowania (w górę lub w poziomie) zasobu, aby spełnić krótkoterminowe zapotrzebowanie lub doraźnie obsłużyć problem, ale nie zapomnij z powrotem go zmniejszyć. Sporządź listę nietypowych zmian i użyj jej jako przypomnienia, aby przywrócić zmiany, gdy nie są już potrzebne.

  • Zachowaj prostotę: uprość infrastrukturę i minimalizuj złożoność, aby zmniejszyć koszty. Używaj tylko niezbędnych zasobów i usług, które spełniają Twoje wymagania.

Ułatwianie Azure

Optymalizowanie funkcji aplikacji: możesz użyć usług Azure Monitor i Application Insights do monitorowania użycia aplikacji i identyfikowania obszarów, które są lub nie są używane. Na podstawie zebranych szczegółowych informacji możesz podejmować świadome decyzje dotyczące usuwania lub optymalizowania nieużywanych lub niedostatecznie używanych funkcji.

Optymalizowanie zasobów obciążeń i funkcji platformy: Usługa Azure Advisor udostępnia zalecenia dotyczące kosztów udostępnia zalecenia, które umożliwiają identyfikowanie i eliminowanie nieużywanych zasobów. Usługa Advisor umożliwia analizowanie użycia zasobów i otrzymywanie sugestii dotyczących zasobów do usunięcia lub zmniejszenia skali. Skoroszyt optymalizacji kosztów w usłudze Azure Advisor służy jako scentralizowany koncentrator dla niektórych najczęściej używanych narzędzi, które mogą pomóc w osiąganiu celów wykorzystania i wydajności. Oferuje szereg zaleceń, w tym rekomendacje dotyczące kosztów usługi Azure Advisor. Pomaga również zidentyfikować bezczynne zasoby i zarządzać nieprawidłowo zwolnionymi maszynami wirtualnymi.

Usługa Azure Monitor obsługuje Workbooki. Za pomocą skoroszytów usługi Azure Monitor można znaleźć lub utworzyć skoroszyt, który znajduje i zgłasza osierocone zasoby w zdefiniowanym zakresie. Usługa Azure Automation umożliwia zamykanie maszyn wirtualnych w okresach braku aktywności. Zamknięcia zasobów pomagają zmniejszyć koszty, minimalizując użycie bezczynnych zasobów.

Stosy wdrożeniowe pomagają zapobiegać osieroconym zasobom. Wdróż pliki Bicep lub szablony usługi ARM jako stos wdrożenia i ustaw opcję actionOnUnmanage na „Usuń”. Po usunięciu zasobu z szablonu stos usuwa ten zasób podczas następnego wdrożenia. Przed zastosowaniem zmiany, która usuwa zasoby, przejrzyj wyniki analizy co-jeżeli dla stosu wdrożenia .

Za pomocą funkcji autoskalowania na platformie Azure możesz automatycznie skalować aplikację na podstawie wstępnie zdefiniowanych warunków, dzięki czemu nie trzeba nadmiernie przydzielać zasobów. Automatyczne skalowanie może ułatwić efektywne i ekonomiczne przydzielanie zasobów.

Z perspektywy projektu moduły równoważenia obciążenia Azure mogą dystrybuować obciążenia między strefami dostępności i regionami. Te moduły równoważenia obciążenia mogą pomóc wyeliminować bezczynne zasoby, na przykład w scenariuszach odzyskiwania po awarii.

Lista kontrolna optymalizacji kosztów

Zapoznaj się z pełnym zestawem zaleceń.