Sdílet prostřednictvím


Návrh pro rozšíření

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í zpátky, když další kapacita není potřeba. 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 přilnavosti instance. Lepivost, 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 horizontálně. Provoz od uživatele s vysokým objemem 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 úzká místa. Horizontální škálování není univerzální opravou 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. Nejprve v systému určete a vyřešte úzká místa, než na problém přihodíte další instance. Stavové části systému jsou s největší pravděpodobností příčinou závad.

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. Zavádějte mechanismy řízení toku pro správu provozu a postupné snižování 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í.

Delegujte přirozeně asynchronní úlohy. Úkoly, jako je odesílání e-mailů, akce, kde uživatel nepotřebuje okamžitou odpověď, a integrace s jinými systémy jsou dobrými příležitostmi pro využití vzorů asynchronního zasílání zpráv.

Předejte úlohy náročné na prostředky. Úlohy, které vyžadují mnoho prostředků procesoru nebo vstupu/výstupu, by měly být, pokud je to možné, přesunuty do úloh na pozadí, aby se minimalizovalo zatížení front-endu zpracovávajícího požadavky uživatelů.

Automatické škálování na základě aktuálních metrik využití a použití vestavěných funkcí pro automatické š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í, rozšiřte kapacitu podle plánu. Například rozšiřte kapacitu 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í. Pro osvědčené postupy pro automatické škálování se podívejte na Automatické škálování.

Vezměte v úvahu agresivní automatické škálování pro kritické úlohy. Pro kritické úlohy budete chtít držet náskok před poptávkou. 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.

Navrhujte s ohledem na škálovatelnost. Nezapomeňte, že v rámci elastického škálování bude mít aplikace období škálování dolů, kdy se instance odebírají. Aplikace musí vhodně zvládnout odstraňování instancí. Zde jsou některé způsoby zpracování snižování kapacity:

  • Sledujte události vypnutí (pokud jsou k dispozici) a provádějte správné vypnutí.
  • Klienti/uživatelé služby by měli umožnit zpracování přechodných chyb a opakovat pokusy.
  • Pro dlouhotrvající úlohy zvažte rozdělení práce, využijte kontrolní body nebo vzor 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. Například zvažte 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. Systém můžete modelovat pomocí přístupu, jako je Amdahlův zákon. Kvantifikujte škálovatelnost na základě parametrů, jako jsou soutěžení 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á soutěživost naznačuje sekvenční zpracování, které by se mohlo paralelizovat, zatímco vysoká koherence naznačuje nadměrné závislosti mezi procesy, což vás vybízí k minimalizaci interakcí. Během návrhu zátěže můžete vypočítat maximální efektivní kapacitu vašeho systému, abyste se vyhnuli poskytování větší nabídky než poptávky, což vede k plýtvání.