AWS, neboli Amazon Web Services, je v současnosti pravděpodobně nejrozvinutější cloud, minimálně co do počtu a šíře nabízených služeb. AWS se skládají z mnoha služeb, které si mohou zákazníci pronajmout (víceméně) nezávisle na sobě.
Pronájem má tu pěknou vlastnost, že zákazník platí jen za zkonzumovanou službu. Tedy například za strojový čas, za přenesená data, za diskovou kapacitu, za transakce, za zpracovanou položku… Což má v porovnání s jinými službami tu výhodu, že si zákazník může objednat jen to, co opravdu potřebuje. Například velký diskový prostor s relativně malou výpočetní kapacitou pro službu na ukládání souborů, nebo naopak silný výpočetní výkon a minimum diskové kapacity pro aplikace, náročné na počítání.
Dalším obrovským plusem je to, že není třeba předem přesně znát náročnost aplikace – kdykoli lze pružně přidat další virtuální server či zvětšit kapacitu. Vyhneme se tak situacím, kdy máme buď předimenzovaný a nevyužitý server (protože návštěvnost webu je menší, než jsme počítali), nebo naopak výpadky služby kvůli nedostatečnému výkonu.
Co AWS nabízejí?
Amazon ve svých Web Services nabízí celou škálu služeb, od čistě výpočetních až po obchodní. Pojďme si je nejprve shrnout a setřídit.
Výpočetní služby
Doručování obsahu
Databáze
Deployment aplikací a správa cloudu
E-Commerce
Zprávy a synchronizace
- Amazon Simple Queue Service (SQS)
- Amazon Simple Notification Service (SNS)
- Amazon Simple Email Service (SES)
Monitorování
Sítě
Platby a účtování
Úložiště
Podpora
Web Traffic
Pracovní síla
Služby Amazon Web services podrobněji
Seznam je to úctyhodný a pokrývá snad všechny potřeby pro vytvoření velké, robustní a dostupné webové aplikace. Služby jsou na sobě do jisté míry nezávislé, takže některé lze použít bez nutnosti používat ostatní (Alexa), jiné (EC2 – služba virtuálních počítačů) využívají dalších služeb z portfolia (nejčastěji úložiště S3). Všechny služby mají společné to, že je lze snadno ovládat nejen přes web, ale i přes programové rozhraní (API), takže požadavky může posílat automatizovaně přímo vaše aplikace.
S3 (Simple Storage Service)
Služba nabízí „neomezený“ úložný prostor. Využijete ji samotnou, nebo pro některé další služby (EC2 si do S3 ukládá obrazy virtuálních disků, CloudFront očekává v S3 data pro CDN). S3 si můžeme představit jako jednoduchý webový server, kde jsou uložené soubory – jako za starých časů, kdy „webový server“ ještě ani zdaleka neznamenalo „… se skriptovacím jazykem a databází“ (viz technický popis S3 na Zdrojáku). Soubory uložené v S3 mohou být dostupné přes internet, a to jak přes web (klasickou HTTP adresou), tak přes BitTorrent, což oceníte zejména když potřebujete dostat mezi lidi velké objemy dat – instalační disky apod. K souborům ovšem můžete přistupovat i přes API, např. z aplikace běžící v EC2 (nebo jinde). Poslední novinka umožnila nastavit chování úložiště S3 tak, že funguje jako webový server (tj. má indexový soubor, který je poslán při požadavku bez zadaného souboru) – celkem snadno si tak lze vytvořit levný hosting pro statické HTML stránky.
CloudFront
Se službou S3 souvisí CloudFront – ten využijete v případě, že je pro vaši aplikaci kritické, aby data byla k dispozici pro uživatele rychle a aby nebyla závislá na jednom centru. CloudFront nabízí službu CDN, tedy síť pro distribuci obsahu. Ta funguje podobně jako jiné CDN, např. Akamai – požadovaný obsah je zkopírován do různých datacenter po celém světě, takže požadavky na data obslouží nejdostupnější datové centrum (většinou geograficky nejbližší). Data jsou tedy uložena v geograficky oddělených lokacích a budou dostupná i při selhání některého datacentra, i při výpadku spojení. Technicky je CloudFront nadstavbou nad S3 – pouze určíte, která úložiště z S3 chcete distribuovat přes CloudFront, a systém se postará o překopírování.
EC2 (Elastic Computer Cloud)
Služba virtuálních serverů. K dispozici je mnoho předpřipravených instalací virtuálních strojů, od čistých systémů po komplexní řešení. U této služby je asi nejmíň co k popisování – odpovídá zhruba běžným virtuálním serverům, až na to, že pronájem se účtuje po hodinách.
EBS (Elastic Block Store)
Pro uživatele, kterým nevyhovuje mít soubory uložené v S3, nabízí Amazon službu „blokového úložiště“ – tedy obdoby virtuálních disků, které si lze „namountovat“ k běžící instanci virtuálního počítače. Systém s ním může pracovat jako s běžným diskem, výhodou je, že po vypnutí serveru zůstanou data zachována.
Import/Export
Když si chcete data zálohovat, odnést nebo naopak nakopírovat do cloudu, nemusíte je tahat přes internet, můžete využít možnosti připravit si kompatibilní zařízení (externí disk), poslat jej do datacentra a požádat o zkopírování určených dat. Amazon zařízení přijme, dopraví do datacentra, připojí k systému, zkopíruje data dle požadavku a zařízení vám opět vrátí.
Auto Scaling
Jednoduchý všeříkající název této služby plně odpovídá: Auto Scaling za vás hlídá zatížení EC2 instancí a v případě potřeby dokáže přidat nové či odpojit nepoužívané. Tuto službu oceníte např. u aplikací, kde se v průběhu dne, týdne či jiného časového období výrazně mění zatížení.
CloudWatch
Předchozí služba je součástí širší služby pro sledování využití vašich zdrojů – CloudWatch. CloudWatch sleduje kromě EC2 i další služby (EBS, RDS, load ballancery) a pomocí připravených scénářů dokáže reagovat na určité situace a automatizovat některé činnosti.
Elastic Load Ballancing
Při rozdělení zátěže na více strojů (horizontální škálování) potřebujeme zařízení, které bude přidělovat požadavky jednotlivým strojům. V AWS k tomu slouží služba Elastic Load Ballancing. Jejím úkolem je přesměrovávat požadavky uživatelů podle zatížení jednotlivých strojů. Doplňuje se tak s předchozími službami škálování a sledování zátěže.
Elastic Beanstalk
Tato služba usnadňuje nasazení aplikace – spustí pro vás potřebné služby, nastaví servery atd. – a její provozování. Hlídá průběžně vytížení systému a podle potřeby zapíná či vypíná další instance, za chodu může měnit dynamicky parametry služeb, sleduje fungování vaší aplikace a může vás upozornit na problémy. Jde vlastně o obdobu managed služeb u serverů.
CloudFormation
Spouštíte nový web založený např. na oblíbeném databázovém produktu. Znamená to vytvořit nové instance, nové úložiště, nainstalovat software na EC2 servery, spustit databázové stroje, nastavit je… Tedy spousta administrátorské práce. Tuto práci vám může ušetřit právě CloudFormation, pomocí něhož si můžete vytvořit „šablony služeb“ – tedy předpřipravenou sestavu serverů a služeb AWS, včetně load ballancerů, databází, úložišť atd. Spuštění nového webu se stejnou konfigurací je pak mnohem snazší. K dispozici jsou i předpřipravené sestavy pro různé systémy – WordPress, Joomla, Redmine atd.
Elastic MapReduce
Tato služba (a několik dalších) osloví především vývojáře. MapReduce je nástroj k efektivnímu zpracovávání velkého množství dat a získávání informací. Dokáže velké množství dat efektivně předzpracovat (Map) a pak sloučit do malého objemu užitečných informací (Reduce). K vykonávání používá framework Hadoop. Pracuje nad daty v S3 a k práci si spustí instanci EC2. Připravený postup výpočtu můžete snadno zopakovat.
SimpleDB
U webových aplikací je často mnohem důležitější schopnost uložit data tak, abychom s nimi mohli dál pracovat, než se je snažit napasovat do pevně dané datové struktury. Amazon interně používá právě takovou NoSQL databázi na principu key-value – je jím právě SimpleDB (viz popis na Zdrojáku). SimpleDB umožňuje uložit data, najít data a zase je přečíst, a to na základě nějakého klíče. Nekontroluje jejich formát, což na jednu stranu umožňuje mnohonásobně vyšší dostupnost a propustnost, na druhou stranu klade nároky na obslužnou aplikaci.
RDS (Relational Database Service)
Pro uživatele, co opravdu požadují relační databázi, nabízí AWS službu RDS – tedy hostovanou SQL databázi (samosebou nikdo vám nebrání v tom spustit si např. MySQL v EC2 instanci). Amazon nabízí návody pro migraci databáze z Oracle nebo z MySQL do RDS.
SQS (Simple Queuing Service)
U rozsáhlých webových aplikací, které jsou založené na paralelním zpracování požadavků, je klíčová synchronizace akcí. Pokud se o vše stará jeden server, je snadné si v jeho rámci ohlídat např. vytvoření náhledu z nahraného obrázku apod. Pokud ale webová aplikace běží třeba na pěti stejných serverech, kde všechny obsluhují uživatelské požadavky (včetně uploadů) a o zpracování náhledů se stará jiný stroj, je potřeba mít centrální místo pro komunikaci, jakousi frontu zpráv, které si budou jednotlivé stroje mezi sebou předávat a řídit tak práci. Právě k tomu slouží SQS – je to jednoduchá služba pro výměnu zpráv mezi servery v rozsáhlých systémech.
SNS (Simple Notification Service)
Na podobném principu jako předchozí služba pracuje i SNS – služba pro posílání notifikací (viz před časem popisovaný PubSub model). Namísto posílání zpráv „do fronty“ se zde zasílají (Push) upozornění přihlášeným příjemcům. Ti tak nemusí kontrolovat neustále frontu, jestli nečekají nové požadavky.
SES (Simple Email Service)
SES je služba, která rozesílá maily. U webových služeb typu e-shopů je rozesílání mailů výraznou částí jejich činnosti. Pomocí SES lze toto rozesílání zjednodušit a spojit např. se statistikou úspěšnosti doručování.
FWS (Fulfillmet Web Services)
Pokud je vaše podnikání založeno na dodávání fyzického zboží, může se vám hodit služba fulfillmentu, což je, zjednodušeně řečeno, služba, které předáte připravené zboží a řeknete, komu se má poslat kolik kusů čeho. Podle objednávky je pak zboží zabaleno a posláno. Pro poslání pěti kousků týdně se asi nevyplatí, ale budete-li pokrývat celý svět, stojí rozhodně za zvážení. I pro tuto službu platí, že je snadno integrovatelná s dalšími službami AWS, to znamená např. že o zaslání na určitou adresu může přes jasně definované rozhraní požádat přímo aplikace (např. na základě zaplacené objednávky).
FPS (Flexible Payment System)
Když už hovoříme o zaplacené objednávce – FPS umožňuje přijímat platby od zákazníků. Platby jsou vyřizovány Amazonem (zákazník může tedy použít např. platební karty) a služba je opět integrována s AWS.
DevPay
Pokud prodáváte řešení v AWS, tedy např. nabízíte nějaké aplikace „as a service“, usnadní vám DevPay účtování strojového času vašim zákazníkům. Když budete nabízet nějaké řešení na míru, můžete jej provozovat v AWS a zákazníkům účtovat poplatky. O výběr peněz se opět stará Amazon.
Route 53
Pokud bude vaše aplikace tvořená větším počtem serverů, začnete uvažovat o provozování vlastního DNS. A opět – můžete jej rozběhnout na virtuálním stroji v EC2, nebo můžete využít dedikované služby Amazonu, v tomto případě právě Route 53.
Amazon VPC
VPC, neboli Virtual Private Cloud, je možnost vytvořit si vlastní „cloud v cloudu“ – tedy virtuální izolovanou síť v rámci AWS, kde lze definovat, jako u fyzických sítí, vlastní topologii, vlastní adresaci apod. Pomocí VPN ji můžete spojit např. s firemní sítí a využívat tak výhod cloudu i privátních sítí zároveň.
Mechanical Turk
Na konec jsme si nechali takovou lehce kuriózní službu. Mechanical Turk nabízí lidskou práci. Tedy zpracování úloh, u nichž je zapotřebí lidského intelektu, resp. takových, kde je zpracování člověkem stále nejrychlejší. Příkladem může být hledání objektů na fotografiích (např. najít ceduli s názvem ulice a název opsat), přepis hlasových nahrávek, hledání nevhodného obsahu, psaní textů a popisů zboží, zadávání dat do formulářů z oscannovaných datasheetů, vyhodnocování relevance výsledků vyhledávání a další činnosti. Většinou se podobné úlohy řeší najmutím dočasné pracovní síly (resp. nahnáním všech dostupných i nedostupných zaměstnanců na tuhle mechanickou činnost pod heslem „Kdo má ruce, ten pomáhá“). Mechanical Turk nabízí právě takové „najmutí dočasné pracovní síly“ pro úlohy, které lze zadat vzdáleně. Umožňuje kontrolovat správnost – např. jedna a tatáž fotografie je zadána více lidem a pokud se jejich odpovědi shodují, je tato odpověď považována za správnou.
Jak použít AWS?
Pro všechny tyto služby existuje dokumentované aplikační rozhraní (API), takže je možné jejich provoz řídit programově – např. podle potřeby spouštět další servery. Jen s malou mírou nadsázky lze napsat, že pokud aplikace potřebuje nějakou náročnou operaci, nemusí vytvářet nový proces, ale může si nechat vytvořit rovnou celý nový počítač, který spočítá potřebné, vrátí výsledky a zase se zruší – a pokud je třeba takových operací provést sto najednou, lze vytvořit sto virtuálních počítačů.
K tomu, aby web využil všech výhod cloudů, tedy především snadného horizontálního škálování výkonu i kapacity, je navíc zapotřebí, aby byl už od počátku navržen pro paralelní zpracování úloh. Aby v aplikaci nebyla kritická místa – nějaké „centrální uzly“ či procesy, které nelze dělat najednou na více místech. Už při návrhu je potřeba počítat s tím, že vyšší výkon nebude získáván silnějším hardware, ale větším počtem samostatných serverů, a stavět aplikaci tak, aby například nekonzistence dat (tzn. v jednom okamžiku mohou dva různé servery dostat z databáze různé údaje) neohrozila chod či nepředstavovala principiálně havarijní stav.