slav0nic's blog

Заметки о python, linux и других занимательных вещах

Мои пять копеек про Google App Engine

Где-то с месяц назад приспичило попробовать портировать простенький сайт URIs (даа, с фантазией у меня туго :] ) на GAE, дабы поближе познакомится с данной платформой.

Итак, что мы имеем (на все вызовы распространяются лимиты при превышении которых включают счётчик :] ):

  • 1GB datastore под данные
  • Mail API
  • Image Manipulation API
  • Кеш на базе memcached
  • URLFetch
  • Сервис авторизации через Google

URLFetch - это сервис для получения данных извне. Как обёртка над URLFetch сейчас может использоваться urllib2.

API для работы с картинки в принципе ничем не отличаются от PIL, в SDK через него и эмулируются.

По поводу Datastore... Всё бы хорошо, но как бы заманчиво он не смотрелся исходя из лозунга "а google пользуется BigTable" и это всё круто, и за нереляционными базами будущее, но перестроить своё мышление после реляционных СУБД - довольно трудно. Хотя из плюсов отмечу отсутствие процесса миграции, то есть после изменений модели приложения, они автоматически отражаются на базе. Теперь немного о плохом, что меня довольно сильно напрягло, так это по 2 таймаута от datastore на день(при примерно 1к запросов к оному). Иногда хранилище не доступно в течение минут 10, я конечно понимаю что кеш наше всё, но всёже... zipimport тоже тормозит, хотя опять же, запросы примитивные. Хотя это уже вроде бы исправили.

Также из-за особенностей datastore ряд простых вещей усложняется, например таже пагинация, для которой нужно сделать count(), для этого используется ShardingCounter Также есть лимит - больше 1к объектов получить нельзя, то есть необходимо использовать offset и выбирать следующие 1к элементов и так далее. Всяких unique констрейнов также нет, необходимо использовать ключи.

Интереса ради, создал страницу с выборкой 500 элементов и выводом их в шаблон (кстати по дефолту там использутся шаблоны от django 0.96), но получил таймаут из-за превышения процессорного времени %).

Кроме этого нет возможности сохранять файлы на ФС, точнее вы можете их залить при развёртывание приложения на платформе, но не более. Вся статика, которая аплоадится через приложения, должна храниться в datastore в blob полях, доступа ко всем python библиотекам для работы с файлами нет.

Как ни странно, но API для полнотекстового поиска нет %). Точнее что-то есть, но довольно сырое, в SDK есть пример с английской морфологией.

Из коварных лимитов также отмечу:

  • 1к строк кода и 150мб статики на 1 приложение
  • приложение можно подключать лишь к домену 2го уровня. Приходится делать редирект с example.com на www.example.com который в свою очередь работает на GAE. В общем "naked домены" пока не доступны, по крайней мере бесплатно (через биллинг также).

В добавок к этому, нет возможности "легко" скачать код своего приложения, для этого надо использовать сторонние утилиты, для выгрузки данных на сервер через bulk_copy необходимо также произвести ряд действий, замапить в приложении хендлер для этого (кстати тут я тоже нахватался кучу таймаутов), пока что нет аналога cron'a, но он будет в новых версиях.

Из интересных вещей отмечу планы добавить поддержку xmpp, хранилище статических данных и запуск процессов в бэкграунде. Всё это должно появиться в GAE ближе к лету.

Вот вкратце и всё=). Не знаю удастся ли гуглу занять нишу серьёзных платформ для высоконагруженных приложений, но я пожалуй дождусь когда уберут слово beta, ибо пока что мелкие недостатки отпугивают больше чем "шара" ;)

Мысли выше писались в полусонном состоянии, прошу строго не судить :)

tasman post on 2009-03-21 15:22:12
Так перевод произведён? Или пока забил?
slav0nic post on 2009-03-21 15:49:54
ну да, так как всё было на webpy - потратил лишь 2 часика) и то больше парился с переливкой ~400 записей из MySQL в datastore
ilya post on 2009-03-22 02:17:57
Да app-engine сырой еще, а с гуглом можно легко интегрироваться и через api, благо он у них жирный. Так что объективных причин писать под них что-то серьезное нет. А вот всякие утилиты микро-приложения можно туда пихать
ioav post on 2009-04-22 20:16:24
Ваш блог очень хорошо, помог мне многое. Недавно я узнал Python и я остановка в этом блоге. Я только говорю по-испански, и я мог бы пройти через перевод, Suerte!

web.py