nav line

Architektura a provoz webových aplikací v prostředí cloudu (1. část)

Cloudové platformy se stále více prosazují jako běhové prostředí pro webové aplikace. Jaké výhody oproti tradiční „on-premise“ běhové infrastruktuře či webhostingu přináší cloud poskytovatelům a provozovatelům webových řešení? A jaké nové možnosti vnáší cloud do architektury webových systémů na tradiční technologii LAMP (Linux/Apache/MySQL/PHP) z pohledu webového integrátora? Nejen na tyto otázky se odpoví první díl malého seriálu.

Virtualizace jako stavební základ cloudu

V minulém desetiletí jsme byli v oblasti IT svědky pozvolného, ale stále významnějšího prosazování počítačové virtualizace v serverovém a později i desktopovém prostředí. Na první, nepříliš výkonné serverové hypervizory1 založené na plné virtualizaci hardwarových prostředků vč. procesoru, navázala revoluce spočívající v implementaci podpory pro virtualizaci přímo na úrovni procesorů, což zásadním způsobem zlepšilo výkon virtualizovaných systémů, jejichž provozní režie se snížila z desítek na jednotky procent výkonu hostitelského procesoru. To společně s vylepšením koncepce virtualizace periferií ve formě ovladačů úzce spolupracujících s hostitelským systémem umožnilo masivní nástup virtualizace v širokém měřítku – jak v on-premise2 prostředí firem disponujících vlastní serverovou infrastrukturou, tak mezi poskytovateli infrastruktury nabízejícími ji na bázi pronájmu. Z této původně on-demand3 poskytované nabídky virtualizovaných systémů se postupně vyvinuly komplexní cloudové platformy se širokým portfoliem služeb pro běh aplikací. Mezi nejznámější cloudové platformy patří Amazon Web Services (AWS) a Microsoft Azure.  

1 Hypervisor je specializovaný software, případně kombinace software a hardware umožňující vytváření a běh virtualizovaných počítačů

2 On-premise je způsob provozu řešení, kdy jej organizace má pod plnou kontrolu – typicky je provozováno na její vlastní infrastruktuře.

3 On-demand popisuje řešení provozované na infrastruktuře poskytovatele, k němuž organizace přistupuje skrze internet a zpravidla nad ním nemá plnou kontrolu.

Provozní modely v cloudovém prostředí

V cloudu rozlišujeme následující modely služeb:

IaaS – Infrastructure as a Service (Infrastruktura jako služba) představuje základní, přímo od virtualizace odvozenou službu umožňující vytvářet a spravovat infrastrukturu tvořenou:

  • virtualizovanými servery,
  • privátními sítěmi (VLAN – Virtual Local Area Network),
  • specializovanými síťovými komponentami, typicky

 „load balancery“ – aplikačními přepínači (application switch) zajišťujícími vysokou dostupnost dané aplikační služby předáváním požadavků do clusteru tvořeného dvěma či více virtuálními servery,

 síťovými firewally (nabízejí možnost explicitně povolovat či zakazovat přístup z veřejné sítě na vybrané síťové služby poskytované virtualizovanými servery v clusteru),

 a aplikačními firewally s možnostmi aktivní detekce/prevence bezpečnostních útoků v daném aplikačním protokolu („Intruder Detection/Prevention Systems“).

V případě IaaS zůstává na straně uživatele služeb odpovědnost za správu prostředí operačního systému a vytvoření a správu v něm obsaženého aplikačního prostředí nutného pro běh webových aplikací. Vytváření a konfigurace parametrů virtuálních serverů, sítí a případně síťových služeb probíhá přes k tomu určené webové administrační rozhraní (konzoli) příp. může být k dispozici též API umožňující tyto administrativní operace automatizovat na úrovní jiného systému. Poskytovatel v rámci IaaS platformy obvykle nabízí k instalaci předpřipravené obrazy (images) několika různých typů/verzí operačních systémů optimalizovaných pro běh v IaaS cloudu (obsahujících ovladače spolupracující s hypervisorem, který poskytovatel cloudu pro virtualizaci serverů využívá – např. VMware ESX/ESXi, Xen/Citrix XenSource nebo Microsoft Hyper-V).

