Miroslav Holec

Software & Cloud Architect

miroslavholec.cz / blog / horizontalni-skalovani-aplikaci

Horizonální škálování aplikací

Miroslav Holec

Miroslav Holec

Publikován 26. září 2014 , aktualizace: 29. března 2016

Tento článek je starší 18 měsíců a je proto možné, že popisuje postupy nebo technologie, které v uplynulé době mohly doznat výraznějších změn. Názory a myšlenky v tomto článku již nemusí vyjadřovat současné stanovisko autora nebo autorů. Článek byl napsán 26. září 2014.

Poslední dobou se o škálování aplikací mluví stále více. Díky cloudovým službám je realizace škálování v celku jednoduchá a při minimálním úsilí lze aplikaci uzpůsobit tak, aby byla schopná běžet na webové farmě. Mluvíme o horizontálním škálování, kdy přidáváme instance na kterých naše aplikace běží. Proč je tento přístup často prohnilý?

Nedostatečný výkon jedné instance

Obvykle je epicentrem problému špatně napsaná aplikace. Obecným chybně pochopeným paradigmatem je "nemá smysl předčasně optimalizovat aplikaci". To je smysluplné rčení za předpokladu, že stavíme službu, o které nejsme vůbec schopni říct, jak bude zatížena. Co když stavíme službu pro český trh a nějakou úzkou skupinu uživatelů? Už v tomto modelovém případě si nedovedu představit příklad aplikace, která by potřebovala horizontální škálování z důvodu výkonnosti. Pokud vyvíjíme produkt, který bude vystaven enormní zátěži, máme dvě možnosti:

1. Odložit optimalizaci

Tudíž vsadíme na rychlost vývoje, ušetříme pár korun abychom měli rychle hotový produkt. Ten je neoptimální a v kritický moment, kdy se dostane pod zátěž buď začneme horizontálně škálovat (a utrácet dvojnásobek prostředků za další instance), nebo přepíšeme aplikaci tak, aby byla schopna obsloužit všechny požadavky (což nás bude stát také další prostředky, které jsme už mohli vynaložit v minulosti bez litrů tekoucí krve).

2. Napsat optimální kód

Další možností je nepodcenit analýzu a každou vrstvu aplikace optimalizovat s rozumem tak, aby byla aplikace schopná obsloužit co nejvíce požadavků. Faktem je, že kritických míst, která se dají optimalizovat a způsobů jak docílit optimálních výsledků je neskutečné množství. Některé jsou méně nákladné a jiné více. Z mé zkušenosti vím, že se vyplatí věnovat co nejvíce času analýze a následně návrhu flexibilní architektury.

Teprve když už nemůžeme optimalizovat aplikaci pro jednu instanci, začínáme škálovat. Jak?

Nejprve vertikálně

Vždy, když už stroj nezvládá, je ideální zamyslet se, zda není lepší dokoupit nové prostředky (operační paměť / cpu) než hned horizontálně škálovat. V případě cloudu je stejně tak snazší přejít na výkonnější stroj než spouštět další instanci. Představa, že "máme aplikaci, která je brutálně vytížená" bude spíše po odložení růžových brýlí "máme aplikaci, která je brutálně špatně napsaná".

Horizontální škálování

Nechci ale horizontální škálování zatracovat. Naopak jsem přesvědčen, že aplikace by měla být od počátku napsaná pro podporu horizontálního škálování a měla by být připravena kdykoliv na tento režim přejít. Třeba jen krátkodobě nebo nárazově ve stanovených špičkách. Horizontální škálování je totiž nejefektivnější v momentě, když dochází k neočekávané zátěži nebo když potřebujeme zvýšit dostupnost, kdy jedna instance není dostupná. Speciálně pokud patříme do skupiny projektů, které podléhají výraznějším sezónním trendům, je možnost horizontálně škálovat nepostradatelná. Nejen, že tak zvyšujeme adekvátně dostupnost ale také platíme rozumný peníz formou "zaplať za to, co právě používáš".

Závěr

Snažíme se maximálně optimalizovat aplikaci aby byla schopná běžet na jedné levné instanci. Vyždímeme z ní maximum. Raději utratit pár korun za vývoj optimálního kódu než později dlouhodobě vynakládat finanční prostředky za drahé stroje nebo webovou farmu. Pozvolný nárůst zátěže řešíme optimalizací kritických míst, případně vertikálním škálováním a pro výraznější výkyvy, trendové změny nebo zajištěni vysoké dostupnosti použijeme škálování horizontální.

Potřebujete pomoci?

Líbil se Vám článek? Máte dotaz nebo chcete v této oblasti s něčím pomoci? Neváhejte se na mě obrátit.

mirek@miroslavholec.cz

  • Řešení vývojářských problémů
  • Konzultace
  • Firemní školení a workshopy