Google App Engine это платформа предлагаемая компанией Google для веб-разработчиков. Не будет преувеличением, сказать, что проблема роста и разумной экономии на масштабируемости и производительности стоит перед разработчиками с самого начала работы над проектом. С одной стороны, огромное количество стартапов, разработчики которых даже приблизительно не могут представить себе характер и объем нагрузок на сайт, а желая иметь некоторый запас производительности оптимизация, зачастую, начинается с первых строк кода. С другой стороны, надо сказать что приложения, которые должны легко масштабироваться имеют весьма сложную архитектуру внутри, и написание такого кода, тоже весьма специфично. Отдельо нужно упомянуть то, что поддержание такой, горизонтально масштабарованной, инфраструктуры в рабочем состоянии, довольно хлопотное и дорогое мероприятие. В индустрии создания высоконагруженных приложений, безусловным флагманом, является Google. Свой опыт они предлагают разработчикам в виде Google App Engine.
Для тех, кто совсем ничего не слышал про GAE, рекомендую ознакомится со статьями про быстрый старт с GAE, модель и контроллер.
Поговорим немного о достоинствах платформы:
- в первую очередь, это, конечно масштабируемость «из коробки», о которой абсолютно не надо заботится. Гарантированный uptime 99.9%, никаких бекапов, репликаций и прочих мук в высоконагруженых приложениях.
- все разработчики, как один, восхищаются тем как хорошо документирован GAE, и тем как просто сделать свой первых hello world
- прозрачная интеграция с аккаунтом Google и многочисленными сервисами
- поддержка Java и Python «из коробки» и огромное количество скриптовых языком «из под Java»
- удобный сервер для разработки и простая утилита деплоя
- огромное количество open source проектов являются хорошим подспорьем в разработке на GAE
Как обычно в бочке меда, окажется ложка дегтя.
- ограничеие на размер файла: 1 мегабайт
- еще одно интересное ограничение, — на запрос, не более миллиона циклов CPU на запрос. У вас нет никакких инсрументов, позволяющих оценить, профилировать эти самые циклы, и на локальном сервере этого ограничения нет. Таким образом, приготовьтесь к тому что ваше сложное приложение начнет разваливаться после деплоя, вероятно, случайным образом.
- очень медленное локальное хранилище даных, хотя на сервере, после деплоя работа с хранилищем тоже неоднозначна, плюс на работу с хранилищем также налагаются ограничения и квоты
- загрузчик (bulk uploader) довольно медленный и часто генерирует 500ю ошибку.
- надо ли говорить — но у вас нет рутовых прав
- подробнее про ограничения можно почитать здесь
Исходя из сего вышеперечисленного, я думаю идеальное применение для GAE это маленькие стартапы, неспособные спланировать трафик на свои приложения и построить дорогую инфраструктуру, способную выдержать «наплыв», в случае успеха. Это могут быть всевозможные виджеты, приложения для социальных сетей, игры, с нересурсоемкой серверной логикой.
Некоторые выводы, о том как использовать GAE более эффективно:
- переносите логику и функционал на клиент, — всякого рода логика на JS, Flash, Flex, Silverlight, etc
- используйте memcache для кеширования запросов к хранилищу
- используйте sharded counters для статистики
- отсылка писем забирает много CPU, лучше использовать tasks или cron
- используйте несколько GAE приложений, для разных нужд, вместо одного большого. Это имеет смысл для увеличения квот и разделения статистики.
- используйте пакетное сохранение и извлечение данных из хранилища