Z racji iż w pracy ostatnio zajmuję się tematyką Windows Azure oraz migracją dużego portalu na tę platformę napiszę dziś kilka słów o samej platformie oraz o jej możliwościach. Po pomyślnej migracji (obecnie jestem w trakcie) napiszę jeszcze o czym należy pamiętać migrując projekty. Nawet na obecnym poziomie uzbierałem całkiem spory know-how na ten temat ;)

Windows Azure

Z racji iż Azure jest względnie nowy przydałoby się kilka słów na jego temat. Windows Azure jest pewnego rodzaju wariacją systemu Windows Server 2008 R2, którego jednak nie da się tak po prostu zainstalować na własnej maszynie. Platforma Azure (Azure Services Platform) to nowa forma dystrybucji oprogramowania, w której nie trzeba posiadać materialnej infrastruktury sieciowej i sprzętowej do wystawienia widocznej w sieci usługi, strony internetowej lub portalu. Zamiast tego można używać mocy obliczeniowej dostępnej w serwerowniach Microsoftu i płacić za wykorzystane zasoby (moc procesora, transfer danych, ewentualną obsługę CDN (Content Delivery Network) oraz opłaty magazynowe (storage danych)) oraz stawki miesięczne za działanie platformy. Wyliczenie jest trochę długie, ale sumaryczne opłaty są częstokroć korzystniejsze niż wykupywanie serwera dedykowanego lub utrzymywanie i kolokacja własnego serwera. Uwaga! To moje porównanie nie bierze pod uwagę serwerów wirtualizowanych oraz ogólnie tych stojących na Linuxie, które dla odmiany są pewnie zdecydowanie tańsze – to tak uprzedzając zgryźliwe komentarze Tomusia :)

Zalety

  • Łatwość obsługi (zarówno tworzenie aplikacji, jej wrzucenie do usługi i administracja)
  • Dostęp Remote Desktop do poszczególnych instancji serwerów Azure.
  • Spora zgodność Windows Azure z Windows Server 2008 R2 oraz SQL Server 2008 z SQL Azure (chociaż są rzeczy, o których należy pamiętać – o nich w następnym wpisie)
  • Usługa skalowalna (automatycznie albo ręcznie można dołączyć nowe instancje w ciągu kilku minut)
  • Obsługa wielu języków programowania i większości popularnych frameworków (w szczególności ASP.NET MVC, dotnetnuke i wiele innych), a z języków programowania: PHP, Java, Ruby
  • Potencjalna możliwość debugowania kodu na platformie Windows Azure (trzeba niestety mieć Visual Studio 2010 w wersji Ultimate by aktywować IntelliTrace na remote server)
  • Łatwa migracja solucji do zgodnej z Cloud Services (wystarczy dodać nowy projekt do obecnej solucji, ustawić go jak StartUp Project i to wszystko)
  • Na potrzeby testów można uruchamiać swoją aplikację dla Azure w lokalnym środowisku testowym (z emulatorem platformy i emulatorem Azure Storage), ale nie jest to idealne (np. w lokalnym środowisku testowym działa stanowość ASP.NET, a nie powinna – bo docelowo nie będzie)
  • Wygląda na to, że możliwa jest instalacja MySQL na Windows Azure (co daje sporo możliwości i jest sposobem na ominięcie ograniczeń i ceny wykorzystania SQL Azure)

Wady

  • Oczywiście wymagane jest Visual Studio 2010 (poprzednie wersje zwyczajowo są niewspierane), które jest najgorszą wersją Visual Studio. Jako plus można dodać fakt, że Azure SDK nie zmniejsza znacząco wydajności środowiska (i tak już marnej)
  • Niedoskonały i nie do końca pewny mechanizm symulacji platformy Azure
  • Duże ograniczenia dla bazy SQL Azure i wysoka cena. Można mianowicie posiadać maksymalnie 5GB bazę danych (która kosztuje 35,425 € per miesiąc)
  • Chcąc zdebugować swoją aplikację na Windows Azure trzeba mieć Visual Studio 2010 Ultimate (nie dość, że sporo droższe to jeszcze zdecydowanie wolniejsze)
  • Dużo zmian w silniku SQL Servera Azure i dużo ograniczeń (co jest szczególnie uciążliwe, gdy chcemy migrować na Azure bazę z 200 tabelami i 1500 procedur składowanych ;]) – na szczęście jest tool wydany przy wsparciu społeczności .NET wspomagający proces migracji (w referencjach są namiary na niego). Całkiem przydatny może się też okazać tool firmy RedGate - SQL Compare (nawiasem mówiąc jest świetny i przydatny nie tylko do SQL Azure)

O pracy z Windows Azure

Pracując z platformą należy zasadniczo pamiętać o kilku ważnych rzeczach. Przede wszystkim referencje: jeśli używamy bibliotek innych od systemowych, to należy dla każdej ustawić property Copy Local na True. W szczególności dotyczy to sytuacji, gdy będziemy stosować ASP.NET MVC 1+ – musimy wtedy dołączyć dllkę do obsługi MVC.
image

Kolejna rzecz – aby móc deployować do Azure bezpośrednio z Visual Studio należy w panelu zarządczym usług Azure (nazywa się to po prostu Windows Azure Platform) dodać certyfikat do Management Certificates (jest to trochę mylne, bo można dodawać certyfikat bezpośrednio do Hosted Services do interesującej nas usługi, ale tam umieszcza się certyfikaty do RDP, a nie do deploymentu). Na załączonym obrazku widać, gdzie dokładnie powinno się wrzucać certyfikat.

Warto też wspomnieć o narzędziu takim jak Database Manager. Jest to prosty tool do wykonywania prostych operacji na bazie bezpośrednio w przeglądarce. Podobnie jak reszta Windows Azure Platform napisany został w Silverlighcie – przez co działa całkiem nieźle, jednak nie należy go włączać, gdy mamy więcej niż 80 procedur składowanych. W momencie ładowania danych plugin się notorycznie zawiesza i nie da się z niego wtedy nawet skorzystać. Ot – takie Microsoftowe smaczki ;]

Można się za to podpiąć bez większych problemów za pomocą standardowych narzędzi bazodanowych do takiej bazy SQL Azure lub normalnie z kodu programu za pomocą ConnectionStringa. Narzędzia firmy RedGate działają bez najmniejszych zarzutów, ale za to pewne problemy mogą wystąpić przy korzystaniu z SQL Server Management Tool – w domu łączę się z bazą bez najmniejszych problemów, za to w pracy połączenie jest niemożliwe. Nie pomogło wyłączenie zapory, antywirusa oraz odblokowanie portu 1433 na routerze. Nie jestem specem od zagadnień sieciowych, ale na chłopski rozum nie jest to problem, którego rozwiązanie zależy ode mnie, więc korzystam po prostu z innych narzędzi do łączenia z bazą.

Niedługo może napiszę kilka słów na temat całego procesu migracji projektu na Windows Azure, ale najpierw przydałoby się go ukończyć :)

Referencje

Developing and Deploying Windows Azure Apps in Visual Studio 2010

Cennik Windows Azure (Polska)

Tworzenie aplikacji dla Windows Azure (Tomasz Kopacz)

PHP na Windows Azure - Niezbędne narzędzia

Transact-SQL Support (SQL Azure Database)

SQL Azure Migration Tool