Přesun MSTV.CZ do cloudu – praktické zkušenosti

Aniž byste si zřejmě povšimli nějaké změny, byla naše televize se screencasty www.mstv.cz přenesena do cloudu. Jak se můžete dočíst i v malém textu dole v patičce, běží nyní na Windows Azure a data jsou uložena v SQL Azure. Důvodem přesunu byly nižší náklady ve srovnání s dedikovaným hostovaným serverem a také jsme samozřejmě nechtěli být onou “kovářovou kobylou”. V tomto příspěvku bych se rád podělil o své zkušenosti s přenosem aplikace.

SQL Azure

Při migraci do cloudu určitě začněte s databází, je to celkem pohodlné a snadno můžete běžet testovací aplikaci u sebe proti SQL Azure databázi – stačí změnit connect string. Pokud máte Management Studio verze 2008 R2, můžete si naskriptovat databázi (schéma i data) s volbou cíle skriptování jako SQL Azure, vygenerovaný skript pustíte proti SQL Azure a je to hotové. Tedy alespoň teoreticky. V praxi zjistíte, že SQL Azure nepodporuje všechny rysy “normálního” SQL Serveru (seznam nepodporovaných věcí je zde). Ze seznamu vám nejpravděpodobněji budou chybět následující:

  • Fulltextové hledání
  • Možnost instalace vlastního .NET kódu do SQL enginu
  • Omezení spojení na jednu databázi – zapomeňte na distribuované transakce mezi více databázemi, linkované servery, názvy objektů delší než dvě části (server.database.schema. object ani database.schema.object nepůjdou), použití příkazu USE DatabaseName apod.

Osobně jsem narazil na třetí záležitost – aplikace používala dvě databáze – jednu pro “živá” data, druhou pro logování provozu, přičemž mezi nimi byly vazby. Sloučit obě databáze do jedné za použití dvou různých schémat bylo sice přímočaré, ale pracné.

Windows Azure

Přesun ASP.NET aplikace na Windows Azure je v zásadě triviální, ale opět jsou tu ALE. Technicky stačí přidat do řešení ve VS nový projekt typu Azure Service, do něj přidaj jako web roli existující webovou aplikaci, spustit na lokálním Azure emulátoru, po odzkoušení nasadit do cloudu, spustit tam. A nyní ke zmíněným ALE. Přesun do Windows Azure je ekvivalentní spuštění aplikace v novém operačním systému, kde nejste administrátoři a ani vaše aplikace nemá administrativní práva. Pro “hodnou” aplikaci typu “šahám do databáze a ukazuji co je v ní” není třeba dělat žádné změny a vše funguje hlace. V jiných případech můžete narazit např. na následující problémy:

  • Na OS ve Windows Azure není SMTP server. Můžete použít jiný svůj server, nebo např. Hotmail.
  • Nelze přistupovat k souborovému systému s výjimkou oblastí definovaných v konfiguraci, a ani k těmto neznáte fyzickou cestu.
  • Vaše aplikace není administrátor. Volání API vyžadujících administrátorská práva k lokálnímu počítači selžou.
  • Musíte upravit logování a diagnostiku, které jsou ve Windows Azure jiné (třída DiagnosticMonitor)
  • Nemáte plnou kontrolu nad konfigurací webového serveru.

V případě MSTV.CZ jsem narazil na chybějící SMTP server a použil jsem Hotmail. Logování a diagnostika problém nebyl, ale samozřejmě jsem je nastavil coby součást “dobrého vychování” aplikace. Co mne překvapilo je fakt, že vlastní webový server běží na portu 20000, i když je zvenčí na firewallu zpřístupněn na portu, který mu určíte, typicky 80. To může způsobovat potíže, pokud manipulujete s URL příchozího požadavku (např. přes Context.Request.Url), což je relativně vzácná záležitost, ale v případě MSTV.CZ využitá při přesměrování z https://it.mstv.cz na https://www.mstv.cz/it

Abych to shrnul, šlo to celkem hladce.

Michael