niedziela, 2 stycznia 2011

Wprowadzenie do Google App Engine


W kwietniu 2008 roku firma Google ogłosiła premierę nowego produktu, który w zamierzeniu miał zrewolucjonizować świat aplikacji internetowych i ułatwić życie deweloperom dostarczając jednolite środowisko uruchomieniowe, platformę hostingową oraz rozbudowane API. Mowa oczywiście o Google App Engine (GAE).

GAE wykorzystuje model przetwarzania danych w chmurze. Oznacza to mniej więcej tyle, że użytkownikowi, w tym przypadku programiście, udostępnione zostaje „trochę miejsca, trochę pamięci i trochę mocy obliczeniowej” do wykorzystania w (prawie) dowolny sposób. Programista otrzymuje także gotowy zestaw narzędzi niezbędnych do stworzenia aplikacji. Odchodzi za to problem zakupu i utrzymania drogiej infrastruktury, zapewnienie ciągłości pracy czy monitorowanie serwerów jak ma to miejsce w przypadku klasycznych aplikacji internetowych. Programista może skupić się na tym co do niego należy, czyli programowaniu, natomiast Google zajmuje się całą resztą.

O wirtualizacji i przetwarzaniu w chmurze mówi się o dziwo dłużej niż istnieje sam internet. Najwcześniejsze wzmianki sięgają lat sześćdziesiątych ubiegłego wieku, kiedy powstawały pierwsze sieci komputerowe łączące uniwersytety i jednostki wojskowe. Wówczas jednak o internecie w takiej formie jaką znamy dziś mało kto w ogóle myślał. Podobnie było z cloud computing, były to rozważania w zasadzie czysto teoretyczne. Dopiero na początku XXI wieku rozwój techniki pozwolił na wprowadzenie niektórych rozwiązań w życie. Moc obliczeniowa procesorów i przepustowość sieci internetowej były już wystarczająco duże, aby poważnie myśleć o realizacji tych koncepcji.

Największe światowe koncerny branży informatycznej zaczęły dostrzegać w cloud computingu sposób na duże pieniądze. Pionierem był Amazon, w ślad za nim poszłedł Google, Microsoft i cała reszta oferując produkty co ciekawe konkurencyjne tylko w części, natomiast w większości uzupełniające się.

Google i ich App Engine to propozycja skierowana do programistów poszukujących łatwego w obsłudze środowiska oferująca spore darmowe limity zasobów. Zacznijmy jednak od początku. W chwili obecnej (styczeń 2011 roku) dostajemy do rąk środowiska uruchomieniowe dla dwóch języków: Java i Python.

W przypadku Javy, otrzymujemy implementację maszyny wirtualnej w wersji 6. App Engine świetnie radzi sobie z serwletami oraz technologią Java Server Pages. Programy uruchamiane są w tzw. piaskownicy (ang. sandbox) czyli środowisku wyizolowanym od innych aplikacji i odpowiednio zarządzanym pod względem bezpieczeństwa. Sandbox przykładowo uniemożliwia aplikacji wykonywanie niedozwolonych połączeń sieciowych, uruchamianie wątków czy zapisywanie danych w lokalnym systemie plików. Aplikacja może natomiast bez ograniczeń wykonywać wszystkie czynności nie znajdujące się na „liście rzeczy zabronionych”.

App Engine dostarcza także dodatkowe, zaawansowane usługi ułatwiające wykonywanie różnych operacji, takich jak na przykład składowanie danych, dostęp do zewnętrznych zasobów, manipulację plikami graficznymi itd. W zasadzie większość nich w jakiś sposób niweluje ograniczenia związane z uruchamianiem aplikacji w piaskownicy. Na przykład App Engine Datastore jest swego rodzaju bazą danych, jednak dostęp do niej uzyskujemy jedynie za pośrednictwem interfejsów JDO lub JPA. Z jednej strony jest to duże ograniczenie, bo nie możemy korzystać choćby z poczciwego i niezawodnego Hibernete, z drugiej jednak strony przy sporej popularności tych interfejsów i łatwości ich implementacji nie stanowi to większego problemu nawet dla średnio doświadczonych programistów. Podobnie wygląda sprawa komunikacji naszego programu ze światem zewnętrznym. Wykorzystywać można tu jedynie protokoły HTTP lub HTTPS co w połączeniu z URL Fetch również daje spore możliwości. Ich własna implementacja interfejsu JavaMain ułatwia przesyłanie wiadomości email, co w połączeniu z logowania się za pomocą kont Google otwiera kolejne możliwości kreatywnym deweloperom. Poza tym istnieje jeszcze cały szereg udogodnień których nie sposób tu wymienić, wystarczy jednak sięgnąć do obszernej i szczegółowo przygotowanej dokumentacji.

