Dostupnosť a škálovanie internetových aplikácií v cloude

4

Éra cloudu je tu, niet o tom pochýb.

Hlavné dôvody na vstup do cloudu – flexibilita a nižšie náklady, sa stávajú neodolateľnými, ale do popredia sa dostáva aj s cloudom súvisiaca dynamika a bezpečnosť.

Internetové aplikácie boli medzi úplne prvými, ktoré firmy či inštitúcie historicky do cloudu presúvali. Vyžadujú si totiž silné a stabilné pripojenie na internet, čo je klasická doména servisných cloudových poskytovateľov. Väčšina online aplikácií sa však stále stavia na klasickej jednoserverovej architektúre s obmedzenými možnosťami škálovania aj dostupnosti.

Tento článok hovorí o technických špecifikách prevádzky veľkých a vysokodostupných internetových aplikácií. Ponúka riešenie a návrh architektúry pre horizontálne škálované weby postavené na cloudovej platforme, ktoré dokážu uspokojiť aj tie najnáročnejšie prevádzkové požiadavky. Rýchle zmeny v podnikateľskom prostredí, dynamika internetu, ale aj množiace sa útoky na online infraštruktúru si vyžadujú práve takúto agilnú platformu.

Dve architektúry webov

Bežné weby sú prevádzkované na jednom serveri. Najekonomickejšia platforma v podobe štandardných webhostingových služieb stačí bežným webovým aplikáciám a malým, až stredne veľkým e-shopom. Tie online aplikácie, ktoré potrebujú silnejšie zdroje, sú typicky prevádzkované na vlastných virtuálnych či dedikovaných serveroch. Pokiaľ ale začne webová aplikácia narážať na limity jedného servera a je nutné, aby dosahovala vyšší výkon, je potrebné škálovať ju na viacero strojov.

Z pohľadu architektúry delíme webovské platformy na dva typy.

1. Monolitické (legacy/databázové aplikácie)

Ide o staršie a stále dominantné aplikácie, ktoré bežia na jednom serveri. V prípade vyšších nárokov na výkon sa ráta s navyšovaním zdrojov samotného servera, t.j. s vertikálnym škálovaním. V prípade fyzického servera to znamená komplikovaný hardvérový upgrade, v prípade virtuálneho servera minimálne krátky výpadok. Výkon aplikácie však vôbec nemusí rásť lineárne s množstvom zdrojov, ktoré k svojmu behu dostane. Niekedy môže byť tento nárast dokonca záporný, ako ukazuje obrázok, kde staršia verzia MySQL databázy po navýšení CPU zdrojov dokonca vykazuje pokles výkonu.

TelekomObr1_web2016_3_nowat

Dosiahnuť vysokú dostupnosť aplikácie je ešte náročnejšie ako ju škálovať, lebo aplikácia na to nie je typicky navrhnutá. Preto sa mnoho súvisiacej komplexnosti dá presunúť do cloudovej infraštruktúry, ktorá však, naopak nevie nič o aplikácii, ktorú prevádzkuje.

2. Cloud ready aplikácie

Tie sú navrhnuté na prevádzku v cloude. Ich úroveň abstrakcie je nižšia a sú im priznané rôzne detaily infraštruktúry. Cloud týmto aplikáciám dodá príslušné zdroje tak, aby ich aplikácia využila podľa vlastnej potreby. Celkový výkon aplikácie bežiacej na viacerých serveroch je potom upravovaný pridávaním, či uberaním serverov, nie však navyšovaním zdrojov v rámci samotných serverov.

Domáce zvieratá a dobytok

