AWS cloud za hubičku! - první server, úspory a load balancer
V minulém článku jsem nastínil formality spojené s používáním AWS cloudu a slíbil jsem vám tipy, jak ušetřit. Nejdřív se ale podíváme, jak spustit první server. Nečekejte návod krok za krokem - o tom je spousta článků a hlavně podrobná dokumentace od AWS. Chci spíš vytvořit rychlý přehled pro lepší prvotní zorientování v možnostech, protože jich je opravdu hodně.
Na začátek ale ještě trocha terminologie. "Servery" jsou v AWS schovány pod zkratkou EC2 (Elastic Compute) a říká se jim instance. Celý cloud totiž předpokládá, že všechny prostředky existují jen dočasně a "instance" je proto výstižnější pojmenování.
Jak instance v AWS startuje (AMI, EBS)
Před nastartováním první instance si musíte vybrat její image (AMI), což je bitová kopie připraveného systému. Sám Amazon jich má spoustu připravených (Centos, Ubuntu, Red Hat, Windows Server, ...) a také existuje marketplace s AMI, které mají třeba předinstalované určité aplikace. Pokud nejste vázáni na konkrétní platformu, tak doporučuju Amazon Linux. Je to (zřejmě) upravený Centos, ale má aktuální kernel a hlavně repozitář spravovaný Amazonem. Narozdíl od oficiálního repozitáře Centosu tak v něm je aktuální PHP 5.5 apod. Navíc obsahuje předinstalované utility pro komunikaci s AWS API a veškerá konfigurace je pro AWS upravena pro maximální výkon a jednoduchost konfigurace.Následně se vám vytvoří z vybrané AMI váš disk EBS (Elastic Block Storage) o zvolené velikosti, vybere se fyzický server s volnou kapacitou, rezervují se tam pro vás prostředky a nabootuje z EBS. Ve standardní konfiguraci tak vůbec nepoužíváte fyzický disk serveru, ale pracujete na síťovém disku. Není ale třeba se toho obávat. Amazon na této technologii dlouho pracoval a i z našich testů vychází, že hlavně u menších instancí je EBS obvykle rychlejší než lokální disk. Pokud ale chcete, můžete si skutečný lokální disk připojit a používat ho třeba pro /tmp.
Pokud pak server zastavíte, všechna data z lokálních disků se smažou, ale EBS zůstává. Při dalším startu se opět vybere nový fyzický server, ale data uložená v EBS se zachovají (pokud jste nic nedělali s lokálními disky, znamená to všechna data). Z vašeho pohledu tak prakticky nepoznáte, že cestujete mezi různými stroji. Velkou výhodou tohoto přístupu je, že získáváte konstantní výkon bez ohledu na aktuální sousedy na stejném stroji (to je velký problém u VPS), nejste závislí na výpadku konkrétního stroje a hlavně můžete EBS klonovat. Je tak otázka pár kliknutí vzít nakonfigurovaný stroj a zduplikovat ho.
Typy instancí
Velká věda je také vybrat typ instance. V AWS jich aktuálně najdete kolem třiceti. Liší se počtem dostupných procesorů a jejich typem, velikostí paměti, rychlostí připojení, disky a tak dále. Každý stroj pak vždy obsahuje instance jednoho typu, takže u slabších instancí máte spoustu sousedů a silných máte stroj i sami pro sebe. Typ instance pak samozřejmě určuje její cenu. Určitě ale neplatí, že dražší instance je výkonnější. Hodně záleží na konkrétní aplikaci. U eshopů máme například vyzkoušeno, že na instanci typu c3.2xlarge za 0.60$/hod se nám eshopy načítají rychleji, než na cc2.8xlarge za 2.40$/hod. Výhodou cloudu ale je, že lze snadno vyzkoušet, která sedí nejlépe.Cena provozu
Nenechte se zaskočit vysokými cenami za provoz EC2 instancí. Všude se vypisují jen standardní plné ceny, ale to určitě není jediná možnost. Provoz EC2 se platí vždy od hodiny a účtuje se po hodinách (včetně započaté hodiny!). Kromě toho se ale platí ještě traffic, velikost používaných EBS se platí a počet přístupů na ně. U našich eshopů ale tvoří většinu nákladů právě hodinová sazba - traffic výrazně šetří použití CDN a na disk stejně chceme přistupovat co nejméně.Plná cena instance (On-Demand)
Standardní ceny jsou vyvěšené v ceníku AWS a jsou poměrně vysoké. Nejsou s nimi ale spojená žádná omezení - spustíte server a ten běží. Podobně jako chytřejší VPS. Například instance typu m2.xlarge při non-stop provozu bude stát za rok 3972$ (331$/měsíc).Předplacené instance (Reserved Instance)
Rezervace umožňuje AWS skoro u všech služeb a trochu odporují standardnímu přístupu platbě za hodinu. Znáte "nechci slevu zadarmo"? Funguje to úplně stejně. Vyberete si typ instance, region a zaplatíte jednorázový poplatek a následně máte na 1 rok sníženou hodinovou sazbu pro jednu instanci. Po započítání měsíčního poplatku tak roční non-stop provoz instance typu m2.xlarge bude stát za rok 1670$ (139$/měsíc)Spot instance
Nejzajímavější mi přijdou spot instance. Jejich cena se neustále mění podle aktuálního množství volných strojů. V cloudu je nejdražší udržovat připravené stroje, takže volnou kapacitu AWS vyprodává pomocí aukce. Nabídnete například 0.20$/hodinu za určitý typ instance a pokud je volná kapacita a nikdo nenabídl více, tak se vám server spustí - v principu je to stejné jako třeba PPC. Pokud pak cena stoupne nebo jen Amazon potřebuje server pro někoho platícího plnou cenu, server se vám vypne. Provoz spot instancí je tak velmi nepředvídatelný. Například před vánoci na spotu instance třídy C3 nešlo asi tři týdny sehnat za žádnou cenu, protože všechny byly vyprodané v on-demand.Při provozu non-stop (což se u spotu nemusí podařit) by vyšla instance typu m2.xlarge na zhruba 800$ za rok (65$/měsíc). Pokud uděláte aplikaci tak, aby jí nevadilo různé vypínání a zapínání instancí, můžete ji provozovat za 19% ceny oproti on-demand.
EC2 téměř zadarmo!
Přijde vám 81% sleva pořád málo? Můžete jít ještě dál! Spot instance můžete totiž s trochou programování provozovat téměř zadarmo. Standardně platí, že platíte i za započatou hodinu - pokud spustíte instanci jen na 5 minut, zaplatíte stejně celou hodinu. Pokud vás ale vypne Amazon (stoupne u spot instance cena nebo potřebuje konkrétní stroj), jde poslední hodina na jeho účet. Jak toho využít?Napíšete si skript, který bude hlídat aktuální cenu instance. Následně položí nabídku jen o 1 cent vyšší, než je aktuální a navíc s platností 5 minut. Pokud se během této doby instance nepustí, vystavíte novou nabídku. Když se instance spustí, zapne si odpočet a za 59 minut se vypne. Následně se znova bude vystavovat nabídka a takhle pořád dokola.
Kde je ta úspora? Pokud bude vaše nabídka vždy těsně nad tržní, je velká pravděpodobnost, že vás Amazon skutečně vypne a provoz tak bude zadarmo. To se nepodaří vždycky, ale pokud budete mít hodně instancí a nevadí vám nečekané vypínání (třeba při paralelních výpočtech), tak tím můžete zase srazit náklady.
Elastic Load Balancer (ELB)
Pokud budete chtít vypínat a zapínat instance, tak se u webové aplikace neobejdete bez load balanceru a AWS rovnou jeden nabízí. Funguje úplně jednoduše - přidáte instance do ELB, Amazon hlídá, jestli funguje a pokud ano, rovnoměrně mezi funkční instance rozkládá traffic.Díky tomu pak svojí doménu nasměrujete na ELB a nikdo ani nepozná, že se vám ve skutečnosti zapínají a vypínají instance jak šílené, protože šetříte každou korunu.
Pár tipů na závěr
Snažte se EC2 využívat na co nejjednodušší úkoly a používat co nejmenší instance. Pokud maximum úkolů rozdělíte na samostatné instance, můžete mnohem lépe optimalizovat náklady - například spouštět instance pro web server jen v době, kdy je na webu návštěvnost (v noci dva webservery a přes den pět). Na instanci by vám také nemělo běžet nic zbytečně - každý zbytečný program užírá výkon a tím peníze. Doporučuji proto používat AMI ve verzi "minimal" a zamyslet se nad každým programem, který tam instalujete, zda je skutečně potřeba.Už jsem vás nalákal na cloud? Zkoušeli jste něco? Zatím jsem popisoval pořád ještě věci, které najdete i u dalších poskytovatelů. Příště už bych se chtěl pustit do nějakých amazoních vychytávek. Jestli je všechny vmáčknu do jednoho článku nebo se jim budu věnovat jednotlivě ještě uvidím podle odezvy.
Další díly:
- Proč jsme migrovali do cloudu Amazonu (AWS)
- Cloud na český způsob
- Jak na AWS cloud - první kroky
- AWS cloud za hubičku! - první server, úspory a load balancer
- Vychytávky v Amazon cloudu
- Jak se programuje v cloudu
Update: Nestačí vám články? Nově nabízím i konzultace AWS cloudu :)