Po veskrze kladných ohlasech na první díl tohoto mini-seriálu, který se snaží vysvětlit podstatu Azure platformy bez marketingového nánosu a nadměrného vizionářství, přichází díl druhý. Podíváme se v něm na datovou vrstvu. Pro většinu aplikací si pod pojmem data představíme strukturovaná data, a zde už desítky let kralují relační databáze. Přestože se časem vynořují různé nerelační alternativy vhodné pro některé speciální scénáře, relační databáze jsou díky své vyspělosti, univerzálnosti a schopnostem zcela nenahraditelné – a nezdá se, že by se tento stav měl v dohledné době změnit. Platforma Azure proto logicky nabízí ekvivalent relační databáze SQL server v cloudu. Jedná se z 99% o stejný produkt, takže proti SQL Azure běží prakticky stejný kód a používají se stejné nástroje, nejčastěji SQL Server Management Studio ve verzi 2008 R2. Dále se tedy budeme soustředit spíše na věci, kterým se klasický SQL server a SQL Azure liší.

Základní dohoda

  1. Microsoft provozuje velké Microsoft vlastní obrovské množství serverů umístěných v datových centrech na 3 kontinentech (Evropa, Severní Amerika, Asie), na řadě z nich běží SQL Azure
  2. Zákazník (tedy případně vy) si na nich může zřídit virtuální databázový server, což je sada databází a uživatelských účtů, které k nim přistupují. Zřízení serveru je zdarma.
  3. Na zřízeném serveru je možné vytvářet databáze. Za tyto vytvořené databáze se platí na denní bázi. Existují 2 edice – Web (velikosti 1 a 5 GB) a Business (velikosti 10, 20, 30, 40 a 50 GB). Pokud potřebujete větší velikost a škálovatelnost napříč servery, je možné použít tzv. sharding.  Při vytváření databáze si zvolíte edici Web nebo Business a též maximální velikost databáze, která není nikdy překročena. Měsíčně pak platíte podle spotřebovaného místa v databázi, zaokrouhleno na nejbližší vyšší velikost v dané edici, a to přibližně 10 USD měsíčně za velikost 1 GB. Např. pokud si zřídíte Web edici velikosti 1 GB a spotřebujete 0.1 GB, platíte jako za 1 GB cenu 9.99 USD. Pokud si zřídíte Business edici o velikosti 40 GB a uložíte do ní 16 GB dat, platíte jako za 20 GB databázi, tedy 199.99 USD měsíčně. Do velikosti databáze se započítávají tabulky, indexy a další vytvořené objekty (jedná se v podstatě o spotřebované místo v MDF souboru). Velikost transakčního logu se nebere v úvahu.
  4. Výše uvedený poplatek je jediný, který platíte. Neplatíte za hardware, za licence ani za uživatele. Jediným možným další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 rovněž v cloudu, nepřechází data z databáze hranici serverovny, tudíž se za ně neplatí.
  5. Výše uvedená cena zahrnuje vysokou dostupnost se 3 replikami dat, automatickým přepnutím (fail-over) v případě výpadku a zálohování/obnovu proti veškerým hardwarovým a softwarovým selháním (nikoliv proti chybám uživatelů!!!)
  6. Microsoft se stará o aktualizaci operačního systému i databázového softwaru, a to bez jakýchkoliv přerušení provozu (díky 3 replikám databází).
  7. Z hlediska zákazníka je k dispozici “připojovací řetězec”, se kterým si s mírnými omezeními můžete dělat, co chcete – stejně jako když máte k dispozici připojovací řetězec ke klasické SQL databázi.

Pokud vás zajímá, jak je celá infrastruktura navržena a chcete nahlédnout pod pokličku, doporučuji článek Inside SQL Azure.

Co můžete a nemůžete v oblasti správy

Správcem databáze je Microsoft, nikoliv vy. Tudíž se o celou řadu věcí staráme za vás – vysoká dostupnost, správa hardware a software, obnova v případě selhání HW/SW apod. K těmto činnostem tudíž nemáte vůbec přístup a nemůžete ovlivnit další věci, které vám nepřísluší, jako je například umístění souborů na disku. Váš SQL server je pouze virtuální. Obsahuje uživatelské účty a sadu databází, z nichž každá se může být na úplně jiném hardware. Nemáte k dispozici plnohodnotnou databázi master (pouze její simulovanou podmnožinu s databázemi a uživatelskými účty), msdb ani tempdb. Nelze tudíž pracovat s objekty, které se vytvářejí na úrovni celého serveru, jako jsou např. SQL joby, certifikáty, linkované servery a další funkčnosti závislé na databázích master, msdb a tempdb. Přesnější popis najdete v Guidelines and Limitations.

