Platformy cloudowe - porównanie modeli IaaS vs PaaS

W artykule o skalowalności wspomniałem temat platform cloudowych. Dziś więcej o tym, czym są platformy cloudowe, w jakich modelach są oferowane, oraz co różni modele IaaS oraz PaaS...

Platforma cloudowa

  • pozwala programistom tworzyć i uruchamiać na niej aplikacje, oraz przechowywać dane
  • zwykle umożliwa zarządzanie z poziomu przeglądarki www poprzez panel klienta
  • pozwala na proste i precyzyjne przydzielanie zasobów
  • najczęściej umożliwia opłaty w modelu "pay-as-you-go", czyli płacisz tylko za to, czego faktycznie używasz.

Ogromnym plusem wykorzystywania chmury jako środowiska dla aplikacji webowej jest łatwość przydzielania zasobów. W standardowym modelu jeżeli chcemy zbudować np. aplikację obsługującą sklep internetowy, wybieramy serwer odpowiedniej mocy, z przydzielonym odpowiednim miejscem na dyskach twardych (zależnym od wybranego planu hostingowego), i dokonujemy opłaty z góry za jakiś okres (miesiąc/kwartał/rok). Natomiast w przypadku platform cloudowych możemy wykupić dodatkowe moce obliczeniowe, lub miejsce na przechowywanie danych nawet na kilka godzin/dni. Daje to ogromną swobodę skalowania wydajności aplikacji wraz z przewidywaną zmiennością obciążenia (np. okresy wzmożonych zakupów przedświątecznych w sklepie internetowym) lub prosty sposób na zwiększanie wydajności aplikacji w miarę jej rozwoju i wzrostu liczby klientów. Ogranicza także ryzyko finansowe związane z brakiem konieczności inwestowania z góry w odpowiednio wydajny serwer i infrastrukturę IT. Obsługa i zarządzanie chmurą także jest proste - nie ma potrzeby wykonywania upgrade oprogramowania, jak jest to w przypadku wynajętego w data center serwera.

Obawy związane z przejściem na platformę w chmurze

Wyniesienie danych i oprogramowania do chmury, której serwery są fizycznie zlokalizowane w pewnej odległości, być może nawet w innym kraju, wiąże się jednak z pewnymi obawami. Po pierwsze - niektóre regulacje prawne wymagają aby dane osobowe były przechowywane w określony sposób, lub w określonym miejscu - co może być problemem w przypadku platformy cloudowej. Używanie platformy w modelu platform-as-a-serice wymaga także zaufania do dostawcy usługi - przekonania, że usługa nie zniknie za kilka miesięcy, i że będzie świadczona na stałym, właściwym poziomie technicznym. Obecnie usługi oferowane w chmurach weszły w okres dojrzałości, a ich popularność gwałtownie rośnie - coraz więcej i więcej developerów przekonuje się do wykorzystywania platform cloudowych na potrzeby swoich aplikacji.

Kolejnym utrudnieniem może być integracja istniejącego już oprogramowania, działającego na dedykowanym serwerze z nowym softem, działającym w chmurze pod kątem wymiany informacji - z prostego powodu - przesyłanie potężnych ilości danych między aplikacjami umieszczonymi w odległych lokalizacjach nie jest wydajne, i patrząc z tego punktu widzenia bardziej opłacalne jest umieszczenie współpracujących aplikacji na serwerach znajdujących się w tym samym data center.

PaaS czy IaaS?

W świecie platform cloudowych mamy 2 zasadnicze podejścia: PaaS (platform-as-a-service) oraz IaaS (infrastructure-as-a-service). Które jest lepsze?

Podstawową różnicą pomiędzy PaaS a IaaS jest zakres obowiązków spoczywających na developerze. W przypadku IaaS to on ręcznie określa ile dokładnie instancji VM (virtual machines) będzie potrzebne, musi zadbać także o skonfigurowanie load balancera (dbającego o rozłożenie obciążenia pomiędzy poszczególne VM). Developer musi posiadać pewną świadomość tego, w jaki sposób działa dana chmura, oraz musi posiadać podstawową wiedzę związaną z administrowaniem nią. Podejście więc to nie różni się zbytnio od wykupywania na potrzeby aplikacji wirtualnych maszyn udostępnianych przez firmy hostingowe.
W przypadku PaaS nie ma potrzeby administrowania instancjami VM. Ba! Nawet nie ma takiej możliwości (co czasem jest podawane jako wada tego rozwiązania). W modelu PaaS bowiem jedyne czym zajmuje się twórca aplikacji to właśiwe przygotowanie aplikacji do pracy w danej chmurze, jej deploy na platformę cloudową, oraz skonfigurowanie baz danych. Samo zarządzanie wydajnością, rozłożenie obciążenia, fizyczne umiejscowienie danych itp. odbywa się całkowicie automatycznie. Dlatego też można powiedzieć, że ten rodzaj chmury jest skierowany przede wszystkim do programistów, którzy chcą szybko zbudować i uruchomić w wydajnym, skalowalnym środowisku swoje aplikacje, a następnie oferować je Klientom - zwykle na zasadzie opłat abonamentowych typu SaaS (software-as-a-service).

Zalety takiego rozwiązania są oczywiste:

  • przygotowanie i uruchomienie aplikacji jest szybsze
  • developer nie traci czasu na zaawansowane administrowanie platformą
  • automatyczne zarządzanie pozwala uniknąć wielu błędów popełnianych szczególnie w początkowej fazie implementowania aplikacji

Platformy udostępniane w modelu PaaS nie są w 100% równoważne ze środowiskiem znanym nam z serwerów dedykowanych pracujących pod kontrolą Windows. Przeniesienie działającej na dedyku aplikacji do środowiska chmury typu PaaS może także wymagać dokonania zmian. Dlatego też zwykle wykorzystujemy ten model w momencie projektowania nowej aplikacji, dzięki czemu czas od koncepcji do gotowego produktu może być krótszy, a nakład czasu pracy poświęconej na administrację mniejszy.

Przykładem platformy w modelu PaaS jest np. Elastic Beanstalk od Amazona, czy też Windows Azure (chmura hybrydowa) od Microsoftu. Natomiast dla modelu IaaS będą to odpowiednio: Amazone Elastic Compute Cloud (EC2), oraz Microsoft Private Cloud (przeznaczona dla firm świadczących usługi hostingowe). Swoje rozwiązania w modelu PaaS oferują także inni dostawcy, np. Google (App Engine) czy też Salesforce (AppForce, Heroku), jednak opis konkretnych rozwiązań wykracza poza ramy tego artykułu.