Microsoft SQL Server v cloudu
Nedílnou součástí migrací aplikací využívajících jako své úložiště Microsoft SQL Server do cloudového prostředí Microsoft Azure je i přesun relačních databází do cloudu. To nemusí být na první pohled zcela jednoduchý úkol, neboť máme na výběr bohatou škálu služeb vhodných pro provoz vašich databází. Cílem tohoto článku je přiblížit jednotlivé služby a jejich varianty, jež se používají pro provoz databází Microsoft SQL Server v Azure, a upozornit vás na klíčové rozdíly mezi těmito službami.
IaaS nebo PaaS?
Na vlastní infrastruktuře jste zvyklí provozovat Microsoft SQL Server buď ve virtualizovaném prostředí, nebo instalovaný přímo na fyzickém hardwaru. Nejjednodušší způsob migrace SQL Serveru spočívá v jeho migraci do virtuálního stroje provozovaného v rámci Infrastructure-as-a-Service (IaaS) služby Azure Virtual Machine. Takto provozovaný SQL Server je nerozlišitelný od vaší běžné instalace, zahrnuje všechny služby a komponenty SQL Serveru, na které jste zvyklí, což značně zjednodušuje migraci a omezuje případné problémy, které při migraci vzniknou. Byť se tento přístup může zdát jako ideální, nese s sebou řadu značných nevýhod – vše je spojeno s tím, že za správu virtuálního stroje jste kompletně zodpovědní vy. Musíte vyřešit správné nasazení SQL Serveru, zálohování svých databází, aktualizace a zabezpečení OS i SQL Serveru, nemluvě o vysoké dostupnosti, protože Azure Virtual Machine nemá SLA na vysokou dostupnost, pokud se jedná o jediný virtuální server a nemáte alespoň dvojici serverů v availability setu, za něž také platíte. Vysoká dostupnost v podání SQL Serveru prakticky znamená nasazení a následnou správu AlwaysOn Availability Groups. A to jsme ještě zapomněli na to, že SQL Server je třeba ve virtuálním serveru také správně pokrýt licencemi. S tím vám může pomoci Microsoft, protože je možné jednoduše pronajmout licenci na SQL Server, která je účtována jako součást virtuálního stroje po hodinách v případě, že je stroj spuštěn.
Pokud se chcete od těchto problémů oprostit, je na zváženou zkusit své databáze nasadit do některé z variant Platform-as-a-Service (PaaS) služby Azure SQL Database, kde zodpovědnost za provoz a údržbu přechází přímo na Microsoft.
Azure SQL Database
Služba Azure SQL Database umožňuje hostovat vaši relační databázi jako PaaS službu, což prakticky znamená, že provozujete databázi Microsoft SQL Server plně spravovanou Microsoftem a ten za vás vyřeší vše od nasazení služby s komplexní architekturou, jež zajišťuje vysokou dostupnost (SLA na schopnost připojit se k databázi je 99,99%), přes zabezpečení a zálohování databází až po pravidelné aktualizace služby. Vaší jedinou zodpovědností pak zůstává vytvořit nové nebo přemigrovat stávající databáze ze SQL Serveru a upravit svou aplikaci tak, aby se připojovala místo na váš lokální SQL Server na adresu Azure SQL Database. Aplikace tento rozdíl mnohdy ani nepozná, protože Azure SQL Database na pozadí je jen jiná verze SQL Serveru.
Služba Azure SQL Database je poskytována ve 3 hlavních variantách: Single Database, Elastic Pool a Managed Instance. Správná volba použité varianty je velmi důležitá, protože ovlivňuje celou řadu vlastností dané služby, a proto si jednotlivé varianty blíže objasníme. Ve všech variantách je služba primárně zpoplatněna podle rezervovaného výpočetního výkonu pro vaši databázi, nemusíte tedy řešit pronájem nebo zakoupení licencí. Někdy je však výhodné využít nabídky Azure Hybrid Benefit, která pro některé varianty této služby umožňuje získat výraznou slevu na provoz služby díky tomu, že vlastníte licence pro SQL Server ve svém vlastním prostředí.
Single Database
Varianta Single Database slouží k provozu izolovaných databází, kde požadujete výkonnostní garance pro každou databázi zcela nezávisle. Je nutné si uvědomit, že v této variantě máte hostovanou pouze relační databázi bez přístupu k instanci SQL Serveru a bez dalších komponent SQL Serveru (i bez SQL Server Agenta). Přesto, že jednotlivé databáze mohou být na stejném logickém serveru (mají stejnou adresu pro připojení a stejného správce), prakticky mohou a také budou interně hostovány na odlišných virtualizovaných serverech, kde mají s pomocí různých technik rezervované výpočetní prostředky. Logický server slouží pouze jako brána, která ověří přihlašovaný login a přesměrovává spojení na server, kde je zrovna hostována požadovaná databáze, k níž se snažíte připojit. Vzhledem k výše popsané architektuře vznikají další omezení, se kterými je třeba počítat, jako například, že není možné spouštět dotazy napříč různými databázemi na stejném logickém serveru, což bude překážka pro migraci řady aplikací, jež mají více provázaných databází a dotazy či transakce napříč databázemi využívají. Vzhledem k tomu, že platíte primárně za rezervovaný výpočetní výkon a zvolenou Service Tier, je ve vašem zájmu, abyste tuto variantu volili v případě, kdy danou databázi zvládnete trvale vytížit.
Výpočetní výkon databáze je buď určen množstvím zakoupených Database Transaction Units (DTU), nebo lze nově rezervovat výkon i po CPU jádrech (vCore). Za tajemnou jednotkou DTU nehledejte víc než nastavení limitů na zdroje vaší databáze, jež jsou pro vás rezervovány na hostujícím SQL Serveru, tak, abyste nemohli negativně ovlivňovat další bezpečně izolované zákazníky běžící na sdílené infrastruktuře. Jednoduše můžete monitorovat, kolik procent rezervovaného výkonu skutečně využíváte, a podle toho okamžitě upravit rezervace výkonu (navýšení z 10 DTU na 20 DTU povede k tomu, že vaše databáze zpracuje dvojnásobek zátěže, kolik požadavků za vteřinu to konkrétně bude, se však odvíjí od velikosti databáze a složitosti dotazů). Běh databáze je účtován po hodinách. Pokud využíváte rezervaci DTU, máte na výběr jednu ze tří Service Tiers – Basic (max. 5 DTU, 2 GB), Standard (až 3000 DTU, max. 1 TB) a Premium (až 4000 DTU, max. 4 TB) –, které určují další charakteristiky služby, včetně objemu úložiště v ceně, výkonu úložiště a dostupnosti funkcionalit, jako jsou In-Memory OLTP, Columnstore indexy či read-only replika.
Pokud zvolíte rezervaci výkonu po jádrech (s pevně daným množstvím RAM na jádro), což pro vás může být mnohem lépe uchopitelné, máte dostupné také tři Service Tiers – General Purpose (vhodné pro většinu zátěže), Business Critical (velmi nízká latence úložiště, dostupná sekundární replika pro čtení) a Hyperscale (navrženo speciálně pro provoz databází do velikosti 100 TB).
Elastic Pool
Pokud máte více izolovaných databází, které by mohly sdílet výpočetní prostředky, je Elastic Pool vhodnou variantou služby Azure SQL Database. Tato varianta se vyplatí zejména v situaci, kdy k vytížení jednotlivých databází dochází v různé denní doby a málokteré databáze dosáhnou svého nejvyššího vytížení ve stejný okamžik. Pokud byste zvolili pro tento případ Single Database, zbytečně byste platili za rezervovaný výkon jednotlivých databází, který by byl nemalou část dne nevyužitý. U varianty Elastic Pool zakoupíte balík výkonu, který necháte sdílet skupinou databází. Velmi zajímavé použití může být třeba implementace vlastní aplikace, kterou si od vás jako službu kupují různí zákazníci, kteří ale mají být vhodně izolovaní. Izolace jednotlivých zákazníků lze dosáhnout až na úrovni databáze, protože pro každého zákazníka nasadíte novou databázi do Elastic Poolu s danými výkonnostními limity a cenově se vám to stále vyplatí, přestože může jít o desítky nebo stovky databází. Je důležité si ale uvědomit, že ani v tomto případě se nejedná o klasickou instanci SQL Serveru, tedy dotazy napříč databázemi stále nejsou možné.
Managed Instance
Za účelem zvýšení kompatibility služby Azure SQL Database s klasickým SQL Serverem Microsoft uvedl novou variantu této služby v podobě Managed Instance. Zde na rozdíl od předcházejících variant máte k dispozici plnohodnotnou instanci SQL Serveru, která je ale plně spravována Microsoftem, včetně vysoké dostupnosti dle SLA 99,99 %. Díky tomu se podstatně snižuje šance, že vaše aplikace narazí na problémy s kompatibilitou při migraci, neboť je podporována celá řada dalších funkcí, jež běžně nebyly v Azure SQL Database k dispozici – od zjednodušené migrace s pomocí obnovení plné zálohy z běžného SQL Serveru (jiné varianty nepodporují obnovu plné zálohy a je nutné pro migraci generovat BACPAC balíček), přes dostupnost SQL Server Agenta (pouze kroky typu T-SQL), Database Mailu, Service Brokera, SQL CLR, Change Data Capture, transakční replikace až po možnost spouštět dotazy a transakce napříč více databázemi.
Managed Instance má výkon vždy rezervovaný po jádrech (vCore), úložiště zpoplatněné dle velikosti databáze a jejích záloh a dále si vybíráte Service Tier – General Purpose a Business Critical. Vždy běžíte na dedikované virtuální infrastruktuře, která má rezervovaný výkon a není sdílena s dalšími zákazníky. Managed Instance se nehodí pro jednotlivé databáze o malé zátěži, neboť minimální počet jader je aktuálně 8, čemuž odpovídají i následné náklady, byť na menších instancích se pracuje. Přesto, že máte přístup k instanci SQL Serveru, je zajištěno, abyste nemohli poškodit její konfiguraci a narušit správu, kterou provádí Microsoft (nasazení, aktualizace, zálohování, kontrola integrity a vysoká dostupnost). Některé vybrané příkazy a nastavení jsou prostě blokovány – např. není možné pouštět běžné zálohy, pouze Copy-Only Full Backup, abyste nerozbili závislosti záloh, které pouští Microsoft, mezi sebou, nemůžete zasahovat do konfigurace vysoké dostupnosti, a hlavně je třeba si uvědomit, že nemáte přístup k operačnímu systému, kde daná instance běží. Pokud zakládáte databázi, tak neuvádíte cestu na disku k jednotlivým souborům databáze, disky vytváří a spravuje Microsoft. Dle zvolené Service Tier je aktuálně limit na velikost databáze až 8 TB, ale připravuje se podpora 100 TB databází s využitím architektury Hyperscale.
Provoz datových skladů v Azure SQL Data Warehouse
Pokud zvažujete migraci řešení Business Intelligence do cloudu, může být pro provoz vašeho datového skladu velmi zajímavá PaaS služba Azure SQL Data Warehouse, která se od představených variant služby Azure SQL Database liší primárně v tom, že je zcela nevhodné ji použít pro jakékoliv OLTP databáze, neboť je optimalizována pouze na zátěž charakteristickou pro datové sklady (dávkové načítání dat a následné rozsáhlé analytické dotazy). Díky přítomnosti indexů Columnstore jste samozřejmě schopni hostovat datový sklad i ve službě Azure SQL Database Single Database či Managed Instance, ale pravděpodobně velmi rychle narazíte na kapacitní limity, primárně z pohledu úložiště, druhotně z pohledu výpočetního výkonu pro náročné dotazy. Zato služba Azure SQL Data Warehouse je schopna obsloužit i datové sklady o velikosti v řádu petabajtů a díky zcela odlišné architektuře vycházející z edice Parallel Data Warehouse SQL Serveru dokáže jako jediná rozložit výpočet jednoho dotazu na veliké množství serverů, což se u velkých datových skladů obzvláště hodí.
Zvláštností této služby je také to, že ji lze zastavit. Díky tomu pak neplatíte za výpočetní výkon, pouze za využité úložiště, ale pochopitelně se nemohou připojit žádní klienti. Pokud byste však datový sklad nedotazovali napřímo během dne a pouze jej v noci spustili, naplnili novými daty, přepočítali následně OLAP kostku a zastavili, můžete při provozu této služby dosáhnout velmi značných úspor. Vzhledem k tomu, že v Azure platíte běžně za všechna odchozí data z datacentra, je cenově nevýhodné přenášet veliké objemy dat uložené v Azure na svou vlastní infrastrukturu, kde data zpracováváte, což by byl typický příklad, pokud byste měli datový sklad v Azure a OLAP kostky na vlastní infrastruktuře. Proto je vhodné zpracování dat z datového skladu přesunout do stejného Azure datacentra, kde máte datový sklad (platí se i za přenosy dat mezi datacentry).
SQL Server Analysis Services můžete provozovat buď ve virtuálním stroji se všemi nevýhodami IaaS řešení, jež byly zmíněny dříve, nebo můžete zvážit PaaS službu Azure Analysis Services, což jsou analytické služby SQL Serveru plně spravované společností Microsoft. Ty jsou však omezeny na podporu pouze tabulárního modelu bez podpory multidimenzionálního modelu, což může být značná překážka pro migraci.
SQL Server Integration Services je možné nahradit PaaS službou Azure Data Factory, která kromě nového runtime pro tvorbu a provoz ETL procesu disponuje i podporou pro klasické SSIS balíčky, což vám může zjednodušit proces migrace.
Vlajkovou lodí Microsoft v oblasti generování reportů je cloudová služba Power BI, která umožňuje generovat působivé interaktivní reporty, jež lze napojit na různé datové zdroje včetně Azure SQL Data Warehouse nebo Azure Analysis Services. Varianta Premium služby Power BI vám navíc umožní nahrát a následně generovat reporty ve formátu stejném jako SQL Server Reporting Services.
Shrnutí
Při migraci databází Microsoft SQL Server do cloudu Microsoft Azure máme celou řadu možností, jak postupovat. Osobně bych vám doporučil využít primárně PaaS služeb a ponechat na Microsoftu zodpovědnost za jejich provoz a údržbu, díky čemuž vy se budete moci věnovat více rozvoji samotné aplikace či řešení Business Intelligence. Pokud problémy s kompatibilitou použití PaaS varianty služby neumožní, vždy máte možnost provozovat klasický SQL Server ve virtuálním serveru IaaS anebo oba tyto přístupy vhodně zkombinovat.
Pokud si na téma provozu SQL Serveru v cloudu chcete se mnou povídat tři dny a službu Azure SQL Database si prakticky vyzkoušet, přijďte do školícího střediska Gopas na školení GOC212 Microsoft Azure – správa SQL Server relačních databází.
David Gešvindr, Azure MVP