Praha se letos poprvé objevila na seznamu měst, ve kterých se konalo globální přednáškové turné Microsoft Ignite The Tour. Nemohli jsme si proto nechat ujít příležitost poslechnout si poslední novinky, které si pro nás Microsoft chystá. Z počtu návštěvníků a jejich skladby v pražském Kongresovém centru šlo usuzovat, že má turné velký nadnárodní věhlas. Celá konference byla koncipována ve stylu „learning paths“ a účastníci měli možnost si vybrat ze široké škály témat. Prim hrála na konferenci cloudová stezka poznání Microsoft Azure, která nejvíce zaujala i nás, což je vzhledem k našemu projektovému zaměření pochopitelné. Na naší cestě za poznáním Microsoft Azure jsme si tak mohli naživo ověřit, jaká jsou úskalí a benefity migrace dat a aplikací z on premise prostředí do cloudu, jaké nové možnosti otevírá použití kontejnerů v cloudu a jak navrhnout aplikaci s použitím moderní serverless architektury.
Migrace aplikací z on premise prostředí do Azure
Prvním tématem našeho putování byla živá ukázka migrace aplikace do Azure. V zásadě lze zvolit 2 cesty migrace – konzervativní cestu pomocí migrace virtuálních strojů (VM), na kterých aplikace běží, nebo – pokud to architektura umožňuje, využít rovnou PaaS (Platform as a Service) službu AppService. Sám Microsoft si je dobře vědom, že výsledek migrace aplikace do Azure si zákazník odnese jako první dojem ze svého střetnutí s cloudem, není tedy překvapením, že poskytuje dvojici velmi povedených migračních nástrojů jako je AppService Migration a Azure Database Migration Service. Microsoft v tomto duchu pak razí heslo Lift and Shfit, které by se dalo interpretovat jako metoda postupnými „přískoky“. V první fázi je cílem co nejsnáze a nejrychleji přesunout aplikaci z on premise prostředí do cloudu (Lift). K tomu slouží již zmíněná varianta využití IaaS (Infrastructure as a Service) služeb, tedy migrace samotných VM nebo využití zmíněných migračních nástrojů. Dalšími kroky, které už však mohou znamenat refactoring aplikace (Shift), je jejich úprava tak, aby byly provozovatelné na PaaS službách jako je AppService, popř. rovnou umožnily běh aplikace v kontejneru na službě Azure Kubernetes Service. Obrovská výhoda PaaS služeb spočívá z pohledu nás vývojářů v tom, že se obejdeme bez celého oddělení, které by se staralo o naši infrastrukturu. Nemusíme řešit záplatování, upgrade serverů ani provozní technické odstávky prostředí – to vše za nás vyřeší Azure. Další vlastnosti jako globální dostupnost, možnost definovat zóny dostupnosti a jednoduché škálování jsou pak jen pomyslnou třešničkou. Ačkoliv by se mohlo zdát, že migrace aplikace do Azure je jednoduchou banalitou, existuje zde ještě jedna velká překážka netechnického charakteru. Ostatně – technické překážky se Microsoft samozřejmě snaží co nejvíce odstraňovat. Řeč je o mentálním bloku přesunutí aplikace do prostředí mimo svou kontrolu. I zde ovšem existuje zlatá střední cesta pomocí hybridní architektury, kde kritická nebo citlivá část aplikace, jako je např. databáze, zůstává na on premise prostředí a zbytek je pak provozován v cloudu. Možností zabezpečeného propojení obou prostředí je pak celá škála, a to od nejdražšího řešení pomocí express route přes OpenSec tunel a VPN až po tzv. hybrid connection pomocí Azure Relay. Migrace aplikace do Azure tak skýtá pestrou paletu možností, pro které je možné se rozhodnout s přihlédnutím k aplikačním, bezpečnostním a jiným požadavkům.
Kontejnery v cloudu
Ve světě logistiky byla tzv. kontejnerizace velkou revolucí. Díky prosazení standardních rozměrů kontejnerů bylo najednou možné efektivněji a jednodušeji transportovat více druhů různého zboží najednou. Další důležitou vlastností kontejnerů byla možnost přepravy zboží vícero druhy dopravy, aniž by se muselo zboží složitě překládat. Výsledkem toho všeho pak byla redukce potřebných lidských zdrojů a skladových a transportních kapacit (efektivnější využití prostoru). Touto změnou paradigmatu v logistice se inspiroval obor IT; po vzoru fyzického kontejneru využívá hlavních výhod aplikačních kontejnerů, jako je třeba vzájemná izolace, která umožňuje mít jednoduše více druhů aplikací s různými závislostmi na jednom kontejnerovém clusteru. Další neméně výhodná vlastnost kontejnerů spočívá v možnosti jejich jednoduché přenositelnosti téměř kamkoliv, ať už se jedná o lokální vývojové prostředí, místní kontejnerový cluster nebo různé cloudové platformy. Poslední z analogií ke klasickému kontejneru jsou úspory plynoucí z faktu, že kontejnery místo klasické virtualizace hardware pomocí VM virtualizují jádro operačního systému, čímž výrazně snižují nároky na využití zdrojů a jejich správu.
Ačkoliv kontejnery dnes již ve světě IT nejsou žádnou žhavou novinkou, ve spojení s cloudem dostávají nový rozměr. V Microsoft Azure lze těžit hlavně z podpory orchestrátoru kontejnerů Azure Kubernetes Service (AKS), který zajišťuje správu, údržbu a škálování jednotlivých instancí kontejnerů. Největšími výhodami spojení cloudu a Kubernetes jsou pak shora téměř neomezená možnost automatického elastického škálování na základě zatížení, jednoduchá správa stovek až tisíců běžících kontejnerů, globální dostupnost a redundance. Z pohledu vývojáře je to pak možnost soustředit se pouze na vývoj aplikací, nikoliv na infrastrukturu a její správu. Krásu vzájemné inspirace a kooperace obou odvětví, tedy IT a logistiky, pak dokresluje fakt, že orchestrátor aplikačních kontejnerů Azure Kubernetes Service používá logistický gigant Maersk pro optimalizaci transportu svých klasických kontejnerů na zboží.
Serverless architektura
Pomyslným zlatým hřebem cloudových služeb je serverless architektura. Ta využívá abstrakci serverů na takové úrovni, že se vývojáři mohou soustředit jen a pouze na vývoj logiky aplikace a nemusí řešit výběr nebo konfiguraci konkrétních OS a typů aplikačních serverů jako v případě PaaS služby AppService. Ve výsledku tento přístup znamená, že platíme pouze za čistý strojový čas, který naše aplikace spotřebují na abstrahovaných výpočetních prostředcích, což jde ruku v ruce se micro-billing způsobem účtování utilizace těchto zdrojů. Místo toho, abychom platili např. za službu AppService na měsíční bázi s navrženým plánem, platíme pouze tehdy, když je serverless služba opravdu používána – např. na základě událostí z vnějšího světa. Jako typický příklad si lze představit zpracování přijaté objednávky. Serverless architektura v podání Microsoft znamená pak dvě služby: Azure Functions a Azure Logic Apps. První jmenovaná služba má charakter dostupného výpočetního výkonu pro náš kód, programuje se tedy imperativně pomocí vybraného programovacího jazyku. Ze své povahy také inklinuje k bezestavovému řešení. Naproti tomu Azure Logic Apps má charakter sledu logických akcí (workflow) nebo orchestrace business procesu, navrhuje se tedy deklarativně např. s pomocí grafického webového návrháře. Nespornou výhodou Azure Logic Apps je existence více než stovek hotových konektorů na existující služby. V rámci demonstrace toho, jak je návrh v Azure Logic Apps jednoduchý, bylo v prezentaci předvedeno vytvoření emailové notifikace při přijetí objednávky včetně vytvoření faktury (existující API). Pro vytvoření takového workflow nebylo potřeba ani 5 minut. Pokud uvážíme, že servereless architektura nabízí ještě větší míru elastické škálování bez jakékoliv nutnosti konfigurace, lze ji pro aplikace s výrazně nerovnoměrně distribuovanou zátěží považovat za optimální řešení. Nemusíme se tak starat o to, zdali je naše aplikace využívána jednou nebo stotisíckrát za den, o vše se postará Azure.
V rámci naší cesty za poznáním Microsoft Azure jsme si potvrdili, že cloudové technologie a prostředí nabízí nepřeberné množství přístupů a způsobů řešení, které se dají aplikovat na stávající klasické aplikace. Jedním z takových případů je i projekt přepisu core aplikace Letiště Praha do cloudových technologií s hybridní architekturou. V průběhu tohoto projektu jsme neustále žasli nad možnostmi Azure a jejich snadné použití na námi vyvíjenou aplikaci. Svět cloudu je tak nejen o samotné změně technických detailů naší aplikace, ale ve velké míře také o změně myšlení a přístupu ke způsobu řešení.
Autor: Petr Filas