kwi 8

Java na AppEngine

Zamieszczony przez jarek.zgoda 2009-04-08 o 21:39 | | Komentarzy: 5 »

Nasi bracia mniejsi (niektórzy mówią na nich javowce, ale ja jestem tolerancyjny i wcale nie uważam ich za podludzi) dostali swoje — Google ogłosiło, że kolejnym językiem dostępnym na GAE będzie Java. Jakkolwiek dziwnie to brzmi, nie jest to takie ani dziwne, ani złe. W końcu Java stanowi znaczący odsetek corporate programming efforts, więc użytkowników płacących może być całkiem sporo... Oczywiście, o ile dostaną to, czego potrzebują do zrobienia aplikacji, a na razie na to nie wygląda. Z paru ostatnich postów na nowo powstałej grupie dla użytkowników Javy wynika, że jest to zbyt egzotyczne i ludzie nie dają sobie z tym rady (pewnie za jakiś czas posmak nowego zniknie i wszystko wróci do normy).

Gratuluję nowego języka, cieszę się z wprowadzonego przy okazji crona i czekam na poprawę/zmianę kilku rzeczy, które znacząco ograniczają moje zaufanie do tej platformy.

kwi 7

Nowości

Zamieszczony przez jarek.zgoda 2009-04-07 o 14:46 | | Komentarzy: 5 »

Walki z Google AppEngine ciąg dalszy — dorobiłem się archiwum, ale z niewielkim problemem: istniejące już wpisy nie są indeksowane. A dlaczego? A dlatego, że dynamiczne wyliczanie miesięcy, kiedy zostało cokolwiek opublikowane na GAE nie wchodzi w grę, trzeba utrzymywać licznik wpisów. Licznika do tej pory nie było, więc istniejące wpisy nie są w nim odzwieciedlone.

Ale grunt, że działa, a o aktualizacji licznika pomyślę za jakiś czas. Może pogmeram używając Remote API?

kwi 3

Biblioteki w nowym miejscu

Zamieszczony przez jarek.zgoda 2009-04-03 o 23:04 | | Komentarzy: 4 »

W związku z tym, że repozytorium z bibliotekami dla GAE jest w 100% publiczne i zawiera tylko wolne oprogramowanie, przeniosłem je na Google Code, żeby nie zajmować niepotrzebnie miejsca na XP-Dev.com (takie ze mnie skąpiradło... ale w czasach kryzysu każdy MB quoty się liczy ;)). Jak ktoś je sobie już ściągnął, to może zrobić svn switch --relocate, lub po prostu wykosić i ściągnąć ponownie. Nowy URL do repozytorium to http://gae-3rdparty-libs.googlecode.com/svn/trunk/.

Z nowości — zaktualizowałem Jinja2 (z repozytorium źródłowego) i pytz (do wersji 2009d).

mar 16

Bezużyteczna zabawka?

Zamieszczony przez jarek.zgoda 2009-03-16 o 11:05 | | Komentarzy: 5 »

Są rzeczy, które są nieoczywiste i dopiero po kilku chwilach głębszego zastanowienia można zrozumieć nieco szerszy kontekst. Niektóre rzeczy nie są tym, czym się wydają na pierwszy rzut oka, a inne okazują się działać nie dokońca tak, jak wydawało się, że powinny działać. Zastanawiająco słaba wydajność jednego z moich serwisów kazała mi się bliżej przyjrzeć temu, jak działa AppEngine.

