Minął już miesiąc od momentu gdy zacząłem się zajmować  Windows Azure oraz przeprowadzać migrację imageportalu firmowego na tę platformę i warto byłoby podzielić się uwagami, które przez ten czas uzbierałem. Jest ich trochę i jak zawsze – będą niezbyt dla Microsoftu pozytywne. Ostatnio na moim blogu to całkiem norma, ale nie wynika to z tego, że pałam jakąś wrodzoną nienawiścią do tej firmy. Nie. Po prostu Microsoft przestał być firmą technologiczną – więc już oprogramowania nie potrafi dobrego wyprodukować :)

Zanim może przytoczę kilka ciekawych niuansów z pracy z platformą kilka informacji pomocniczych. Po pierwsze – część usług Windows Azure moja firma ma za darmo w związku z udziałem w jakimś konkursie prowadzonym przez Microsoft. To co mamy za darmo to: 3 bazy danych (każda do 1GB), 750 godzin obliczeniowych (przy małej wielkości instancji obliczeniowej), transfer danych (14 GB per miesiąc), storage (10 GB). Powiedzmy – przeciętne. Należy się tylko zastanowić czy 750 godzin obliczeniowych per miesiąc to dużo czy nie. Dla osoby niezorientowanej może się to wydawać całkiem sporo; jednak biorąc pod uwagę to, jak są naliczane okazuje się, że 750 h miesięcznie to jest śmiesznie mała ilość.

Z początku – tworząc paczki wdrożeniowe dla Azure i wrzucając je na platformę w celu przetestowania jakby nie przejmowałem się tymi limitami, sądząc, że są na tyle duże, że pozwolą na spokojne i bezproblemowe przetestowanie aplikacji oraz procesu migracji dużych portali partnerów Microsoftu, jednak jednego dnia w pracy dostaliśmy mejla od obsługi Windows Azure o wykorzystaniu 75% dostępnej puli. Trochę zdziwiony zacząłem drążyć temat i się okazało właśnie, że godzina obliczeniowa odpowiada 1 godzinie działania aplikacji na małej instancji. A to już dużo, gdyż w miesiącu mamy 30 dni * 24h = 720 h. Innymi słowy: ups ;]

Jak to wygląda zaś kosztowo, czyli ile musielibyśmy zapłacić za te 720h, gdybyśmy nie byli w tym konkursie? 720 h * 0,0852 € = 61,344 €. Sporo, ale to nie wszystko; do tego należałoby doliczyć 7,085 € za jedną 1GB instancję SQL Azure oraz opłatę za transfer równą 0,1064 € za każdy 1GB wychodzącego i 0,071 € przychodzącego ruchu. W średnich i średnio-dużych portalach miesięcznie można uzyskiwać około 30GB transferu na miesiąc (mogę się nieźle mylić), co oznaczałoby koszt za sam transfer równy 3,192 €.

Reasumując: dla małej stronki / portalu miesięcznie dostaniemy rachunek od Windows Azure w wysokości około 70 €, co przekłada się na około 281 PLN. Czy to dużo? Porównajmy to z tradycyjnymi ofertami (serwer dedykowany w Home oraz hosting ASP.NET w Webio):

Windows Azure (Mała instancja) Webio (plan rozszerzony) Serwer dedykowany Home.pl
CPU: 1,6 GHz
RAM: 1,75 GB
HDD: 225 GB
CPU: N/A
RAM: N/A
HDD: 4GB
CPU: 8-Core, 2.0 GHz 12 MB L3
RAM: 4GB DDR3
HDD: 500GB
Mała instancja obliczeniowa Webio – Plan Rozszerzony Home Basic Server
281 PLN / mies. 14 PLN / mies. 850 PLN / mies.

To takie zgrubne porównanie, a teraz czas na bardziej konkretne:

Windows Azure Serwer dedykowany Home.pl
CPU: 4 x 1,6 GHz
RAM: 7 GB
HDD: 1000 GB
CPU: 8-Core, 2.0 GHz, 12 MB L3
RAM: 4GB DDR3
HDD: 500GB
Duża instancja obliczeniowa Home Basic Server
około 1000 PLN / mies. 850 PLN / mies.