V řadě případů menších poskytovatelů cloudových služeb bývá nabídka IaaS konečná, oproti globálním hráčům (Amazon, Microsoft) však může v případě, že IaaS pro navrhované řešení provozu dostačuje, konkurovat atraktivnější cenou a individuální lokální podporou.

Služby IaaS jsou zpoplatňovány modelem pay-as-you-go, kdy je stanovena cena za výpočetní jednotku na jednotku času (typicky kombinaci CPU a RAM definovanou v podobě tzv. typu instance virtuálního serveru na dobu jedné hodiny) či jednotku datovou (přenesený či uložený gigabyte pro síťový přenos, resp. datové úložiště). Základní cena může být též ovlivněna nainstalovaným operačním systémem (např. v případě Windows Serveru obsahuje platbu za licenci), výkonnější CPU architekturou (datová centra poskytovatelů cloudových služeb standardně využívají procesory s nejvýhodnějším poměrem výpočetního výkonu na příkon energie, ty ovšem nepatří z podstaty věci mezi nejvýkonnější modely) či výkonnějším typem úložiště (SSD disky, někdy lokálně instalovanými namísto ve sdíleném diskovém poli).

PaaS – Platform as a Service (Platforma jako služba) dává k dispozici prostředí předpřipravené pro provoz online (webových) aplikací postavených na určité aplikační platformě/kombinaci jazyka a frameworku (např. PHP, Microsoft .NET, NodeJS nebo Ruby on Rails). V tomto modelu přebírá poskytovatel služby plnou odpovědnost za potřebnou infrastrukturu, tvořenou prostředky IaaS, operačním systémem a aplikačním softwarem nutným pro běh aplikací. Uživatel služby dostává k dispozici v první řadě jedno či více rozhraní na podporu nahrávání (uploadu) aplikace do prostředí (typicky FTPS/SFTP, Git SCM, příp. API a/nebo CLI nástroj zahrnující podporu pro deployment management).

PaaS dává uživateli omezené možnosti konfigurace aplikačního prostředí (např. volbu verze jazyka či frameworku, vložení rozšiřujících modulů (extensions) a možnost úprav globální konfigurace aplikačního prostředí, tu však lze obvykle též ovlivňovat též z konfigurace vlastní do PaaS nasazované aplikace).

PaaS jako služba může v sobě zahrnovat též manuální nebo automatické (předem stanovenými parametry řízené) škálování, kdy v kombinaci s load balancerem dochází k vytváření a rušení virtuálních strojů zajišťujících zpracování kódu aplikace v závislosti na okamžité zátěži. Stejně jako v případě IaaS se cená odvíjí od skutečně spotřebovaných zdrojů zahrnujících využití IaaS prostředků (tedy typ a počet instancí virtuálních strojů, úložiště a datových přenosů) a dalších pro PaaS specifických služeb (např. podpory automatického škálování a dále připravenosti na škálování ve větším počtu instancí). Mezi PaaS platformy patří Azure Websites, Google AppEngine, AWS Elastic Beanstalk či cloudová platforma Heroku.

SaaS – Software as Service (Software jako Služba) je cloudovou vrstvou nejvyšší úrovně abstrakce a znamená poskytnutí fungujícího serverového software s jasně definovanými funkcemi a rozhraními pro interakci s okolním světem jako služby zajišťované ve stanovených kvalitativních rámcích poskytovatelem cloudové platformy nebo třetí stranou, která tuto platformu k tomu účelu využívá. V modelu SaaS jsou typicky poskytovány datová úložiště (SQL/relační i noSQL databáze), adresářové služby (LDAP, Azure Active Directory), CRM či eCommerce systémy. Do tohoto modelu provozně spadají též dnes velmi populární cloudové služby Google Apps a Office 365 nebo například on-demand verze produktů společnosti Atlassian na podporu vývoje (JIRA, Confluence). Spadají sem rovněž systémy pro distribuci obsahu (CDN – Content Delivery Network).