Z podobného pohľadu, ako delíme aplikácie na monolitické a cloudové, je možné rozdeliť aj samotné servery. Používa sa na to už dnes známe a aj zábavné delenie serverov na domáce zvieratá a dobytok:

  • Domáce zvieratá (pets) – majú meno a identitu (stav) a každý takýto server vyžaduje osobitnú starostlivosť. Aplikácia spustená na týchto serveroch nemôže bežať na iných serveroch, preto sú do istej miery výnimočné. Ich životný cyklus je typicky dlhý a musia byť zálohované, lebo sú jedinečné.
  • Dobytok (cattle) – sú hospodárske zvieratá, ktoré nemajú meno ani identitu, sú len číslom v stáde. Neustále vznikajú a zanikajú. Cloud ready aplikácie využívajú tieto servery na rýchle škálovanie, pretože tieto servery nemajú stav. Životný cyklus serverov je často krátky a sú generované podľa potreby. Nie je nutné ich ani jednotlivo zálohovať, pretože ich stačí len nanovo klonovať podľa šablóny. Táto vlastnosť umožňuje agilnú IT infraštruktúru, ktorá sa neustále mení podľa aktuálnych potrieb.

V praxi nie je bežné mať aplikačnú architektúru postavenú výlučne na pets, alebo cattle. Reálna infraštruktúra pod aplikáciou v dnešnej dobe obvykle obsahuje ich kombináciu.

Automatizácia

Moderná schopnosť cloudu získavať rôzne IT zdroje cez jednotné rozhranie má dôsledok aj v tom, že dnes je možne dodávať IT infraštruktúru softvérovo. To znamená, že jej popis je definovaný v predpise, ktorý hovorí o tom, ako má vyzerať. Servery, siete a iné zdroje sa tak stávajú prvkami programovacieho jazyka.

Prevádzkové požiadavky sa v modernej dobe menia extrémne rýchlo, situácia môže byť iná zo dňa na deň. Preto agilná infraštruktúra nemôže vzniknúť bez automatizovaného konfiguračného manažmentu. Je už nereálne servery konfigurovať ručne a zmeny zapisovať do dokumentov. Známe sú nástroje ako Puppet, alebo Chef, obľúbeným sa stáva napríklad Ansible.

Úlohou konfiguračného manažmentu je zavádzať do systému zmeny a udržiavať ich konzistentné. Výhodou automatizovanej správy je aj to, že je možné reprodukovať tú istú infraštruktúru tak často, ako je nutné. Mnohé virtualizačné riešenia umožňujú beh viacerých prostredí s tými istými IP adresami, takže je možné vytvoriť identické IT infraštruktúry pre rôzne, napríklad testovacie účely. Po štarte nového prostredia sa naštartuje aj nástroj konfiguračného manažmentu, ktorý už zvyšok čerstvo vytvoreného systému nakonfiguruje podľa predpisu.

Typická web architektúra

TelekomObr2_web2016_3_nowat

Skupiny serverov

V architektúre náročnej webovej aplikácie sa často používa otvorený softvér, ktorý je často na väčšej škále efektívnejší ako komerčné riešenia. V priereze webovej infraštruktúry rozlišujeme nasledujúce vrstvy:

Prezenčná vrstva (bezstavová)

Prezenčná vrstva je skupina serverov, ktorá je najbližšie k používateľovi a ktorá prezentuje dáta z aplikačného servera. Typicky obsahuje nasledovné funkcie:

  • komunikácia cez protokoly HTTP, SPDY, HTTP/2
  • ukončovanie HTTPS spojenia, vo vnútornej sieti sa používa už len HTTP
  • kompresia
  • aplikačný firewall pre odfiltrovanie nevhodných požiadaviek smerom na aplikáciu
  • poskytovanie statického obsahu
  • cachovanie statického obsahu
  • smerovanie požiadaviek na konkrétnu skupinu aplikačných serverov
  • rozkladanie záťaže
  • v prípade nedostupnosti aplikačného servera nasmerovanie požiadavky na iný funkčný server
  • v prípade zlyhania spracovania požiadavky preposlanie na iný aplikačný server

Od týchto load balancerov požadujeme, aby boli schopné zvládnuť čo najviac HTTP spojení, čím dosiahneme plynulejšiu odozvu pre používateľa a zároveň aj odolnosť pred niektorými typmi útokov.