Jeśli Eclipse jest naszym ulubionym edytorem, to jesteśmy w bardzo komfortowej sytuacji. Mamy wówczas do dyspozycji specjalnie przygotowany plugin, doskonale symulujący działanie rzeczywistej piaskownicy. Otrzymujemy z nim zarówno serwer na którym uruchamiamy aplikacje, datastore, API oraz wiele innych komponentów. Co więcej App Engine Java SDK o którym mowa, jest obecnie całkowicie zintegrowany z Google WebToolkit SDK, dostajemy zatem dwa potężne narzędzia, doskonale ze sobą współpracujące, w postaci jednej wtyczki. Całe szczęście użytkownicy innych IDE nie zostali pozostawieni sami sobie i tak np. producenci IntelliJ Idea czy NetBeans przygotowali także swoje wersje wtyczek.

Miłośników Python'a ucieszy natomiast także fakt, że i oni zostali docenienie przez Google i przygotowane zostało środowisko pod ten zacny język. Do pisania prostych aplikacji został tu specjalnie przygotowany framework o nazwie Webapp, natomiast do tworzenia bardziej wyrafinowanych programów swobodnie można używać na przykład Django. App Engine wpiera obecnie Python'a w wersji 2.5. Podobnie jak w przypadku Javy mamy tu do czynienia z piaskownicą i związanymi z nią licznymi ograniczeniami, ale także dostajemy do ręki szereg dodatków ułatwiających ich „legalne ominięcie”. Wszystkie elementy piaskownicy są analogiczne do tych znanych z Javy, a po szczegóły ponownie odsyłam do dokumentacji. Specjalnie przygotowane App Engine Python SDK oferuje również analogiczną funkcjonalność, z oczywistym wyłączeniem wsparcia dla Google WebToolkit. 

Wszystkie powyższe zalety i wady mogą brzmieć równie przekonująco co odrzucająco. Czemu zatem mielibyśmy korzystać z App Engine zamiast z własnego serwera aplikacji, którym możemy dowolnie manipulować i pisać programy bez absolutnie żadnych ograniczeń? Sceptyków być może przekona lista parametrów, które otrzymujemy nie ponosząc żadnych opłat. Limit przesłanych danych wynosi 2GB (1GB upload, 1GB download), możemy wykonać do 1,3 miliona zapytań oraz 10 milionów odwołań do bazy danych, liczba odwołań do zasobów zewnętrznych za pomocą URL Fetch to ponad 600 tysięcy. Oczywiście są to limity przyznane dla każdej aplikacji na okres jednej doby, po północy liczniki zaczynają tykać od zera! Ilość kodu jaką możemy przechować na serwerze to maksymalnie 150MB, a każdy programista może mieć do 10 aktywnych jednocześnie programów.

Trzeba przyznać, że poprzeczka została postawiona dość wysoko i trudno przekroczyć te ograniczenia nawet w przypadku nawet bardziej wyrafinowanych aplikacji. Gdy się jednak bardzo postaramy, to i tak opłaty za dodatkowe zasoby nie są zbyt wygórowane. Kolejnym argumentem „za” jest fakt, że coraz więcej firm jest zainteresowanych wdrożeniem aplikacji działających w chmurze z racji znaczącego obniżenia kosztów utrzymania. 

Osobiście uważam, że sama koncepcja cloud computing daje bardzo dobre rokowania na przyszłość. Warto zainteresować się tą technologią także z racji mnogości gotowych rozwiązań różnych producentów, które jest łatwo między sobą integrować. Jeśli możliwości oferowane przez Google App Engine są niewystarczające może warto rozejrzeć się za ofertami innych firm w branży, których z roku na rok jest coraz więcej.

Brak komentarzy:

Prześlij komentarz