Wiedziałem już wcześniej, że wydajność aplikacji na AppEngine rośnie w miarę otrzymywania coraz większego ruchu — maszyneria AppEngine przydziela coraz więcej zasobów do obsługi żądań, co się bezpośrednio przekłada na to, jak szybko zostanie wyprodukowana odpowiedź. W związku z tym, że aplikacja na GAE jest uruchamiana przez CGI, to cały cykl, składający się z uruchomienia interpretera, zaimportowania tego co trzeba i wyprodukowania odpowiedzi powtarzałby się przy kazdym żądaniu, więc aby zminimalizować narzut na czynności administracyjne, AppEngine ma pewien bufor zaimportowanych modułów (i interpreter chyba też). Dzięki temu kolejne nadchodzące żądanie ma szansę skorzystać z już zaimportowanego kodu, co ma dać zmniejszenie kosztu obsługi żądania. Wszystko na papierze wygląda świetnie, ale obecnie ten bufor importu jest czyszczony po... 2-3 sekundach! Aplikacja, która dostaje żądanie co 5 sekund za każdym żądaniem będzie miała zimny start — nie tylko zużyje bardzo dużo zasobów (według Google ~1200ms czasu procesora to jest dużo), ale i obsługa żądania będzie trwała dużo dłuzej. Jedyna nadzieja w sprytnym napakowaniu memcache tym, co się może przydać. A jakie są tego implikacje?

Wyobraźmy sobie sytuację, w której zrobiłem super-czaderską aplikację i chcę ją sprzedać. Znajduję kupca, który już się podjarał ideą, cena jest dla niego do przyjęcia, więc zasiadamy do prezentacji. Kupiec otwiera stronę początkową serwisu i... kicha. Ślimaczy się. Tłumaczę mu, że taka jest specyfika aplikacji na AppEngine, gość przełknął, ale z pewnym niedowierzaniem (a tym czasem na pewno minęło ponad 5 sekund...). Następna strona i to samo, pomimo że używa praktycznie tych samych bibliotek, co poprzednia — ale przecież czas minął i znowu mamy zimny start. Potencjalny nabywca już nie jest tak podjarany, bo widzi, że aplikacja chodzi w żółwim tempie, a jedyne, na co można liczyć to to że Google mówi prawdę i pod rzeczywistym obciążeniem będzie ona miała lepszą wydajność. Tyle, że żeby miała ten normalny ruch, najpierw musi przejść swój okres rozbudzania zainteresowania, kiedy ruch będzie niewielki. Ludzie nie będą chcieli używać serwisu, który się ślimaczy, więc aplikacja nie dostanie ruchu wystarczającego, żeby przyspieszyć — i w tym momencie kółko się zamknęło.

I kolejny minus, jak stąd do Stambułu: jedyne serwery, na których uruchomione jest AppEngine, w tej chwili znajdują się w USA, co oznacza że klienci z Polski (dla mnie pokarm naturalny) będą mieli opóźnienia w serwowaniu co najmniej 10x większe, niż z Polski i około 5x większe, niż z Niemiec czy Francji. Dla żądań dynamicznych to akurat jest pomijalne, ale statyki przydałoby się dostarczać jak najszybciej.

Czy rzeczywiście AppEngine jest niedrogą, przyjemną, edukacyjną, ale w końcu bez praktycznego znaczenia — zabawką? Jak można zapobiec takiemu rozwojowi wypadków? Zastanawiałem się nad tym poważnie i nie znalazłem zadowalającego rozwiązania:

  1. generowanie sztucznego ruchu celem utrzymania bufora modułów, np. 1 żądanie na sekundę tylko po to, żeby wykonały się niezbędne importy, może być drogie jeżeli tych importów jest odpowiednio dużo;
  2. specjalna wersja aplikacji na czas rozruchowy, uruchamiana w zwyczajny sposób i na normalnej platformie, wydaje się niepotrzebnie pracochłonne;
  3. serwowanie statyków z europejskich serwerów Amazon S3, może poprawić wrażenie za stosunkowo niewielkie pieniądze, ale nie rozwiązuje problemu zimnego startu aplikacji.

Jeżeli ktoś ma jeszcze jakieś pomysły, to chętnie je poznam.

mar 13

Co nowego?

Zamieszczony przez jarek.zgoda 2009-03-13 o 14:30 | | Komentarzy: 5 »

