nav line

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

V prvním dílu tohoto článku jsme se seznámili s běžnými modely služeb poskytovaných v cloudu, zásadami vývoje PHP aplikací určených k nasazení do tohoto prostředí a konečně i principy ekonomie cloudového provozu. V druhé části článku si představíme praktické zkušenosti s nasazením PHP systému, který původně nebyl navržen pro cloudové prostředí.

CMS LARS Vivo

CMS LARS Vivo je Content Management System vyvíjený společností Lundegaard od roku 2009. Systém využívá pro ukládání CMS dat jako úložiště lokální souborový systém, nebo relační databázi, přístup k CMS objektům akceleruje víceúrovňovým cachováním (v 1. úrovni v rámci jednoho requestu v paměti, v 2. úrovni v APC cache a ve 3. úrovni vyhrazenou částí souborového systému), pro fulltextovou indexaci a následné prohledávání využívá službu Apache Solr. Využívání lokálního souborového systému v kombinaci s fulltextem zásadním způsobem ovlivňuje možnosti nasazení do cloudu. Interakce CMS systému s CMS modelem je velmi intenzivní, v praxi se jedná o desítky až malé stovky přístupů (operace mtime, fread) k objektům CMS modelu v rámci jednoho webového požadavku. Latence přístupu v kombinaci s efektivním cachováním tak zásadně ovlivňuje rychlost sestavování stránek. V rámci přípravy systému pro nasazení do Microsoft Azure cloudu bylo postupně implementováno a testováno několik implementací úložiště, počínaje existující podporou pro využití relační databáze a konče implementací úložiště kombinujícího služby Azure Table a Blob Storage. V obou případech se nepříznivě projevovala poměrně vysoká latence v přístupu k úložištím poskytovaným v rámci Azure jako SaaS služba (v případě relační databáze v řádu desítek milisekund, v případě Table/Blob storage až stovek). Řešením bylo považování dat již načtených do cache po určitou dobu (v řádu sekund až minut) za platná a neověřování jejich změny v persistentním CMS úložišti. To však v případě nasazení do clusteru přináší zpoždění v aktualizaci obsahu. 

PaaS nebo IaaS?

Samostatnou kapitolou bylo ladění výkonu v PaaS prostředí Azure Websites. Na rozdíl od prostředí Unix je v tomto aplikačním kontejneru založeném na technologii Windows Server pro účely in-memory cachování k dispozici modul WinCache namísto APC či Zend OpCache. Ten sice v principu funguje stejně jako výše uvedené moduly, v praxi však jeho využití přinášelo pro cachování PHP bytecodu i dat znatelně horší výsledky v rámci cache vrstvy. Z těchto důvodů jsme upřednostnili pro exekuci PHP kódu webových řešení na bázi CMS LARS Vivo použití IaaS – virtuálních strojů s linuxovým operačním systémem Ubuntu Server, na kterých je možné využít osvědčená cachovací rozšíření APC, resp. Zend OpCache. Přechodem od PaaS k IaaS modelu jsme se však připravili o zásadní výhodu Azure Websites, a to autoškálování a automatickou distribuci aplikace do platformou spravovaného clusteru, tudíž jsme tyto funkce museli vyřešit jinak. 

Docker aneb vlastní PaaS řešení

Cílové řešení kombinuje IaaS s technologií Docker, která umožnuje připravit kompletní instalaci CMS systému ve formě obrazu, který se nasazuje a spouští na virtuálních strojích s předinstalovaným běhovým prostředím Docker Engine. V případě on-premise řešení lze využít libovolné servery s některou distribucí Linuxu. Vlastní řízení distribuce aplikace do clusteru pak probíhá za využití technologie Docker Swarm, kterou lze propojit s nástrojem kontinuální integrace odpovědným za sestavování a nasazování webových projektů (v našem případě Jenkins CI).

Vivo Server Docker image

Vivo Server Docker image (lundegaard/vivo-server) obsahuje web server NGINX v roli reverzní cache a proxy serveru, který je napojený přes rozhraní FastCGI na Zend PHP Engine se všemi obvykle vyžadovanými rozšířeními, volitelně pak napojený rovněž na monolitický PHP engine HHVM, který Vivo oficiálně podporuje od verze 2.2.16 (volba engine probíhá komunikací na příslušný port přiřazený k NGINXu). V obrazu je rovněž připravena instalace Apache Solr fulltext enginu. Tento obraz je pak používán jako základ pro vytvoření kompletního image webového řešení obsahujícího veškerý aplikační kód, který do něj nahraje nástroj kontinuální integrace, návazně jej pak může přes příkazovou řádku distribuovat do běhového prostředí. 

Distribuované CMS úložiště

Vivo používá jako CMS úložiště (repository) určené k nasazení do dynamicky škálovatelného běhového prostředí (Azure Cloud Service) specifickou implementaci využívající lokální souborový systém, která veškeré změny paralelně zaznamenává na externí (v případě Azure SaaS) relační databázový server, přičemž databáze CMS systému umístěná na tomto serveru je rozšířena o aplikační změnový log. Veškeré změny CMS objektů jsou do tohoto logu v rámci změnové transakce zaznamenávány, jinými instancemi téhož webového řešení pak detekovány, z databáze posléze načteny a replikovány do lokálního souborového úložiště a cache a zároveň jsou fulltextovým engine indexovány. Pro cache složku lze využít v Azure Virtual Machine dočasný disk, který se připojí k výše uvedenému adresáři uvnitř kontejneru Docker Vivo serveru. Toto řešení není sice úsporné z hlediska ukládání dat (veškerá data v CMS úložišti se propisují do lokálního souborového systému a fulltextu každého běžícího kontejneru daného webového řešení), přináší však rychlost odpovídající lokálnímu nasazení bez clusteru. V případě nasazení do on-premise/staticky škálovaného prostředí je možné připojit z Docker serveru vybraný adresář na datovou složku webového řešení, a mít tak veškerá data, která uchovává Vivo v lokálním souborovém systému, resp. kompletní webovou složku, mimo vlastní kontejner Vivo serveru. Daný adresář pak může být v případě clusteru synchronizován na další uzly v tomto clusteru za využití služby GlusterFS, čímž je zajištěna replikace změn dat napříč aplikačním clusterem. Takové řešení je pak obecně použitelné na libovolné webové aplikace založené na technologii PHP. 

Shrnutí

Dle míry specifičnosti aplikačního prostředí lze PHP aplikace nasazovat v Azure buď do stávajícího PaaS modelu Azure Websites, nebo lze využít IaaS (Azure Virtual Machines), nejlépe pak v kombinaci s technologií Docker, která umožňuje snadno balíčkovat a distribuovat aplikaci s kompletním dle specifických potřeb nakonfigurovaným aplikačním prostředím na bázi Linuxu do IaaS clusteru využívajícího služeb Azure Virtual Machines a Azure Cloud Service. V každém případě lze minimálně relační databázi v cloudovém prostředí využívat jako SaaS službu.

Užitečné odkazy

Architektura a provoz webových aplikací v prostředí cloudu (2. čá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