TakéAuto Scaling, Auto-ScalingPokročilý

Definice

Automatické škálování je řízení výpočetní kapacity služby podle aktuální nebo očekávané zátěže bez ručního zásahu operátora. Systém přidává či odebírá instance, kontejnery, vlákna nebo jiné prostředky podle metrik a pravidel, aby aplikace zvládla špičky, neplatila zbytečnou rezervu a zůstala stabilní.

Kategorie: Cloud a DevOpsAktualizováno

Proč automatické škálování řeší špičky

Automatické škálování přesouvá rozhodnutí o kapacitě z ručního zásahu na pravidla a měření. Provozní tým nenastavuje počet serverů jen podle odhadu, ale nechá platformu sledovat zátěž a spouštět změny. Typickým cílem je vyrovnat dvě rizika: nedostatek kapacity při špičce a zbytečně drahou rezervu v klidném období.

Cloudové služby, kontejnery i některé databázové platformy umí přidat další uzly, kontejnery nebo worker procesy. Automatické škálování se často kombinuje s load balancerem, který rozděluje provoz mezi nové a původní instance.

Signály, podle kterých se kapacita mění

Pravidlo pro škálování potřebuje signál, prahovou hodnotu a reakci. Signálem může být využití CPU, paměť, počet požadavků za sekundu, délka fronty, latence, počet otevřených spojení nebo vlastní aplikační metrika. U fronty bývá lepším signálem počet čekajících zpráv než procesor, protože CPU může být nízké i ve chvíli, kdy uživatelé čekají.

Rozhodování bývá záměrně pomalejší než samotné měření. Platforma obvykle vyhodnocuje hodnoty za určité období, aby nereagovala na krátký výkyv. Bez stabilizačního okna by služba mohla oscilovat: přidat kapacitu, hned ji odebrat a za chvíli znovu přidat.

Horizontální, vertikální a plánované rozšíření

Horizontální škálování přidává další kopie stejné služby. Webová aplikace může běžet ve více kontejnerech a příchozí požadavky se rozdělí mezi ně. Právě tento model je běžný v Kubernetes, kde Horizontal Pod Autoscaler upravuje počet podů podle metrik.

Vertikální škálování mění velikost jednoho běžícího prostředku, například přidá instanci více paměti nebo procesorových jader. Vertikální přístup je užitečný u systémů, které nelze jednoduše rozdělit na mnoho kopií, ale často vyžaduje restart nebo má pevný strop. Plánované škálování reaguje na známý kalendář: kampaň, televizní reklamu, pravidelnou fakturaci nebo večerní špičku.

Limity, které nejdou vyřešit přidáním instancí

Automatické škálování nepřekoná úzké hrdlo, které zůstává sdílené. Databáze s pomalým dotazem, vyčerpaný connection pool, externí API s limitem nebo zámek v aplikaci mohou brzdit provoz i po přidání dalších instancí. V takové situaci může více workerů problém dokonce zhoršit, protože vytvoří větší tlak na stejný slabý bod.

Dobrá architektura proto kombinuje škálování s frontami, časovými limity, backpressure a měřením chyb. Kapacita navíc má chránit službu, ne maskovat nekonečný růst fronty.

Nastavení bez zbytečného rozhazování

Rozumné nastavení začíná minimem a maximem. Minimum drží službu připravenou, maximum chrání rozpočet i závislé systémy. Důležité jsou také zahřívací časy: nová instance může chvíli startovat, načítat cache nebo navazovat spojení, takže reakce nikdy není okamžitá.

Automatické škálování patří do provozního návrhu stejně jako monitoring a alerting. Pravidla se mají testovat při zátěžových zkouškách, protože běžné metriky z klidného provozu často neukážou, co se stane při náhlém nárůstu požadavků.

Příklady z praxe

  1. Kampaň v e-shopu

    E-shop spustí reklamní kampaň a počet požadavků na produktové stránky prudce vzroste. Kubernetes HPA sleduje využití CPU u webového deploymentu, postupně přidá další pody a load balancer na ně začne posílat část provozu. Po skončení kampaně se počet podů vrátí k nižší hodnotě, takže tým neplatí plnou kapacitu celý den.

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: web-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: web
      minReplicas: 3
      maxReplicas: 20
      metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 70
  2. Zpracování fronty faktur

    Aplikace importuje faktury z fronty zpráv a každý worker zapisuje výsledek do databáze. Automatické škálování přidá workery podle délky fronty, ale horní limit je nastavený tak, aby databáze nepřekročila bezpečný počet spojení. Fronta se odbaví rychleji, aniž by škálování shodilo sdílenou databázovou vrstvu.

Časté omyly

MýtusZapnu autoscaling a výkonové problémy zmizí.
Ve skutečnostiAutomatické škálování pomůže jen u zátěže, kterou lze rozdělit na další prostředky. Pomalý dotaz, sdílený zámek, limit externí služby nebo špatná cache se přidáním instancí samy neopraví.
MýtusČím kratší interval měření, tím lepší škálování.
Ve skutečnostiPříliš rychlá reakce může způsobit oscilaci a zbytečné náklady. Stabilizační období a vhodná agregace metrik často vedou k lepšímu provozu než okamžitá reakce na každý krátký výkyv.
MýtusAutomatické škálování znamená jen přidávání serverů.
Ve skutečnostiAutomatické škálování zahrnuje i odebírání kapacity, změnu velikosti prostředků nebo plánované navýšení před známou špičkou. Smyslem není mít co nejvíc instancí, ale držet kapacitu blízko skutečné potřebě.

Časté dotazy

Proč se při automatickém škálování někdy přidá kapacita pozdě?
Automatické škálování reaguje až po naměření problému nebo podle předem nastaveného plánu. Nová instance navíc potřebuje čas na spuštění, registraci v load balanceru, načtení konfigurace a zahřátí cache. Při velmi prudké špičce proto může část uživatelů krátce čekat nebo dostat chybu, pokud služba nemá dostatečné minimum, frontu nebo ochranné limity.
Může automatické škálování nahradit load balancer?
Automatické škálování load balancer nenahrazuje, protože řeší jinou část problému. Automatické škálování mění počet dostupných instancí, zatímco load balancer rozděluje požadavky mezi instance, které právě existují a jsou zdravé. U horizontálně škálované webové aplikace bývají obě technologie použité společně: škálování přidá kapacitu a load balancer ji začne využívat.
Kdy automatické škálování prodraží cloud?
Automatické škálování se prodraží, když pravidla reagují na šum, ne na skutečnou potřebu. Časté přidávání a odebírání instancí zvyšuje náklady, komplikuje diagnostiku a může zatěžovat závislé služby. Rizikem je také příliš vysoký maximální limit, špatně zvolená metrika nebo chyba v aplikaci, která vyvolá růst zátěže a tím i zbytečné přidávání kapacity.
Co musí být připravené před zapnutím automatického škálování?
Automatické škálování dává smysl až ve chvíli, kdy je služba měřitelná a opakovatelně nasaditelná. Pro začátek obvykle stačí znát běžnou zátěž, kritické metriky, startovací čas instance, horní limit rozpočtu a úzká hrdla závislostí. Bez monitoringu a alertingu se pravidla nastavují naslepo a provozní tým nepozná, jestli škálování skutečně pomáhá.

Zdroje

  1. Horizontal Pod Autoscaling(otevře se v novém okně)Kubernetes
  2. AWS Auto Scaling(otevře se v novém okně)Amazon Web Services
  3. Overview of autoscale in Microsoft Azure(otevře se v novém okně)Microsoft Learn
  4. Autoscaling groups of instances(otevře se v novém okně)Google Cloud

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.