GAE – wprowadzenie

Wyobraźmy sobie sytuacje gdy piszemy aplikacje webową – niedużą, ale mającą działać pod zmiennym obciążeniem. Jednego dnia nikt z niej nie korzysta, następnie przez kilka dni tysiące użytkowników, gigabajty danych, a przez następny miesiąc znowu nikt, a potem znowu tysiące. W dodatku nie możemy oszacować ilości użytkowników – jest to dla nas niewiadoma. Jak to rozwiązać, aby zminimalizować koszty? Oczywiście projektujemy rozwiązanie chmurowe i skalowalne.

Nie jest to scenariusz wymyślony – przykładem takich aplikacji są między innymi wszystkie akcje reklamowe, gdzie zaraz po wystartowaniu kampanii reklamowej zainteresowanie ludzi jest bardzo duże, niemożliwe do oszacowania i maleje w czasie, aż do odpalenia następnej części, gdzie cykl się powtarza aż do zamknięcia. 

Jednak tworzenie aplikacji skalowalnej nie jest proste. Trzeba dbać o skalowanie każdej części aplikacji (bazy danych, serwera aplikacji, load balancera, message queue). Trzeba przewidzieć i zaprojektować jak to się ma skalować, kiedy dodać następny serwer, kiedy go usunąć. Czy można to uprościć? Można ;)

Google App Engine jest przykładem usług chmurowych typu PaaS (Platform as a Service). Udostępnia nam serwer aplikacyjny który został specjalnie zaprojektowany aby działać w chmurze – autoskalowalny. Dostarcza nam całą masę dodatkowych usług (bazy danych, cache, zarządzanie użytkownikami, przechowywanie plików) które się same skalują.  W dodatku skalowanie to jest naprawdę szybkie.

Ile to nas kosztuje? Płacimy tylko za to co zużyjemy (czas procesora, zapis danych, etc.). Nie płacimy (z małymi wyjątkami) za aplikacje która stoi i nic nie robi. Nie ma ruchu nie ma kosztów. W dodatku Google daje nam codziennie pewną ilość tych zasobów “za darmo” jako “free quota”, więc nawet aplikacja z niedużym ruchem NIC nas nie kosztuje. O tym ile co nas kosztuje można przeczytać na https://cloud.google.com/appengine/pricing .

Wady? Oczywiście to rozwiązanie ma też swoje wady – jedną z podstawowych jest to, że aplikacja musi zostać przerobiona (lub od razu pisana) z myślą, że zostanie użyta na GAE. Czasem nie są to duże przeróbki, czasem niestety spore. Jeszcze gorzej jest z przenoszeniem aplikacji która została napisana pod GAE (używającej usług charakterystycznych dla GAE) na inny serwer aplikacyjny.

Inną wadą jest niezbyt dobra dokumentacja. GAE i inne usługi Googla są to przeważnie usługi które Google używa wewnątrz swoich produktów, dostosowane tylko do udostępniania ich innym klientom. W związku z tym dokumentacja jest często dość powierzchowna i zawiera podstawowe rzeczy. Jeżeli chcemy wejść w to głębiej jest to utrudnione – w przeciwieństwie do pracowników Googla nie mamy dostępu do kodu źródłowego.

Nie mamy dostępu też do szczegółowych ustawień systemu czy samego kontenera aplikacji. Mamy  tylko bardzo podstawowe parametry odnośnie jak to się ma skalować. Jest to jednocześnie zaleta i wada – trzeba zaufać Googlowi, że wie co robi i jego algorytmy i ustawienia będą dobre też dla nas. Ale z drugiej strony mało rzeczy jest które możemy “popsuć”, oraz nie musimy się martwić jak to działa.

GAE nie jest rozwiązaniem każdego problemu, ale są zastosowania gdzie GAE sprawdza się idealnie. Nie znam innego rozwiązania które umożliiwa pisanie aplikacji skalowalnej w tak łatwy sposób. Jeżeli ktoś zna, proszę dajcie znać, chętnie się zapoznam.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">