Использование веб-сервисов Amazon в качестве движка Google App Engine
В настоящее время я использую Google App Engine в качестве моего мобильного приложения. У меня есть несколько задач, которые не могут быть выполнены в среде gae (в основном распознавание изображений с использованием opencv). Мое намерение состоит в том, чтобы сохранить Gae и использовать AWS для выполнения этих конкретных задач.
Есть ли простой способ передать конкретные задачи из gae в AWS? Например, очередь задач?
5 ответов
Вы можете либо перенести задачи из GAE в AWS, либо сделать так, чтобы ваши экземпляры AWS извлекали задачи из GAE.
Если вы продвигаете задачи из GAE в AWS, вы можете использовать URLFetch
подтолкнуть ваши данные к вашим экземплярам AWS.
Если вы предпочитаете, чтобы ваши экземпляры AWS извлекали задачи из GAE, вы можете сделать так, чтобы ваши экземпляры GAE помещали свои задачи в GAE. Pull Queue
и затем ваши экземпляры AWS используют Task Queue REST API
сдавать в аренду задания из очереди.
В любом случае экземпляр AWS может сообщить результат обработки посредством простого запроса POST к вашим сервлетам GAE или путем вставки задач с помощью вышеупомянутого REST API
который впоследствии будет сдан в аренду вашим инстанциям GAE. Последнее может быть полезно, если вы хотите контролировать скорость, с которой ваше приложение GAE обрабатывает результаты.
Отказ от ответственности: я ведущий разработчик проекта AppScale.
Один из способов, которым вы могли бы воспользоваться, - это AppScale - это реализация API App Engine с открытым исходным кодом, которая работает в Amazon EC2 (а также в других облаках). Так как это открытый исходный код, вы можете изменить AppServer, который мы поставляем с ним, чтобы использовать OpenCV. Это потребует от вас запуска приложения App Engine в AWS, но вы можете проявить творческий подход и получить копию своего приложения, работающую с Google, и отправлять запросы очереди задач на версию вашего приложения, работающую в AWS, только когда вам нужно использовать библиотеки OpenCV.
Конечно. В AppEngine есть очередь задач, в которую вы можете поместить свои задачи, просто внедрив DeferredTask. В этой задаче вы можете отправлять запросы в AWS.
Рассматривали ли вы вопрос об использовании сервиса amazon simple queue? http://aws.amazon.com/sqs/
Вы должны иметь возможность добавлять элементы в очередь из gae с помощью стандартного http-клинта.
Ваше намерение сохранить приложение в GAE и использовать AWS для выполнения нескольких задач, которые не могут быть выполнены в GAE, кажется мне правильным сценарием.
Я хотел бы поделиться несколькими идеями и некоторыми ресурсами, чтобы ответить на основную часть вашего вопроса:
Есть ли простой способ передать конкретные задачи из gae в AWS? Например, очередь задач?
Если вам нужны GAE и AWS для выполнения задачи все время (24/7), тогда ваше приложение будет определенно зависеть от расписания пакета или очереди задач. Они доступны по GAE.
Однако, если вы могли бы организовать выполнение задачи в GAE и выполнять ее с помощью AWG с интервалом (скажем, два раза в день по менее часа), вам может не понадобиться их использовать, если вы можете управлять GAE, чтобы поместить данные в Google Cloud Storage (GCS) как общедоступный.
Для этого сценария необходимо настроить экземпляр AWS EC2 для расписания включения / выключения и разрешить экземпляру запускать загрузочный сценарий, используя cloud-init для сбора данных через домен, который указывает на GCS (c.storage.googleapis.com), например так:
wget -q --read-timeout=0.0 --waitretry=5 --tries=400 \\
--background http://your.domain.com/yourfile?q=XXX...
Имея данные из GCS, AWS может выполнять эти конкретные задачи. Пусть он запустит GAE, чтобы очистить данные и вернуть результат в GCS, чтобы быть готовым для использования в качестве серверной части вашего мобильного приложения.
Ниже приведены некоторые варианты для рассмотрения:
- Следует помнить, что не все типы EC2 подходят для расписания включения / выключения. Я рекомендую использовать EC2-VPC/EBS, если вы хотите настроить экземпляр AWS EC2 для расписания включения / выключения
- Вам может не потребоваться настройка EC2, если вы можете настроить AWS Lambda для выполнения задачи без EC2. Это дешевле, задача, выполняемая два раза в день, обычно менее 3 секунд, с использованием памяти до 128 МБ, обычно стоит менее 0,0004 долларов США в месяц.
- В результате реорганизации вашего приложения в GAE и настройки AWG на выполнение некоторых из задач это может в конечном итоге повысить ваши тарифы, пытаясь оптимизировать класс экземпляра в GAE.