Platforma Azure “lidskou řečí” (3.) – Azure Storage

Po předchozích dvou dílech, které se věnovaly pronájmu operačního systému, tedy službě Compute a databázi SQL Azure přichází na řadu třetí díl, ve kterém se budu věnovat službě Azure Storage. Jedná se o poslední komponentu, která je využita – jak ostatně sám název napovídá – k ukládání dat. Tuto službu pravděpodobně využijete prakticky v každém řešení, i když třeba jenom v okrajové úloze – např. na trvalé uložení logů a diagnostických informací anebo pro dočasné uložení nasazovaného řešení. Existují tři základní typy dat, která lze v Azure Storage uložit – tabulky, BLOBy a fronty zpráv. Jednotlivé rozdílné typy se postupně probereme i s vhodným způsobem použití. Mají ovšem i některé...

...společné rysy

  • Jedná se o úložiště velmi levné, pouze 0,15 USD / 1 GB místa / za měsíc. Ve srovnání s databází SQL Azure je to 67x nižší cena za jednotkovou velikost.
  • Ale pozor, platí se za transakce proti úložišti, a to 0.01 USD za každých 10.000 transakcí, čili dolar za milion transakcí. Pro srovnání – u SQL Azure se za transakce neplatí nic. Přesnou definici toho, co je a co není transakce najdete zde.
  • Dalším možným poplatkem mohou být GB přenesené dovnitř a ven (0.10 USD/GB směrem do cloudu, 0.15 USD/GB opačným směrem). Tento poplatek ale platíte pouze tehdy, pokud data z databáze přechází přes hranice serverovny/datového centra. Pokud je aplikační vrstva přistupující k Azure Storage rovněž v cloudu ve stejném datovém centru, nepřechází data z databáze hranici serverovny, tudíž se za ně neplatí.
  • Jedná se o úložiště s prakticky neomezenou škálovatelností, neboť je rozprostřeno mezi mnoho serverů. Naproti tomu SQL Azure je vždy obsluhován jediným serverem.
  • Data jsou uložena ve třech replikách, tudíž jsou velmi dobře chráněna proti jakýmkoliv možným selháním.
  • Pro přístup k datům potřebujete tzv. účet úložiště (tzv. storage account). Ten založíte z Azure portálu. Zde získáte jméno účtu (DNS jméno vašeho úložiště) a klíč, který aplikace opravňuje k manipulaci s daty. Pomocí tohoto klíče můžete vygenerovat též dočasný klíč, který se hodí například na bezpečné povolení přístupu z klientských aplikací (více zde).
  • Veškeré operace nad úložištěm se provádí pomocí REST konvence a protokolu HTTP/HTTPS. Vývojáři však mají v rámcí Azure SDK k dispozici komfortní objektovou knihovnu, která je odstiňuje od všech úskalí protokolu, a to nejenom pro .NET framework, ale i pro platformy Java, PHP, operační systémy mobilních telefonů apod.

BLOBy

Nejčastěji používaným typem úložiště jsou tzv. BLOBy (binary large object). V cloud aplikacích plní stejnou roli jako sdílené složky souborového systému v klasickém světě. Je vhodné je použít na větší nestrukturované informace jako jsou například dokumenty aplikací, scanované papírové dokumenty, zálohovací soubory, videa, obrázky apod. Tyto soubory jsou uloženy ve složkách (tzv. kontejnery), analogicky jako v souborovém systému. Můžete je velmi dobře využívat i v kombinaci s SQL Azure. Například scanované dokumenty je možné ukládat v Azure Storage (je to levnější) a veškerá metadata potřebná pro vyhledání konkrétního dokumentu uložíte v SQL Azure, neboť ten nabízí vysokou rychlost a pestrou paletu možností pro rychlé dotazování do dat. Pokud chcete, můžete část BLOBů zpřístupnit i anonymním uživatelům – pak jsou přístupné pomocí jednoduchého HTTP GET příkazu a lze je tudíž využít přímo v internetových prohlížečích, např. pro zobrazení videa na webové stránce.

Zajímavým doplňkem k BLOBům je možnost využití CDN (Content Delivery Network). Tato služba je vhodná, pokud máte relativně velká a statická data, která jsou konzumována větším množstvím uživatelů ve více geografických lokalitách. Služba CDN funguje jako obrovská distribuovaná cache rozprostřená do minimálně 24 lokalit po celém světě (nejbližší k nám je v tuto chvíli Vídeň). Princip je jednoduchý. DNS jméno cache je převedeno na IP adresu v závislosti na IP adrese přistupujícího uživatele tak, aby ho obsluhovalo síťově nejbližší místo. Pokud je příslušný BLOB již v cache paměti, je vrácen okamžitě, pokud není, získá ho cache z úložiště Windows Azure a poté si jej uloží pro obsluhu dalších klientů po dobu TTL (time to live), kterou určuje vlastník BLOBu. Tím můžete výrazně urychlit dobu odezvy uživatele, aniž byste podstatně zvýšili cenu služby – jediné náklady navíc jsou transakce a objem přenesených dat potřebné pro naplnění cache z úložiště. Detailnější popis najdete na Daliborově blogu.

Tabulky

Tabulky v Azure Storage jsou příkladem třídy „no SQL“ databází. Podobají se běžným relačním tabulkám v tom, že jsou vhodné pro uložení strukturovaných dat ve formě řádků a sloupců. Na rozdíl od relačních tabulek může každý řádek obsahovat jiné sloupečky. Povinné jsou pouze 3 sloupečky – identifikátor oddílu dat (určuje distribuci na jednotlivé servery úložiště), identifikátor řádku a automaticky udržovanou časovou známku. Jinak se jedná o úložiště velmi hloupé – nezná žádnou kontrolu integrity, relace, triggery ani uložené procedury. Transakce podporuje pouze v omezené míře. Výběr dat je efektivní pouze pomocí identifikátoru oddílu a řádku. Proč ho tedy použít? Zejména pro relativně nízkou cenu a prakticky neomezenou škálovatelnost. Pokud máte velké množství strukturovaných dat, která jsou nezvládnutelná běžným relačním úložištěm, je to řešení pro vás. Troufnu si odhadnout, že ho bude používat pouze menšina projektů, ale zato ve velkém rozsahu.

Fronty zpráv

Fronty zpráv jsou specializovaným jednoúčelovým úložištěm pro asynchronní komunikaci mezi jednotlivými komponentami aplikací. Jedna komponenta ukládá do fronty zprávy, což jsou v podstatě „úkoly“ pro jinou komponentu. Tato může běžet i ve větším počtu instancí a z fronty je svým tempem vyzvedává a postupně zpracovává – je tak možné velmi jednoduše tlumit špičky rozkládáním do delšího časového úseku. Častým příkladem může být například e-shop postavený na Windows Azure, kde webové role přijímají objednávky od uživatelů, ukládají je do fronty a worker role je na pozadí zpracovávají. Fronty jsou typicky využívány aplikacemi běžícími na větším množství virtuálních serverů pro komunikaci mezi jednotlivými instancemi. V menších aplikacích bude jejich využití spíše ojedinělé.

V příštím díle, který bude prozatím poslední, si povíme něco o ostatních, méně často užívaných službách na platformě Azure.

Michael