Kilka nowych rzeczy się pojawiło, zbliżając tę aplikację do tego, co zwykle prezentują sobą aplikacje z tej półki:

  • ocena zawartości przy artykułach (chwilowo nie ma żadnego limitowania, więc można sobie klikać do woli), dostępne dla użytkowników zalogowanych;
  • komentarze przy wpisach w blogu, dostępne dla wszystkich.

Przy okazji dowiedziałem się paru ciekawych rzeczy o AppEngine, a nawet o Pythonie (hej, czy ktoś zauważył, że obiekty unikodowe nie mogą być kluczami słownika **kwargs?!), ale to jest temat na oddzielny artykuł.

mar 12

Django critter

Zamieszczony przez jarek.zgoda 2009-03-12 o 10:12 | | Komentarzy: 5 »

Popularny ostatnio temat: Django critter (i opis historii jego powstania) — według niektórych wiadomość tygodnia. Wzruszające stworzenie. :)

Moja córka nie ma jeszcze skojarzeń z Django, chociaż wie już, co to jest Python, sprawdzałem to w ubiegłym roku w warszawskim ZOO. W naturalny sposób fascynują ją komputery, ale tylko o tyle, o ile dostarczają jej rozrywki (oczywiście na poziomie dostosowanym do jej wieku i możliwości). Nie będę poganiać tego co nieuniknione, bo przecież nie ma pośpiechu, nasze dzieci i tak będą miały bardziej zdigitalizowane życie niż my (do 10 roku życia o komputerach czytałem tylko w literaturze S-F) — moja córka w wieku niecałych 5 lat ma już własnego e-maila i koresponduje z babcią przesyłając jej swoje dzieła z różnych serwisów webowych z grami dla dzieci. Przyjdzie czas i na Django, i na WSGI, i na JavaScript. ;)

mar 7

WTF?

Zamieszczony przez jarek.zgoda 2009-03-07 o 21:23 | | Komentarzy: 4 »

Idąc za sugestiami wszystkich i jeszcze trochę (to znaczy głównie Google), wpiąłem ten serwis do domeny zgodowie.org — od kilkunastu minut jest dostępny pod URL http://wtf.zgodowie.org/. Docelowo będzie miał przejąć rolę tuby technicznej w macierzystym serwisie, a na razie posłużył jako narzędzie ćwiczebne w temacie "Integracja aplikacji na AppEngine w domenie użytkownika". Wbrew ostrzeżeniom Google, cała operacja zajęła około 20 minut (a nie 48 godzin).

Nie pierwsze i pewnie nie ostatnie...

mar 6

Po nowemu

Zamieszczony przez jarek.zgoda 2009-03-06 o 20:54 | | Komentarzy: 4 »

Próbuję po nowemu.

To kolejna aplikacja, którą można uważać za playground, tym razem jeżeli chodzi o takie bardziej klasyczne aplikacje, których jest pełno w internecie, a które są idealnymi kandydatami na programistyczne zabawki przed zrobieniem czegoś większego. Skoro można poćwiczyć za darmo, to czemu tego nie zrobić?

A przyda się ćwiczenie. Google App Engine jest z jednej strony kiepską platformą do takich eksperymentów (bo zupełnie niestandardową), a z drugiej bardzo dobrą, bo wymusza daleko idącą optymalizację od samego początku. Wymusza też myślenie o aplikacji jako całości, nie wyłączając skalowania. Wszystko, co dzieje się pod spodem będzie opisane i wytłumaczone, włącznie z przyczynami działania lub niedziałania jakiegoś rozwiązania. Biorąc pod uwagę stopień egzotyczności AppEngine, nie spodziewam się, żeby szybko zabrakło mi tematów do pisania...

Za jakiś czas będzie więcej na ten temat. Na razie muszę doprowadzić podstawowe features do stanu poprawnego działania, a droga jeszcze do tego długa.