To porównanie daje nam trochę więcej informacji, jednak należy zauważyć, że mimo wyższej ceny dla Windows Azure przy porównywalnych możliwościach hardware, mamy sporo ograniczeń tj. baza danych i transfer. Ograniczenia te w przypadku serwera dedykowanego w Home.pl nie występują, zaś jeśli chcielibyśmy podciągnąć SQL Azure do wyższej wersji, która bardziej odpowiadałaby biznesowym wymaganiom dla tak dużej instancji to musielibyśmy dopłacić dodatkowo 354,565 € na miesiąc za bazę SQL Azure 50GB. To naprawdę dużo. Choć istnieje podobno możliwość bezproblemowej instalacji na Windows Azure bazy MySQL (skoro ma się dostęp do instancji systemu przez RDP, to czemu nie; chyba, że są ograniczenia w uprawnieniach). Wtedy pomijamy wszystkie opłaty związane z bazą SQL Azure, jednak pojawiają się inne problemy – mianowicie instancja Windows Azure może być w losowym momencie zastąpiona inną maszyną, na której przywrócony zostanie snapshot naszej instancji, jednak brak jest pewności, czy nie będzie to po prostu zrzut plików naszej witryny na czystej instalacji Windows Azure (czyli bez żadnych zainstalowanych programów). Może się więc zdarzyć, że bez ostrzeżenia stracimy naszą bazę danych i nasza aplikacja nie będzie odpowiadała.

W czym zaś przeważa Windows Azure nad serwerem dedykowanym od Home.pl poza ceną usługi? Przede wszystkim oferuje darmowego load balancera. Jednak należałoby mieć wcześniej minimum dwie instancje naszej aplikacji, co przełożyłoby się bezpośrednio na dwukrotny wzrost kosztów (wszakże to 2 instancje Windows Azure ;]). I na tym etapie przestaje to być w zupełności opłacalne. Jeśli założymy, że taka rozsądnej wielkości instalacja zajmie nam 4 serwery i do tego 1 serwer wdrożeniowo-testowy to otrzymujemy opłatę miesięczną w granicach 6 500 PLN. Odnoszę wrażenie, że przy takich kosztach naprawdę bardziej opłaca się zainwestować we własną infrastrukturę serwerową lub niewielką farmę serwerów z kolokacją w jakiejś serwerowni. Owszem – będzie to mniej skalowalne rozwiązanie, będzie wymagało zatrudnienia obsługi technicznej, ale daje większe możliwości zarówno dla programistów tworzących oprogramowanie na taką platformę, jak i łatwiejsze i bardziej wszechstronne wykorzystanie baz danych (oraz brak tych śmiesznych ograniczeń SQL Azure – zarówno braków zgodności jak i ograniczeń wielkości).

A więc reasumując: jeśli  jesteś wielkim fanem Microsoftu i fakt wypuszczenia przez tę firmę nowego produktu jakim jest Windows Azure zmusił Cię do migracji wszystkich Twoich projektów na tę platformę z powodu rzekomej redukcji kosztów, to zaprzestań się nad tym zastanawiać. W obecnej chwili Azure jest zbyt mało dopracowanym (zarówno technicznie jak i biznesowo) rozwiązaniem by się nim na serio interesować. Ponadto w kwestii finansowej wypada naprawdę słabo. Jeśli zaś w dalszym ciągu bredzisz coś na temat cloud computing i tego, że to przyszłość świata, to… proponuję porzucić cały .NET i przesiąść się na coś zupełnie innego. Inne platformy tj. Amazon EC2, Google AppEngine, GoGrid z językami tj.  PHP, Ruby, Java, Python na konkurencyjnych platformach istnieją i mają się dobrze, oraz mają znacznie bardziej konkurencyjną cenę w stosunku do Windows Azure. A, że .NET i tak powoli umiera, to pozwoli to w późniejszym czasie się przystosować do nowych realiów ;]

Referencje

Szczegóły opłat za użycie w rachunkach platformy Windows Azure