Na tejto vrstve je dobré poskytovať statický obsah, ako sú obrázky alebo iné prvky webstránky, ktoré sa negenerujú dynamicky. Každú požiadavku, ktorú odchytíme na tejto vrstve, už nie je nutné spracovať na backende, kde to trvá dlhší čas. Na tejto vrstve sa aj často cachuje obsah z backendu, aby sa nemusel spracovávať znova. Cachovanie sa typicky robí do RAM alebo na SSD disky. Typickými predstaviteľmi týchto load balancerov sú softvéry ako nginx alebo varnish. Úlohou load balanceru je zaistiť aj istú mieru bezpečnosti. Môže odchytávať niektoré nebezpečné požiadavky, ktoré majú snahu kompromitovať systém.

Aplikačná vrstva (bezstavová)

Vrstva aplikačných serverov má za úlohu spracovať požiadavku prichádzajúcu z load balancerov v jazyku webovej aplikácie ako napríklad PHP, či Ruby.

Súbory aplikácie bývajú dostupné cez sieťový distribuovaný súborový systém, takže z každého servera sú viditeľné tie isté dáta. Pokiaľ aplikačných dát nie je veľa, je možné ich mať uložené priamo aj na každom aplikačnom serveri.

Aplikačný server poskytne obsah v súčinnosti s backendom spať klientovi cez load balancer, pričom sa stará aj o cachovanie obsahu tak, aby nebolo nutné obsah nanovo generovať a tým šetrí zdroje, resp. zvyšuje počet spracovateľných požiadaviek.

Backend vrstva (stavová)

Backend je vrstva, v ktorej už musíme držať stav, napríklad používateľa alebo konkrétne súbory. Backendom sa môže rozumieť:

databázový server – klasický relačný server (MySQL, Oracle, PostgreSQL, či iný), ktorý obsahuje dáta používateľov

storage server – kde sú uložené dáta, ktoré sú cez niektorý sieťový protokol sprístupnené na load balanceroch a aplikačných serveroch

NoSQL databázy – veľmi rýchle databázy ktoré umožňujú ukladať dáta vo formáte kľúč=hodnota priamo v RAM. Typickým predstaviteľom je Redis alebo Memcached. Zvyknú sa sem ukladať medzivýsledky, alebo rovno celé výsledky po spracovaní aplikačným serverom, alebo výstupy z databázového servera, čím poskytnú rýchlu reakciu.

Spoločným znakom databázových a storage serverov je ich pomerne vysoká náročnosť pri vysoko dostupných riešeniach, pri ich škálovaní a správe, pretože tieto vlastnosti nemusia byť implementované v protokole, ktorým sa dorozumievajú.

To sa snažia vyriešiť nové riešenia v podobe nových moderných distribuovaných súborových systémov alebo nového typu databáz ako NoSQL. Tieto riešenia rátajú s tým, že môžu byť prevádzkované na škále a s výpadkami serverov, preto tieto situácie riešia na úrovni knižníc, ktoré využíva webová aplikácia.

Záver

Doba cloudu so sebou prináša nové prevratné možnosti v spôsobe, akým sú veľké a dôležité weby stavané, vyvíjané a spravované. Je nepopierateľné, že architektúra monolitických aplikácií postavených na jednom serveri nevyhovuje súčasným požiadavkám na silnú, dynamickú a bezpečnú online prítomnosť. Preto je potrebné spoznať a zvažovať horizontálne škálovateľnú a vysoko dostupnú cloudovú platformu na prevádzku online aplikácií, ktorá je naviac automaticky inštalovaná a konfigurovaná. Len tak budete pripravení stavať online aplikácie vhodné do 21. storočia.

Tomáš Čorej, Miroslav Pikus, Slovak Telekom

Tento článok vyšiel aj v tlačenom májovom vydaní TOUCHIT č. 4/2016, preto sa niektoré skutočnosti uvedené v článku, môžu odlišovať oproti aktuálnemu dátumu publikovania.

O autorovi

Máme radi najnovšie technológie a žijeme s nimi. Prinášame informácie o najnovších produktoch a technológiách priamo k vám, objektívne a ľudsky, pretože robíme to, čo nás baví. Sme energický tím plný odhodlania a veríme, že je s nami aj sranda. :)