Naopak vám přibývá jedna povinnost – nastavení firewallu. SQL Azure má vestavěný firewall na úrovni databáze, který lze nastavovat buď prostřednictvím portálu pro správu anebo voláním systémových uložených procedur přes T-SQL jazyk. Pravidla firewallu určují, z jakých adres je možné se k příslušnému databázovému serveru připojit.

Další povinností je správa uživatelských účtů – SQL Azure používá SQL autentizaci, Windows autentizace není možná. Veškerá komunikace s SQL Azure je vždy šifrována, nemusíte nic nastavovat.

Nezapomeňte též na zálohování dat z důvodu obnovy při lidské chybě (např. neúmyslné smazání důležitých dat). SQL Azure je v tuto chvíli zálohován a chráněn proti systémovým selháním, nicméně neumožňuje vyžádat si obnovu dat do konkrétního časového okamžiku, což je podmínka jakékoliv nápravy uživatelských chyb. Doporučuje se proto použít nástroje pro import a export dat – např. DAC v2.0 CTP anebo SQL Azure Migration Wizard. Pokud chcete, aby byla vyexportovaná data transakčně konzistentní, musíte před exportem zastavit uživatelskou aktivitu anebo si udělat konzistentní kopii databáze (za takto vytvořenou kopii platíte standardní částku dle ceníku po celou dobu její existence).

Rozdíly z pohledu vývojáře

Prvním místem, na které se podíváme, je připojovací řetězec. V tuto chvíli je podporováno připojení přes ODBC a ADO.NET, nikoliv OLEDB. Připojovací řetězec je třeba upravit následovně:

  1. Jako jméno serveru použijte jeho DNS jméno, tedy místo Data Source=SERVER; napíšete Data Source=a1b2c3d4.database.windows.net;
  2. Protože nelze použít integrovanou autentizaci, je třeba v připojovacím řetězci uvést jméno a heslo pro SQL autentizaci
  3. Vždy je nutno uvést jméno databáze v připojovacím řetězci, tedy Initial Catalog=JmenoDatabaze;

Důležitým omezením je též izolace každého databázového připojení na jednu jedinou databázi, což má dva důvody. První je technický, neboť ostatní databáze serveru vůbec nemusí být umístěny na stejném počítači. Druhý je bezpečnostní – vzhledem k tomu, že na stejném počítači mohou být umístěny i databáze jiných uživatelů, nešlo by vyloučit pokusy o proniknutí do cizích, špatně zabezpečených databází. To má různé důsledky, jako například:

  1. Databázi je nutno zadat již v připojovacím řetězci
  2. Nelze použít příkaz USE pro přepnutí databáze
  3. Nelze používat tříčlenné a čtyřčlenné názvy objektů (database.owner.object nebo server.database.owner.object), tudíž nelze vytvářet distribuované dotazy do dat.
  4. Nelze používat vzdálené servery (remote servers, linked servers)
  5. Jednotlivá databázová spojení nemohou sdílet data v tempdb
  6. Transakce mohou být pouze nad jedním databázovým připojením a tedy jednou databází. Distribuované transakce nelze použít.

Další sada omezení spočívá v nedostupnosti některých funkcí databázového enginu, konkrétně takových funkcí, které by mohly ohrozit výkonnost serveru pro databáze ostatních uživatelů nebo při kterých není možná dokonalá izolace databází od sebe. Sem patří například full-textové indexy, možnost běhu .NET kódu v databázovém jádře (SQLCLR) a některé další – přesný seznam všech omezení je zde, případně v tomto whitepaperu. Dá se předpokládat, že omezení tohoto typu budou časem ubývat.

Poslední skupinu omezení tvoří „pravidla dobrého chování“ vzhledem k ostatním uživatelům. Do této skupiny patří například výkonnostní omezování anebo dokonce ukončení transakce, která spotřebovává nadměrné množství zdrojů – více informací najdete zde.

V příštím díle si povíme o alternativním způsobu uložení dat, kterým je tzv. Azure Storage. Pokud si chcete vše prakticky vyzkoušet, je možné si stáhnout nástroje a zřídit bezplatný účet Introductory Special (vyžaduje zadání platební karty jako záruky, ale je zdarma – podrobné instrukce zde) a vyzkoušet praktická cvičení z Windows Azure Platform Training Kitu, případně tutoriály Quick Start.

Michael