Důležitost škálovatelnosti při návrhu softwaru
Škálovatelnost je nezbytnou součástí podnikového softwaru. Její upřednostnění od samého počátku vede ke snížení nákladů na údržbu, lepšímu uživatelskému komfortu a vyšší agilitě.
Návrh softwaru je balancování, při kterém se vývojáři snaží vytvořit co nejlepší produkt v rámci časových a rozpočtových omezení klienta.
Nejde se vyhnout nutnosti kompromisů. Aby byly splněny požadavky projektu, ať už technické, nebo finanční, je třeba dělat kompromisy.
Příliš často však firmy upřednostňují náklady před škálovatelností, nebo její význam dokonce zcela odmítají. To je bohužel běžné u iniciativ v oblasti velkých dat, kde problémy se škálovatelností mohou potopit slibný projekt.
Škálovatelnost není „bonusová funkce“. Je to kvalita, která určuje celoživotní hodnotu softwaru, a budování s ohledem na škálovatelnost dlouhodobě šetří čas i peníze.
Co je to škálovatelnost?
Systém je považován za škálovatelný, pokud jej není třeba přepracovávat, aby si udržel efektivní výkon během prudkého nárůstu pracovní zátěže nebo po něm.
„Pracovní zátěž“ se může týkat současných uživatelů, kapacity úložiště, maximálního počtu zpracovávaných transakcí nebo čehokoli jiného, co posouvá systém nad jeho původní kapacitu.
Škálovatelnost není základním požadavkem na program v tom smyslu, že neškálovatelný software může dobře fungovat s omezenou kapacitou.
Odráží však schopnost softwaru růst nebo se měnit s požadavky uživatelů.
Každý software, který se může rozšířit za hranice svých základních funkcí – zejména pokud na jeho růstu závisí obchodní model – by měl být nakonfigurován tak, aby byl škálovatelný.
Přínosy škálovatelného softwaru
Škálovatelnost má dlouhodobé i krátkodobé výhody.
Na začátku umožňuje společnosti zakoupit pouze to, co okamžitě potřebuje, a ne všechny funkce, které by mohly být užitečné v budoucnu.
Například společnost, která spouští pilotní program datové inteligence, může zvolit rozsáhlý balík podnikové analytiky, nebo může začít s řešením, které zpočátku zvládá pouze funkce, které potřebuje.
Oblíbenou volbou je dashboard, který čerpá výsledky z jejich primárních zdrojů dat a stávajícího podnikového softwaru.
Když se rozrostou natolik, že budou používat více analytických programů, mohou být tyto datové toky přidány do dashboardu, místo aby byla společnost nucena žonglovat s několika vizualizačními programy nebo budovat zcela nový systém.
Tento způsob budování připravuje na budoucí růst a zároveň vytváří štíhlejší produkt, který vyhovuje současným potřebám bez dodatečné složitosti.
Vyžaduje také nižší počáteční finanční náklady, což je důležitý faktor pro vedoucí pracovníky, kteří se obávají velikosti investic do velkých dat.
Škálovatelnost také ponechává prostor pro změnu priorit. Takový hotový analytický balík by mohl ztratit význam, jakmile se společnost změní, aby vyhověla požadavkům vyvíjejícího se trhu.
Výběr škálovatelných řešení chrání počáteční investice do technologie. Podniky mohou déle používat stejný software, protože byl navržen tak, aby rostl spolu s nimi.
Když přijde čas na změnu, stavět na solidním, škálovatelném softwaru je podstatně levnější než se snažit přizpůsobit méně agilní programy.
K zavedení nových funkcí do provozu je také kratší doba „náběhu“ než k implementaci zcela nového softwaru.
Další výhodou je, že zaměstnanci nebudou potřebovat mnoho školení ani přesvědčování, aby tento modernizovaný systém přijali. Jsou již obeznámeni s rozhraním, takže práci s dalšími funkcemi vnímají spíše jako bonus než jako povinnost.
Důsledky selhání při škálování
Takže, co se stane, když software není škálovatelný?
Na začátku je slabinu těžké odhalit. V počátečních fázích aplikace je pracovní zátěž malá. Při relativně malém počtu současně pracujících uživatelů nejsou na architekturu kladeny velké nároky.
Když se zátěž zvýší, nastanou problémy. Čím více ukládaných dat nebo simultánních uživatelů software shromažďuje, tím větší je zátěž na architekturu softwaru.
Omezení, která se na začátku nezdála důležitá, se stávají překážkou produktivity. Záplaty mohou zmírnit některé z počátečních problémů, ale záplaty zvyšují složitost.
Složitost způsobuje, že průběžná diagnostika problémů je zdlouhavější (v překladu: dražší a méně efektivní).
Jakmile pracovní zátěž překročí schopnost softwaru škálovat, výkon klesá.
Uživatelé zažívají pomalé načítání, protože serveru trvá příliš dlouho, než odpoví na požadavky. Mezi další možné problémy patří snížená dostupnost nebo dokonce ztráta dat.
To vše odrazuje od dalšího používání. Zaměstnanci budou hledat obcházení nespolehlivého softwaru, aby mohli vykonávat svou vlastní práci.
Tím se společnost vystavuje riziku úniku dat nebo něčemu horšímu.
Pokud je software určen pro zákazníky, nespolehlivost zvyšuje možnost odchodu.
Google zjistil, že 61 % uživatelů nedá aplikaci druhou šanci, pokud měli špatnou první zkušenost. Místo toho 40 % z nich přejde rovnou ke konkurenčnímu produktu.
Problémy se škálovatelností nejsou jen začátečnickou chybou malých firem. Dokonce i společnost Disney se dostala do potíží při původním spuštění své aplikace Applause, která měla divákům poskytnout další způsob interakce s oblíbenými pořady společnosti Disney. Aplikace nezvládla příval uživatelů, kteří současně streamovali video.
Frustrovaní fanoušci zanechávali negativní hodnocení, až měla aplikace v obchodě Google Play jedinou hvězdičku. Představitelé společnosti Disney museli aplikaci stáhnout, aby napravili škody, a negativní publicita byla tak intenzivní, že už se nikdy nevrátila online.
Stanovení priorit
Některé podniky nedokážou stanovit prioritu škálovatelnosti, protože nevidí její okamžitou užitečnost.
Škálovatelnost se odsouvá stranou ve prospěch rychlosti, kratších vývojových cyklů nebo nižších nákladů.
V některých případech skutečně škálovatelnost není hlavní prioritou.
Software, který má být prototypem nebo nízkoobjemovým ověřením konceptu, se nestane natolik velkým, aby způsobil problémy.
Podobně interní software pro malé společnosti s nízkou pevnou hranicí potenciálních uživatelů může stanovit jiné priority.
Koneckonců, když je shoda s ACID naprosto povinná, škálovatelnost ustupuje do pozadí před spolehlivostí.
Je však obecným pravidlem, že škálovatelnost je jednodušší a méně náročná na zdroje, pokud se o ní uvažuje od začátku.
Na škálovatelnost má totiž velký vliv výběr databáze. Migrace na novou databázi je nákladná a časově náročná. Není to něco, co lze snadno provést později.
Principy škálovatelnosti
Na celkovou škálovatelnost softwaru má vliv několik faktorů:
Využití
Využití měří počet možných současných uživatelů nebo připojení. Využití by nemělo být uměle omezeno.
Zvýšení by mělo být stejně jednoduché jako zpřístupnění více zdrojů softwaru.
Maximální množství uložených dat
To je důležité zejména u webů, které obsahují velké množství nestrukturovaných dat: obsah nahraný uživateli, zprávy o webu a některé typy marketingových dat.
Datové projekty do této kategorie také spadají. Množství dat uložených u těchto typů obsahu může dramaticky a nečekaně narůst.
Zda lze maximum uložených dat rychle škálovat, závisí do značné míry na stylu databáze (servery SQL vs. NoSQL), ale je také důležité věnovat pozornost správnému indexování.
Kód
Nezkušení vývojáři mají tendenci při plánování škálovatelnosti přehlížet úvahy o kódu.
Kód by měl být napsán tak, aby jej bylo možné přidávat nebo upravovat bez refaktorizace starého kódu. Dobří vývojáři se snaží vyhnout zdvojování úsilí, čímž snižují celkovou velikost a složitost kódové základny.
Aplikace se při svém vývoji zvětšují, ale udržování čistého kódu tento efekt minimalizuje a zabraňuje vzniku „špagetového kódu“.
Scaling Out Vs Scaling Up
Scaling up (nebo „vertikální škálování“) zahrnuje růst pomocí pokročilejšího nebo silnějšího hardwaru. Ke zvládnutí zvýšené zátěže se využívá diskový prostor nebo rychlejší centrální procesorová jednotka (CPU).
Scaling up nabízí vyšší výkon než scaling out. Vše je obsaženo na jednom místě, což umožňuje rychlejší návratnost a menší zranitelnost.
Problém se škálováním nahoru spočívá v tom, že je k dispozici pouze určitý prostor pro růst. Hardware je tím dražší, čím je pokročilejší. V určitém okamžiku podniky narazí na zákon klesající návratnosti nákupu pokročilých systémů.
Na implementaci nového hardwaru je také potřeba čas.
Vzhledem k těmto omezením není vertikální škálování nejlepším řešením pro software, který potřebuje rychle a s malým předstihem růst.
Škálování směrem ven (neboli „horizontální škálování“) je pro podnikové účely mnohem rozšířenější.
Při škálování směrem ven roste software tím, že se používá více – nikoliv modernější – hardwaru a zvýšená pracovní zátěž se rozloží na novou infrastrukturu.
Náklady jsou nižší, protože další servery nebo procesory mohou být stejného typu, jaký se používá v současné době (nebo jakýkoliv kompatibilní typ).
Škálování probíhá také rychleji, protože se nemusí nic importovat nebo přestavovat.
Je zde však mírný kompromis v rychlosti. Horizontálně škálovaný software je omezen rychlostí, s jakou mohou servery komunikovat.
Rozdíl však není tak velký, aby si ho většina uživatelů všimla, a existují nástroje, které vývojářům pomáhají tento efekt minimalizovat. V důsledku toho je škálování ven považováno za lepší řešení při vytváření škálovatelných aplikací.
Pokyny pro vytváření vysoce škálovatelných systémů
Zvážit škálovatelnost ve fázi plánování je levnější i jednodušší. Zde je několik osvědčených postupů pro začlenění škálovatelnosti od samého začátku:
Používejte software pro vyrovnávání zátěže
Software pro vyrovnávání zátěže je klíčový pro systémy s distribuovanou infrastrukturou (jako jsou horizontálně škálované aplikace).
Tento software používá algoritmus pro rozložení pracovní zátěže mezi servery, aby se zajistilo, že žádný server nebude přetížen. Je to naprostá nutnost, abyste se vyhnuli problémům s výkonem.
Na umístění záleží
Škálovatelný software toho dělá co nejvíce v blízkosti klienta (ve vrstvě aplikace). Snížení počtu případů, kdy aplikace musí procházet náročnějším provozem v blízkosti jaderných zdrojů, vede k vyšší rychlosti a menšímu zatížení serverů.
Edge computing je něco jiného, co je třeba zvážit. S přibývajícím počtem aplikací, které vyžadují aplikace náročné na zdroje, snižuje udržování co největšího množství práce v zařízení dopad oblastí se slabým signálem a zpožděním sítě.
Pokud je to možné, ukládejte do mezipaměti
Buďte si vědomi obav o bezpečnost, ale ukládání do mezipaměti je dobrý způsob, jak zabránit tomu, abyste museli provádět stejnou úlohu stále dokola.
Vedení pomocí API
Uživatelé se připojují prostřednictvím různých klientů, takže vedení pomocí API, které nepředpokládá konkrétní typ klienta, může sloužit všem z nich.
Asynchronní zpracování
Oznamuje procesy, které jsou rozděleny do samostatných kroků, které před zpracováním nemusí čekat na dokončení předchozího.
Například uživateli se může zobrazit zpráva „odesláno!“ oznámení, zatímco e-mail je stále technicky zpracováván.
Asynchronní zpracování odstraňuje některá úzká místa, která ovlivňují výkon rozsáhlého softwaru.
Omezte souběžný přístup k omezeným zdrojům
Neduplikujte úsilí. Pokud více požadavků požaduje stejný výpočet ze stejného prostředku, nechte první dokončit a použijte pouze tento výsledek. To zvyšuje rychlost a zároveň snižuje zátěž systému.
Používejte škálovatelnou databázi
Databáze typu NoSQL bývají škálovatelnější než SQL. SQL škáluje operace čtení dostatečně dobře, ale pokud jde o operace zápisu, je v rozporu s omezeními určenými k prosazení zásad ACID.
Škálování NoSQL vyžaduje méně přísné dodržování těchto zásad, takže pokud není dodržení zásad ACID problémem, může být databáze NoSQL správnou volbou.
Zvažte řešení PaaS
Platforma jako služba ulehčuje mnoho problémů se škálovatelností, protože poskytovatel PaaS řídí škálování. Škálování může být stejně snadné jako zvýšení úrovně předplatného.
Podívejte se na FaaS
Funkce jako služba se vyvinula z PaaS a velmi úzce s ní souvisí. Serverless computing poskytuje způsob, jak používat pouze funkce, které jsou v daném okamžiku potřeba, a snižuje tak zbytečné nároky na back-endovou infrastrukturu.
FaaS stále dozrává, ale mohlo by stát za to se jí zabývat jako způsobem, jak snížit provozní náklady a zároveň zlepšit škálovatelnost.
Nezapomínejte na údržbu
Nastavte software na automatizované testování a údržbu, aby se vám při jeho růstu nevymkla z rukou práce s jeho údržbou.
Stavte s ohledem na budoucnost
Priorita škálovatelnosti připraví váš podnik na úspěch. Zvažte ji včas a budete sklízet ovoce v podobě agility, až ji budete nejvíce potřebovat.
Hledáte software, který může růst spolu s vaší firmou? Sjednejte si bezplatnou schůzku s některým z našich vývojářů a promluvte si o tom, kam se potřebujete dostat a jak vás tam můžeme dostat!