2016-06-24 2 views
0

Мне интересно, что лучше всего подходит для установки RESTful API для задач с интенсивным вычислением с использованием GCP. Например, если я хочу создать RESTful API для преобразования файла .png в файл .jpg на основе команды преобразования imagemagick (т. Е. convert file.png file.jpg). Поскольку входной файл может быть очень большим, команда может занять до нескольких минут. Как мне это сделать с GCP?Облачная архитектура для вычислительно интенсивных задач

Недостаточно средств для работы с приложениями из-за ограниченной среды и ограничения времени выполнения. Вычислительный движок включает в себя настройку веб-сервера, балансировки нагрузки, очереди задач и т. Д., Которая, кажется, излишняя для простого API.

Решение, которое я имею в виду, это просто обернуть команду convert внутри рамки WSGI и развернуть ее в гибкой среде движка приложения. Конечно, когда вызывается команда convert, она будет использовать множество процессоров и памяти, что замедлит работу моего веб-сервера. Но когда это произойдет, гибкий движок приложения увеличит количество экземпляров для обработки новых запросов. Однако у меня такое чувство, что это не лучшее решение. Я хотел бы знать, каков ваш подход к этой проблеме.

Большое спасибо!

ответ

1

Для использования прецедента необходимо использовать очередь задач, чтобы можно было контролировать масштабируемость серверов. Продюсер может загрузить задание в очередь задач, которая содержит детали изображений. Задача очереди, в свою очередь, может перенаправить задание в конечную точку URL. Итак, работа придет к потребителю, где вы можете использовать imagemagick.

Главное преимущество этого дизайна заключается в том, что вы не перегружаете свои серверы. Если все ваши серверы (потребители) заняты, задача остается в очереди задач (необходимо настроить повторную попытку). Когда его интенсивная задача, другие задачи могут оставаться в очереди, пока один из ваших серверов (потребителей) не будет готов принять его.

P.S: очереди задач может быть либо толкать или тянуть https://cloud.google.com/appengine/docs/java/taskqueue/push/

+0

Спасибо за предложение. Таким образом, в заключение, мой внешний интерфейс будет нормальным движком приложения, который принимает запросы пользователей и генерирует задание для размещения очереди задач. Очередь задач подталкивает задание к вычислительному узлу (т. Е. Управляется движком контейнера). Узел вычисления должен реализовать REST api, поэтому очередь задач может связываться с ним. Когда он получил задание, он вызывает соответствующий код для выполнения. – James

+0

Да. Ты прав. – jw10

Смежные вопросы