Мои пять копеек про 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, ибо пока что мелкие недостатки отпугивают больше чем "шара" ;)
Мысли выше писались в полусонном состоянии, прошу строго не судить :)