Cloud computing: Jiný pohled na aplikace

V dalším článku na téma Cloud computing se vrátíme opět trochu k teorii. Jak se cloud liší od běžných virtuálních serverů či hostingů, a to nejen po stránce obchodní či technické, ale i po stránce přístupu k vývoji aplikací? Na co je třeba při vývoji pro cloud dávat pozor? To vše se dočtete v článku.

Seriál: Cloud computing prakticky (4 díly)

  1. Cloud hosting: Spouštíme vlastní virtuální server 5.6.2009
  2. Cloud computing: Jiný pohled na aplikace 3.7.2009
  3. S3: hostujeme statický web v cloudu během pěti minut 21.2.2011
  4. App Engine: statický web za deset minut i s hostingem u Google zdarma 23.5.2011

Když jsem v minulém článku popisoval možnosti jednoho z cloudů (Rackspace Cloud), tak mi několik čtenářů v komentářích vyčinilo, že jsem skočil Rackspace na lep, že vlastně nejde o nic jiného než o obyčejný VPS, který byl pouze „olepen“ módním štítkem Cloud, a že je to tedy prachsprostý marketingový trik pro věci neznalé laiky.

Taková tvrzení jsou ukázkou neporozumění. Proto dovolte, abych udělal v seriálu drobnou zastávku a znovu připomněl, jak se cloud liší od běžného hostingu či od VPS. Ti, co četli stručný úvod do problematiky na Zdrojáku (Cloud hosting aneb hosting v oblacích), mohou následující část přeskočit.

Cloud versus VPS

Pod termín cloud je v poslední době zahrnováno leccos, často i věci a techniky, které s cloudem nemají nic společného. Asi nejpřesnější českou definici cloudu formuloval Jan Kodera:

Cloud computing označuje souhrnně technologie a postupy používané v datových centrech a firmách pro zajištění snadné škálovatelnosti aplikací dodávaných přes Internet.

Z této definice nemusí být jasně vidět, v čem se liší cloud od, například, VPS, tedy služby pronájmu virtuálního serveru. Na první pohled si mohou být poskytované služby podobné, minimálně z pohledu zákazníka: Někde má vlastní „čistý“ server, má k němu přístup přes SSH, může si nainstalovat vlastní software, a přitom nejde o konkrétní fyzický stroj, ale o virtualizovanou instanci OS. Z tohoto úhlu pohledu se cloud od VPS moc neliší.

Odlišnost je právě v tom, co je zdůrazněno v oné výše uvedené definici: Cloud podporuje snadné škálování – a to nejen škálování výkonu, kdy lze za běhu zvyšovat či snižovat výkon, ale i prostoru či dalších prostředků. U VPS vám poskytovatel vytvoří vlastní virtuální server s předem smluvenými parametry. Pokud je chcete za chodu změnit, nebývá to triviální. Můžete si relativně snadno zvýšit či snížit např. velikost operační paměti, ale pokud přijdete s tím, že potřebujete nárazově stonásobný prostor na disku, nebo že chcete na tři dny zvednout výkon na dvacetinásobek, bude s tím pravděpodobně problém.

U cloudu je důraz kladen právě na snadné přizpůsobení parametrů. Můžete se na cloud dívat jako na neomezeně výkonný server, z něhož si vezmete tolik, kolik právě potřebujete a tehdy, kdy potřebujete. Navíc platíte pouze za skutečně využitý výkon, čas, prostor, služby… Nemusíte si tak kvůli  např. každoměsíčním nárazům pořizovat předimenzovaný ta­rif.

Ano, není to nic nového pod sluncem – koncept pronájmu strojového času pochází už z dob úsvitu počítačů. Přesto však nelze říct, že cloud je jen jiné slovo pro pronájem strojového času.

Jiný model, jiný přístup

Cloudy ve snaze zajistit co nejlepší škálovatelnost pozměňují i známý klasický model webových serverů. V té nejjednodušší podobě běží u klasického hostingu na jednom stroji http server, databáze i vlastní výkonné skripty. U náročnějších aplikací bývá oddělena  databáze na vlastním stroji, někdy mívá vlastní stroj (či více strojů) například media server… V praxi to přináší nutnost pronájmu většího počtu patřičně dimenzovaných počítačů.

U cloudů je podobné „rozdrobení“ spíš pravidlem. Poskytované služby bývají rozděleny minimálně na „virtuální server“ a „datové úložiště“, k nimž bývají přidány další služby – například jednoduché databáze, load balancery či jiné specializované služby.

Cloud GoGrid

Toto rozdělení z podstaty vyzývá k trochu jinému pohledu na vytváření aplikací – od „skriptocentric­kého“, při němž je v centru dění výkonný skript, který se stará o data i o jejich prezentaci uživatelům, k „datacentrickému“, kde jsou nejdůležitější data, a vlastní skripty, které s nimi „na uživatelův požadavek“ pracují, jsou jakoby v pozadí.

