Sdílet prostřednictvím


Návrh pro škálování na více instancí

Navrhněte aplikaci tak, aby ji bylo možné horizontálně škálovat.

Hlavní výhodou cloudu je elastické škálování – schopnost využívat tolik kapacity, kolik potřebujete, horizontální navýšení kapacity při nárůstu zatížení a škálování v případě, že není potřeba další kapacita. Navrhněte aplikaci tak, aby se škálovat horizontálně, přidávala nebo odebírala instance a odpovídala poptávce.

Škálovatelnost se měří poměrem zvýšení propustnosti a zvýšením prostředků. V ideálním případě jsou obě čísla v dobře navrženém systému proporcionální: obousměrné přidělení prostředků zdvojnásobí propustnost. Škálovatelnost je obvykle omezena zavedením kritických bodů nebo synchronizačních bodů v systému.

Doporučení

Vyhněte se věrnosti instanci. Věrnost, nebo spřažení relace, znamená, že požadavky od stejného klienta jsou vždy směrovány na stejný server. Stickiness omezuje schopnost aplikace škálovat kapacitu. Provoz z vysokoobsáhového uživatele se například nebude distribuovat mezi instance. Mezi příčiny věrnosti patří ukládání stavu relace do paměti a používání klíčů pro šifrování specifických pro konkrétní počítač. Ujistěte se, že každá instance může zpracovat kteroukoli žádost.

Zjistěte kritické body. Škálování není magickým řešením každého problému s výkonem. Pokud je například kritickým bodem backendová databáze, nepomůže přidat další webové servery. Než na problém přihodíte další instance, nejprve v systému určete a vyřešte kritické body. Kritickými body jsou s největší pravděpodobností stavové části systému.

Rozdělte úlohy podle požadavků na škálovatelnost. Aplikace se často skládají z více úloh s různými požadavky na škálování. Například aplikace může mít veřejně přístupný web a samostatný web pro správy. Na veřejném webu může docházet k náhlým nárůstům provozu, zatímco web pro správu má menší a předvídatelnější zátěž.

Navrhujte autonomní a oddělené komponenty, které komunikují prostřednictvím asynchronních komunikačních protokolů. V ideálním případě by komponenty měly mít svůj vlastní nezávislý stav a používat události ke komunikaci jakékoli změny nebo aktivity s vnějšími komponentami. To pomáhá nezávisle škálovat pouze přetíženou komponentu. Implementujte mechanismy řízení toku pro správu provozu a řádné snížení výkonu. Spotřebitelé by měli řídit vlastní míru spotřeby. Producenti by měli řídit vlastní rychlost přenosu, včetně zastavení. Fronty zpráv jsou dobrými možnostmi absorbovat další úlohy a umožnit uživatelům vyprázdnit práci ve volném čase.

Vyhněte se zbytečné komunikaci, koordinaci a čekání.

Snižování zátěže přirozeně asynchronních úloh Úkoly, jako je odesílání e-mailů, akce, kdy uživatel nepotřebuje okamžitou odpověď, a integrace s jinými systémy jsou dobrými místy k používání vzorů asynchronního zasílání zpráv.

Přesměrujte zpracování úloh náročných na prostředky. Chcete-li minimalizovat zatížení front-endu, který zpracovává požadavky uživatelů, měly by se úlohy, které vyžadují mnoho prostředků procesoru nebo V/V, přesunout mezi úlohy na pozadí, pokud je to možné.

Automatické škálování na základě metrik využití za provozu a použití integrovaných funkcí automatického škálování Mnoho výpočetních služeb Azure má integrovanou podporu automatického škálování. Pokud má aplikace předvídatelné, pravidelné zatížení, škálujte na více instancí podle plánu. Například škálujte na více instancí během pracovní doby. Pokud zatížení není předvídatelné, používejte k aktivaci automatického škálování metriky výkonu, jako je délka fronty procesoru nebo žádostí. Sledujte aplikace a jejich komunikaci, abyste identifikovali kritické body a odvozovali přesnější rozhodnutí. Přečtěte si osvědčené postupy automatického škálování v tématu Automatické škálování.

Vezměte v úvahu agresivní automatické škálování pro kritické úlohy. Pro kritické úlohy budete chtít být připraveni předem. Je lepší v případě velkého zatížení přidat rychle nové instance, aby se zvládnul další provoz, a pak postupně škálovat zpět.

Vytvářejte návrh pro horizontální snížení kapacity. Nezapomeňte, že v rámci elastického škálování bude mít aplikace období horizontálního snižování kapacity, kdy se instance odebírají. Aplikace musí pohodlně zvládnout odebírání instancí. Tady jsou některé způsobů zpracování horizontálního snižování kapacity:

  • Naslouchejte událostem vypnutí (pokud jsou k dispozici) a provádějte vypnutí čistě.
  • Klienti/příjemci služby by měli podporovat zpracování přechodných chyb a akci opakovat.
  • Pro dlouhotrvající úlohy zvažte rozdělení práce, pomocí kontrolních bodů nebo modelu Pipes and Filters.
  • Vkládejte pracovní položky do fronty, aby si je mohla vyzvednout jiná instance, pokud se původní instance odebere uprostřed zpracování.

Zvažte škálování pro redundanci. Horizontální navýšení kapacity může zlepšit spolehlivost vaší aplikace. Zvažte například horizontální navýšení kapacity napříč několika zónami dostupnosti, například pomocí zónově redundantních služeb. Tento přístup může zlepšit propustnost aplikace a také zajistit odolnost, pokud dojde k výpadku jedné zóny.

Modelujte a optimalizujte škálovatelnost systému. Model systému můžete použít pomocí přístupu, jako je Amdahlův zákon. Kvantifikujte škálovatelnost na základě parametrů, jako jsou kolize a koherence. Kolize odkazuje na zpoždění kvůli čekání nebo zařadování do fronty pro sdílené prostředky. Soudržnost odkazuje na zpoždění, aby data byla konzistentní. Například vysoká kolize indikuje sekvenční zpracování, které by mohlo být paralelizováno, zatímco vysoká koherence naznačuje nadměrné závislosti mezi procesy, což vás vyzve k minimalizaci interakcí. Během návrhu úloh můžete vypočítat maximální efektivní kapacitu systému, abyste se vyhnuli poskytování větší nabídky než poptávky, což vede k plýtvání.