Testování výkonu a antipatterny pro cloudové aplikace

Antipatterny výkonu, podobně jako vzory návrhu, jsou běžné vadné procesy a implementace v organizacích. Jedná se o běžné postupy, které můžou způsobit problémy se škálovatelností, když je aplikace pod tlakem. Povědomí o těchto postupech může zjednodušit komunikaci základních konceptů mezi odborníky na software a znalost antipatternů může být užitečná při kontrole kódu nebo diagnostice problémů s výkonem.

Tady je běžný scénář: Aplikace se během testování výkonnosti chová dobře. Vydá se do produkčního prostředí a začne zpracovávat skutečné úlohy. V tomto okamžiku začne fungovat špatně – odmítá žádosti uživatelů, zastavuje nebo vyvolává výjimky. Vývojový tým najednou stojí před dvěma otázkami:

  • Proč se toto chování neprojevilo během testování?
  • Jak ji můžeme opravit?

Odpověď na první otázku je jednoduchá. V testovacím prostředí je velmi obtížné simulovat skutečné uživatele, vzorce jejich chování a objem práce, kterou můžou provádět. Jediným zcela spolehlivým způsobem, jak porozumět chování systému při vysokém zatížení, je sledovat ho v produkčním prostředí. Aby bylo jasno, nenaznačujeme, že byste měli přeskočit testování výkonnosti. Testování výkonu je zásadní pro získání standardních metrik výkonu. Musíte však být připraveni sledovat a řešit problémy s výkonem, když k nim dojde v systému za provozu.

Odpověď na druhou otázku, jak problém opravit, tak jednoduchá není. Příčinou může být řada faktorů a v některých případech se problém projevuje pouze za určitých okolností. Klíčem k nalezení původní příčiny jsou instrumentace a protokolování, musíte však také vědět, co hledat.

Na základě naší spolupráce se zákazníky Microsoft Azure jsme identifikovali několik nejběžnějších problémů s výkonem, se kterými se zákazníci setkávají v produkčním prostředí. Po každý antipattern popisujeme, proč k danému antipatternu dochází, příznaky antipatternu a techniky pro vyřešení problému. Poskytujeme také ukázkový kód, který ilustruje antipattern i navrhované řešení škálovatelnosti.

Některé z těchto antipatternů se můžou zdát zřejmé, když si přečtete popisy, ale vyskytují se častěji, než si myslíte. Někdy aplikace zdědí návrh, který fungoval v místním prostředí, ale neškáluje se v cloudu. Případně může aplikace začít s velmi čistým návrhem, ale s přidáváním nových funkcí se vloudí jeden nebo několik z těchto antipatternů. Tato příručka vám v každém případě pomůže tyto antipatterny identifikovat a opravit.

Katalog antipatternů

Tady je seznam antipatternů, které jsme identifikovali:

Antipattern Popis
Zaneprázdněná databáze Příliš velké snižování zátěže zpracování do úložiště dat.
Zaneprázdněný front-end Přesouvání úloh náročných na prostředky do vláken na pozadí.
Přetížení vstupně-výstupních operací Průběžné odesílání mnoha malých síťových požadavků.
Nadbytečné načítání Načítání více dat, než je potřeba, jehož výsledkem jsou zbytečné vstupně-výstupní operace.
Nesprávné vytváření instancí Opakované vytváření a ničení objektů, které jsou navržené ke sdílení a opakovanému použití.
Monolitická trvalost Používání stejného úložiště dat pro data s velmi rozdílnými vzory využití.
Žádné ukládání do mezipaměti Neúspěšné ukládání dat do mezipaměti.
Hlučný soused Jeden tenant používá nepřiměřenou částku prostředků.
Opakování Stormu Opakování neúspěšných požadavků na server je příliš často.
Synchronní vstupně-výstupní operace Blokování volajícího vlákna, zatímco se dokončují vstupně-výstupní operace.

Další kroky

Další informace o ladění výkonu najdete v tématu věnovaném ladění výkonu distribuovaných aplikací.