Główna » Google App Engine, Java, Polecane

Czy użycie CPU przez Datastore Cię zrujnuje?

1 January 2010 Brak komentarzy

Bawiąc się z małym projektem aplikacji dla Google App Engine doszedłem do różnych interesujących wniosków.

Jednym z ciekawszych jest użycie CPU – i bynajmniej nie CPU generowanego przez kod samej aplikacji – a CPU użyte przez datastore (jak wywnioskować można z panelu administracyjnego – około 90% użycia CPU jest generowane przez API Calls CPU).
Konsumowane jest ono w dość dużym tempie. Moja przykładowa aplikacja zapisuje pewne dane przy zapytaniu przesłanym do API. Zapytanie takie może zapisać/uaktualnić około (oszacowane manualnie na podstawie definicji modelu klas danych) 20 wierszy, musi załadować również dwa troszkę większe obiekty – ale tu postanowiłem na optymalizacje – dane te przechowywane są w memcach’u (są identyczne dla wielu zapytań).

450 zapytań do API zajęło 20% dziennego limitu CPU – 1.5h. Po szczegółowej analizie, 450 zapytań wygenerowało szacunkowo zapisanie około 4500 rekordów i aktualizacja kolejnych 4500 – oczywiście, każda aktualizacja czy utworzenie rekordu poprzedzone jest załadowaniem potencjalnie istniejącego rekordu.

Czyli 300 zapytań (według mnie – nie specjalnie skomplikowanych jak na zaawansowaną aplikację) zajmie CPU na 1h z 6.5 darmowego limitu. Jedna taka godzina na chwilę obecną kosztuje $0.10.

Oszacujmy więc dalej koszt dla końcowego użytkownika naszej przykładowej aplikacji – niech dla uproszczenia przesyła 300 zapytań do API na dobę. Klient taki wygeneruje miesięczny koszt około $3.0. Przesyłając więcej zapytań, koszt adekwatnie wzrośnie.

Z innej perspektywy sprawa też nie wygląda rewelacyjnie. 2500 zapytań do tej prostej aplikacji generuje około 4 MB danych (33 144 obiektów) zapisywanych w Datastore, otóż estymując koszty utrzymania aplikacji nie zapomnijcie o Meta Danych (Metadata), których rozmiar powiększa zajętą przestrzeń – w tym przypadku 4 MB danych generuje 12 MB Metadanych – czyli na chwilę obecną Metadane to 75% całości zajętej przestrzeni. Potestuję to jeszcze, być może statystyki przy większej ilości rekordów zmienią się – oby na korzyść danych faktycznych – nie meta-informacji :)

Do kosztu CPU i zapisanych w Datastore danych oczywiście dojdzie koszt pozostałych usług GAE – jak na razie dokładnych danych nie mam – ale jak tylko dokonam większej ilości analiz – postaram się jak najszybciej podzielić nowymi spostrzeżeniami.

Na chwilę obecną – koszt wygląda nie specjalnie ciekawie. Banalna aplikacja skonsumuje masę CPU – jeżeli nasz kod korzysta do woli z datastore. Przestrzeń archiwum w dużej mierze zjedzą na metadane – wszystko to ma wpływ na koszty, których oszacowanie jest ważne, gdy nasz serwis chcemy udostępniać płatnie osobom trzecim – musimy mianowicie skonstruować plany taryfowe – tak by ten koszt nie tylko przerzucić na końcowego odbiorcę, ale by przy tym jeszcze zarobić…

Na potwierdzenie moich obserwacji … bardzo ciekawa dyskusja…

Być może jakaś dalsza optymalizacja pozwoli ograniczyć zużycie CPU czy danych – zobaczymy…

Zostaw odpowiedź!

Musisz się zalogować aby móc komentować.