Popišme si rozdíl na příkladu ze světa blogů. Jednoduchý blogovací systém poskytuje jednak redakční rozhraní, v němž jsou vkládány články do databáze, a pak vlastní zobrazovací engine, který při požadavku na určitou stránku vezme data z databáze a vytvoří z nich podle šablony HTML kód. Takto může fungovat jednouživatelský systém s relativně malou návštěvností. Pokud vytváříme systém s obrovskou návštěvností a s mnoha uživateli, brzy zjistíme, že narážíme na výkonnostní limity. První optimalizační krok tak bude nejspíš zavedení stránkové cache. Druhým krokem pak bude předgenerování stránek při vložení nového článku. Pak se nabízí logické pokračování: Při vložení článku zavolat skript, který připraví výslednou stránku a uloží ji na oddělený server, určený pouze pro distribuci obsahu. Obsah tak může být distribuován optimalizovaným http serverem (který např. nemusí vůbec umět aktivní skriptování) a výkonnému jádru klesne zátěž, kterou způsobovalo distribuování obsahu.

Toto oddělení dat od výkonné aplikace například vysvětluje, proč cloudy nabízejí virtuální servery s udávanou kapacitou HDD v řádu jednotek či desítek GB – u cloudu totiž virtuální server nemusí udržovat statické stránky pro webserver ani veškerá data v nějaké lokální SQL databázi.

Cloud z pohledu vývojáře

Pro určité aplikace je použití cloudu opravdu na místě. Ovšem pokud na cloud aplikujeme „mechanicky“ stejné postupy jako na klasický hosting, dedikovaný server či VPS, může se snadno stát, že výsledek nebude odpovídat očekávání. Při vytváření aplikace pro cloud je dobré se zamyslet, uhnout ze zaběhnutých kolejí vývoje webových aplikací a podívat se na problém cloudovýma očima.

Pokud vývojář nerespektuje specifika cloudu, snadno se pak setká s tím, že aplikace neškáluje tak, jak si představoval, že ji vysoká zátěž shodí a že navíc provozovatel platí nehorázně velké peníze za spotřebovaný výkon, který ovšem není vidět. Proberme si některé zásady, které je dobré dodržovat (a těm, kterým budou připadat příliš samozřejmé, se předem omlouvám):

Používejte cache. Co můžete, to si ukládejte do cache. Práce virtuálního serveru je mnohem dražší než prostor v úložišti a distribuce dat.

Ukládejte cache na disk, ne do databáze. Pokud si do cache uložíte hotové stránky, můžete je distribuovat rovnou, bez zásahu řídicích skriptů. Když si je uložíte do úložiště, budou distribuovány s minimální režií. Pokud si je uložíte do databáze, budete muset při každém požadavku spouštět skript a přistupovat do databáze.

Generujte cache podle požadavků. Nechat vygenerovat data do cache například „jednou za hodinu“ zní možná lákavě, ale není to dobré řešení. Mnohem lepší je generovat obsah pouze tehdy, když se něco změní.

Neblokujte sami sebe. Není nic snazšího, než přistupovat k datům majetnicky – při každém přístupu zamknout vše, co jde, vyhradit si zdroje pro sebe a na konci operace zase odemknout. Pokud není takový přístup opravdu neoddiskutovatelně nutný, snažte se mu vyhnout. Představte si, že jednou bude váš projekt slavný, a místo jednoho virtuálního serveru jich poběží deset, a všechny budou dělat nějakou drobnou operaci s daty v jednu chvíli. Klasickým případem blokování je např. zápis do souboru, který je zároveň distribuován uživatelům. Buď si skript zamkne soubor pro čtení i zápis, a klienti tak budou muset čekat, nebo zamkne jen zápis, a pak se snadno stane, že klient dostane neúplný soubor. Přitom zrovna v tomto případě není třeba vymýšlet nějaké složité zámky či mechanismy – stačí zapsat data do pracovního souboru (soubor.html.tmp) a ten po skončení zápisu přejmenovat. Přejmenování souboru (a smazání starého) je u cloudových datových úložišť atomická operace, při níž k blokování nedochází.

Protentokrát nezbylo místo na nějaký praktický příklad ze světa cloudů, ale i tak doufám, že toto teoretické intermezzo bylo zajímavé a užitečné a že ubude hlasů, které považují cloudy za pouhé VPS s přidaným mediálním humbukem.

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Komentáře: 20

Přehled komentářů

Borek Bernard Rozdíl
Martin Malý Re: Rozdíl
Borek Bernard Re: Rozdíl
Borek Bernard Re: Rozdíl
Martin Malý Re: Rozdíl
Borek Bernard Re: Rozdíl
Martin Malý Re: Rozdíl
Jan Kodera Re: Rozdíl
Borek Bernard Re: Rozdíl
Michal Úložiště
Jan Kodera Re: Úložiště
Ladislav Thon Re: Úložiště
Petr Cache
Martin Malý Re: Cache
b*d Re: Cache
Tomas Re: Cache [web přiklad]
Tomas Re: Cache [web přiklad]
Mastodont Jazyková
Martin Malý Re: Jazyková
Tonda OnLive
Zdroj: https://www.zdrojak.cz/?p=3044