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í.