Google App Engine — фактически ключевой и самый первый массовый облачный сервис корпорации, запущенный в 2008 г. Он представляет собой мощную PaaS-платформу с нуль-администрированием, автоматически масштабируемую до нескольких миллиардов запросов в сутки. Надо отметить, что под PaaS нередко понимают разные вещи: “платформа как сервис” может целиком поддерживать весь процесс разработки (например, предоставляя интегрированную среду в браузере) либо обеспечивать выполнение готовых приложений конкретной технологии. В случае App Engine реализован второй вариант, причем инфраструктурные аспекты надежно удалены от разработчика: фактически даже не используется понятие “сервер”, а доступно только облако для загрузки, выполнения и мониторинга работы прикладных программ на разных языках в защищенной виртуальной песочнице, независимой от оборудования и ОС. В этом плане App Engine больше напоминает хорошо всем знакомые классические виртуальные хостинги “с поддержкой PHP” или других технологий разработки. Ключевое отличие — в автоматической масштабируемости и балансировке нагрузки, асинхронной обработке запросов, триггерах и ряде других полезных возможностей, реализованных непосредственно в рамках App Engine.

Что умеет Google App Engine

В данный момент App Engine поддерживает Python 2.7, Java 7 (и ряд JVM-языков — Groovy, Scala и др.), PHP 5.4 и Go 1.2. В дополнение к языковым средам поставляются фреймворки: например, Django для Python и Spring для Java. В перспективе сервис станет полностью языково-независимым, то есть добавлять можно будет любые технологии программирования — был бы спрос.

В Google App Engine SDK для разработчика входит множество возможностей: стыковка с Google Cloud SQL и безсхемным хранилищем данных, кэширование, работа с двоичными файлами, обработка изображений, ведение логов, поиск, э-почта, организация XMPP-чатов, управление задачами и очередями, стыковка с Android и iOS, регистрация пользователей через Google Account или OpenID, взаимодействие с клиентами JavaScript, сокеты (пока в предварительном режиме), а также различные экспериментальные и сторонние сервисы, на которые оригинальное соглашение об обслуживании не распространяется. Программисту доступны средства развертывания с версионным контролем. SDK включает режим эмуляции облака Google на ПК, благодаря чему приложение можно отлаживать локально.

В версии App Engine 1.9.0, запущенной в марте, появился Modules API, которой позволяет разбивать приложения на логические модули, характеризующиеся собственными настройками и версиями. Кроме того, появилась библиотека MapReduce для Java, которая тесно интегрирована с Google Cloud Storage. Улучшена среда времени выполнения PHP-скриптов, ускоряющая загрузку типовых библиотек. Однако внешнее взаимодействие с исполняемыми программами ведется только через HTTP/HTTPS-запросы, что фактически ограничивает App Engine сферой веб-систем.

Пытаемся запустить тестовое приложение

Инструкция по запуску простейшего тестового примера в App Engine занимает всего одну страничку, однако мне так и не удалось ее воспроизвести. Не знаю, ошибка это или специфика App Engine, но, например, на рис. 1 видно, что в примере однострочного скрипта PHP отсутствует логический закрывающий элемент “?>”.

Процесс начинается с создания заготовки будущего приложения в разделе веб-консоли Create an Application (рис. 2). Пользователь задает уникальный идентификатор приложения (фактически имя субдомена), которое будет доступно на портале appspot.com, а также его название и способ аутентификации. Следующий шаг — загрузка скриптов, которые будут исполняться в рамках данного приложения (проекта). Для этого потребуется установить на локальный компьютер библиотеку SDK с поддержкой Python 2.7. Здесь надо отметить потенциальную вероятность конфликтов, если на ПК уже используется, например, Python 3.x. Формирование приложения, от создания каталога до подготовки специализированного файла настроек, выполняется вручную.

В SDK входит Google App Engine Launcher, который теоретически должен помочь в развертывании. Но если из него обратиться к сервису App Engine, то будет выдана ссылка на морально устаревшую технологию (рис. 3). Важное предназначение Google App Engine Launcher — помощь в локальной отладке скриптов. Для этого предлагаются локальный веб-сервер и набор готовых примеров. Ни один из них у меня не заработал, а список возможных проблем в документации Google App Engine отсутствует.

Один из конфликтов, связанных с ручными настройками Google App Engine Launcher на текущую версию Python, самостоятельно решить удалось, а вот с неведомыми проблемами с кодировкой (рис. 4) справиться не получилось, хотя я специально создал копии тестового приложения в ASCII и Unicode. Да и зачем тратить часы работы на изучение бестолкового руководства, если на рынке есть более человеколюбивые службы? Напомню про главного конкурента — PaaS-сервис AWS Elastic Beanstalk, который предлагает серверные технологии IIS, .NET, Java, Node.js, PHP, Python, Ruby и Tomcat с возможностью разработки через оболочки Eclipse и Visual Studio. Никаких проблем с развертыванием тестового примера не возникало, а загружать “образ” разрабатываемого проекта в облако-исполнитель можно, например, в виде обычного zip-архива рабочего каталога.

Минусы Google PaaS

Помимо упомянутой выше мелочи с настройками, Google App Engine имеет и ряд более серьезных слабостей. Пока разработчикам предлагается ограниченный набор технологий разработки. Так, Java-программистам доступен неполный перечень стандартных библиотек и неизвестны сроки в отношении Java 8. Отсутствует поддержка Python 3, исполнение PHP-скриптов пока реализовано в предварительном формате, а программ на Go — вообще в экспериментальном режиме. Работа с файлами ведется исключительно через виртуальную систему в песочнице. Более того, прикладным приложениям, запускаемым в App Engine, придется в большинстве случаев привязываться к внутренним API Google, после чего они становятся полностью не переносимыми на другие облачные платформы. В этой связи появляются свободные фреймворки — например, AppScale, который обеспечивает переносимость прикладной системы между App Engine и Amazon EC2.

Сколько придется платить?

Стоимость Google App Engine рассчитывается так: за каждый час работы сервиса (фактически невидимого пользователю виртуального сервера) взимается 0,05 долл. Исходящий трафик обойдется в 0,12 долл./Гб, каждый гигабайт хранимых данных в 0,18 долл. в месяц. Дополнительно оплачивается содержание логов, очередей и кэша, и вдобавок за виртуальный IP/SSL придется ежемесячно выкладывать 39 долл. Обращение к хранилищу данных стоит 0,06 долл. за каждые 100 тыс. операций, а при дополнительном использовании Search API, например, каждый гигабайт индексированных документов обойдется в два доллара. Затрудняюсь оценить абсолютную сумму, которую надо выложить за миниатюрный вариант Google App Engine. В Амазоне малый PaaS-сервис будет стоить порядка 30—40 долл. в месяц.

Резюме

Gogle App Engine, наверное, лучший на сегодня PaaS в плане автоматического масштабирования, очень устойчивый и не требующий каких-либо усилий по сопровождению, но ограниченный перечнем доступных технологий и их привязкой к Google API, а также подразумевающий определенные системные навыки в процессе эксплуатации самого сервиса. Доступность App Engine, согласно SLA, обещается на уровне 99,95%, а в реальности время простоев вообще приближается к нулю.