V SaaS modelu pracuje uživatel primárně s uživatelským webovým rozhraním služby, která poskytuje model zabezpečení přístupu k jednotlivým funkcím a datům na bázi uživatelských rolí či skupin, s možností správy těchto přístupu a volitelně též možností připojení jiného software či cloudových služeb přes API případně za využití zvláštních CLI („Command Line Interface“) nástrojů pro správu i integraci. SaaS platforma nabízí velmi omezené nebo žádné možnosti vložení vlastního aplikačního kódu (v případě databází se může jednat o storované procedury či funkce vykonávané databázovým strojem, v jiných případech pak buď nahrání kódu ve formě balíčku (extension), který daný software umožňuje načíst v rámci své modulární architektury - typicky však pouze v případě, že instance SaaS je provozně, tedy na úrovni IaaS/PaaS oddělena zcela od jiných instancí jiných zákazníků, které tak nijak neafektuje, v opačném případě pak bývá pak možná pouze integrace na jiných serverech běžících webových aplikací resp. komponent modelem SSI („Server-Side Include“ – vložením na straně serveru) nebo výhradně kódem běžícím na straně webového klienta uživatele pracujícího s SaaS službou (v Javascriptu napsané UI komponenty využívající dostupné serverové API). 

SaaS služby jsou placeny obvykle dle počtu uživatelských účtů, velikosti úložiště nebo počtu konkurenčních transakcí (paralelních klientských spojení) či jejich celkovém počtu za určitý časový úsek, případně kombinací těchto parametrů. Parametry je obvykle možné měnit kdykoliv dle měnících se potřeb bez nutnosti přerušení dostupnosti služby.

Ve všech modelech přináší cloudová platforma vlastnosti, které v tradičním on-premise modelu buď zcela chybí, nebo je nutné vytvářet a udržovat s velkým úsilím

  • vysoká úroveň zabezpečení přístupu k síťovým službám a aktivních ochrana před nejrůznějšími formami útoku (síťový firewall, intruder detection/prevention system)
  • vysoká úroveň zabezpečení dat (redundantní vícevrstvá úložiště, volitelně i geografická)
  • možnost sdružování cloudových prostředků v IaaS/PaaS modelu do virtuálních privátních sítí a jejich propojování se síťovým prostředím organizace (site2site VPN), vytváření hybridního cloudového prostředí a podpora při připojení pracovníků do cloudového prostředí přes site2client VPN
  • loan balancer (vč. podpory automatického škálování zdrojů clusteru dle stanovených zátěžových parametrů)
  • SSL offloading

PHP aplikace v cloudovém prostředí

Webové aplikace a portály implementované na bázi PHP (potažmo dosud provozované v tradičním schématu LAMP) lze nasazovat do cloudových prostředích s využitím všech výše popsaných modelů. Nejjednodušší, z hlediska provozních nároků nejméně náročnou formou je využití PaaS nabízející podporu pro provoz PHP aplikací, v kombinaci s databází poskytovanou v cloudu na bázi SaaS. V tomto případě je kompletní prostředí vytvořeno a dále spravováno prostřednictvím webové administrace platformy, nasazování změn pak prováděno známými nástroji (aplikační kód přes Git SCM mechanismem push příp. uploadem přes SSH/SFTP, databázové změny manuálně či skriptem přes databázovou konzoli).

Problémy mohou nastat, pokud PHP aplikace má specifické nároky na aplikační prostředí, které PaaS řešení neposkytuje (např. využívá specifická PHP rozšíření, které nejsou k dispozici a nelze je ani do PaaS nahrát) nebo jeho architektura není vhodná pro nasazení v cloudu s automatickým škálováním a „failover“ mechanismy (typicky využívá lokální souborový systém jako persistentní úložiště). V takových případech je nutné buď určitou část či celé řešení provozu aplikace postavit na bázi IaaS (tedy omezit využítí cloudové platformy na virtualizovanou serverovou infrastrukturu), nebo upravit systémovou architekturu webového řešení tak, aby z daným PaaS cloudem bylo kompatibilní. Je přitom třeba vzít v potaz, že IaaS model, který je nejblíže tradičnímu on-premise budování provozní infrastruktury trpí rovněž všemi neduhy tohoto přístupu, tedy zejména vyžaduje potřebné zdroje na správu prostředí operačního systému a aplikačního běhového prostředí, zároveň však v případě požadavků na vysokou garantovanou dostupnost vyžaduje vytvoření clusteru, čímž opět na architekturu aplikace klade nároky ekvivalentní v PaaS obsaženému škálovací mechanismu. Z výše uvedeného vyplývá několik doporučení pro architekturu PHP aplikací vhodných pro nasazení do cloudu

  • Nesměšujte kód s daty, nepoužívejte souborový systém pro ukládání persistentních dat, veškeré operace s úložištěm dat abstrahujte za obecné rozhraní (umožní implementovat využití některé z dostupných SaaS služeb) nebo pracujte přímo s databázovou abstrakcí typu PDO.
  • Využívejte aktivně všechny cachovací mechanismy, které vámi zvolená aplikační platforma/framework nabízí v kombinaci se zvoleným cloudovým prostředím (ve výpočetních instancích nebude nikdy nadbytek výpočetního výkonu ani operační paměti; s výhodou lze pro cachování využít in-memory key-value databáze typu Redis, pokud je platforma nabízí v modelu SaaS).
  • Počítejte s vydáváním statických zdrojových souborů (stylesheetů, obrázků, videí) z jiných absolutních, konfigurovatelných URL – budete tak moci v rámci cloudové platformy využít obvykle v modelu SaaS dostupné řešení CDN (Content Delivery Network – síť pro distribuci obsahu).
  • V případě použití relační databáze nepoužívejte SQL příkazy závislé na konkrétním databázovém stroji (s výjimkou případů, kdy předem víte, jaký konkrétní jediný typ databáze budete v rámci cloudového prostředí využívat); konstruujte dotazy programaticky aplikačním kódem s využitím knihovny, která to umožňuje, nebo využijte ORM nástroj.
  • Nepoužívejte PHP rozšíření, které nejsou defaultně k dispozici v PaaS modelu daného cloudu ani není možné je s jistotou do něj nahrát
  • Nepoužívejte knihovny a frameworky, které jsou napsány v rozporu s výše uvedenými zásadami.
  • Pokud to jde, vyvarujte se použití serverových služeb, který nelze ve vybrané cloudové platformě získat ve formě SaaS (např. exotické key-value databáze či fulltext indexery).

Výpočet nákladů

Zásadní změnu, kterou cloudové platformy přináší ve všech podporovaných modelech z hlediska provozních nákladů, je účtování služeb systémem pay-as-you go, tedy průběžná úhrada dle skutečně alokovaných resp. využívaných cloudových zdrojů.

Plánování provozních nákladů tedy nevyžaduje nutně provedení precizního sizingu pro předpokládanou špičkovou návštěvnost ve stanoveném časovém období (obvykle v řádu jednotek let) a následný nákup nebo pronájem tomu odpovídajících výpočetních zdrojů (serverů a dalších síťových prvků) bez ohledu na to, zda resp. v jakém časovém horizontu začnou být skutečně využívány naplno (o případném provozu překračujícím očekávání, vyžadujícím neplánovaně infrastrukturu dále rozšiřovat nemluvě).

V případě cloudu je sizing indikativní, stanovující předpokládaný náklad na provoz ve stanoveném časovém rámci (typicky jednoho měsíce) v závislosti na počtu uživatelů webového řešení, kteří mají býti obsloužení ve stanovené rychlosti odezvy. Lze se tedy v konečném důsledku dopočítat i nákladu na obsluhu jednoho uživatele a ten zahrnout do komplexního modelu celého obchodního případu, jehož je webové řešení součástí. V tom, společně s garantovanou dostupností cloudových služeb (standardně v modelech SaaS a PaaS, v případě IaaS pak za podmínky vytvoření clusteru) a vysokou úrovní jejich zabezpečení tkví hlavní přínos využití cloudových platforem namísto tradiční on-premise infrastruktury pro webové řešení.

V druhé části tohoto článku se seznámíme s praktickými poznatky z nasazení a škálování systému CMS LARS Vivo, jehož architektura má hned několik specifických vlastností, do cloudového prostředí Microsoft Azure.

Ohodnoťte článek

Architektura a provoz webových aplikací v prostředí cloudu (1. část)

Související články

Vyhledávání na blogu

Webová integrace

Webová integrace jako nová oblast pro business „velkých" webových agentur.

o webové integraci

Profily blogujících