Zanim zdecydujesz się na Google App Engine
Zanim zdecydujesz się na Google App Engine warto wiedzieć o pewnych przypadłościach i zastosowanych rozwiązaniach.
- [-] Zapytania do Datastore mogą zwrócić jedynie do 1000 rekordów, zespół GAE pracuje nad propozycją kursora, który będzie pozwalał na iteracje po większej ilości danych.
- [--] Duże limitacje GQL – w sortowaniu oraz użyciu operatorów. Szczegóły można przeczytać tutaj.
- [---] Znaczne zużycie API CPU dla zapisu i odczytu danych z Datastore, zwłaszcza gdy ich hierarchia jest dość głęboka (więcej na ten temat w moim poprzednim poście – i o rozwiązaniu używając pola Serializowalnego).
- [-] Długi czas tworzenia indeksów – nowe indeksy potrafią wisieć w kolejce nawet kilka dni!
- [--] Częste wyjątki Datastore Timeout – czyli przekroczenie czasu zapytania do DS. Lecz te zazwyczaj wskazują na błędne rozwiązania architektury aplikacji.
- [-] Duże różnice w lokalnej implementacji Datastore, powodujące, iż niektóre błędy odkrywamy dopiero na serwerze. Warto więc zwrócić uwagę na wersjonowanie instalowanych aplikacji i testowanie ich na serwerze.
Nie sposób również przez to testować lokalną wydajność aplikacji – często wywraca się ona po dodaniu 1000 wpisów do DS. - [--] Limit 20 sekund dla zapytanie (request). Fakt, wskazuje on na problem w samej aplikacji, ale np. powoduje problemy przy próbach skasowania wszystkich rekordów danego typu itp. – np z panelu administracyjnego Twojej aplikacji – gdzie po prostu wiesz co robisz – więc potrzebne są różnego typu hack’i.
- [------] Czas życia instancji aplikacji jest bardzo ograniczony – aplikacja ładowana jest w momencie zapytania – pozostaje w pamięci przez krótki czas – o ile nie nadejdzie kolejne zapytanie.
Ostatnia pozycja jest szczególnie uciążliwa. Przy małym ruchu powoduje to w praktyce ładowanie aplikacji dla każdego zapytania – używając np. Springframework powoduje to kilkunasto sekundowe opóźnienie w obsłudze zapytania – co jest niedopuszczalne.
Jak na razie jedynym rozwiązaniem jest odpytywanie dowolnego URL’a aplikacji w celu podtrzymania jej załadowanej w JVM, choć według mnie zupełnie chybionym – gdyż nie jestem przekonany, iż można założyć, że kolejne zapytanie zostanie obsłużone przez tą samą instancję, a po drugie zjada to zasoby.
Oto kilka dodatkowych informacji na ten temat: First Request High CPU, Pay to reserve a JVM, Datastore timeout exceptions and execution limit, Appengine timeout, dyskusja, którą rozpoczołem na Google Groups Google Groups App instance recycling and response times, oraz na Stack Overflow.










Zostaw odpowiedź!
Musisz się zalogować aby móc komentować.