Вопрос

Я хочу запустить обработку изображений ALGO на сервере, который может легко взаимодействовать с веб-приложениями.Обработка изображений ALGOS вычисляет тяжелые и не будет доступны в пользовательских встроенных библиотеках.В настоящее время я использую Ruby на рельсах на Heroku для моего сайта.

Что будет лучшая архитектура для этого?Делайте изображения с веб-сайта - Запустите Algo обработки изображения на нем - Отображение обратно на сайт

Большая часть моего обрабатывающего изображения находится на C / C ++.

Могу ли я позвонить в C / C ++ код от Ruby на рельсы напрямую?Это возможно на Heroku?

Или я должен разработать систему, где код C / C ++ выставляют некоторые API, которые могут быть вызваны Ruby на сервере Rails?

Это было полезно?

Решение

Heroku обычно использует небольшие экземпляры виртуальных машин, поэтому в зависимости от того, насколько тяжелая обработка, это может быть не лучший выбор архитектуры. Однако, если вы используете это, я бы сделал это:

Используйте фоновую задачу GEM, чтобы сделать вашу обработку. Имейте это работать по отдельному процессу (называется рабочим, а не динамическим в терминологии Героку). Задержка задания - это пробое и тестируемое решение для фоновых задач с богатством онлайн-информации, относящейся к интеграции его в Heroku, но есть более новые, такие как Sidekiq, которые используют новую систему резьбы в современных версиях Ruby. Они позволили бы все было сделано в димно, но я бы сказал, что было бы полезно сохранить все фоновые обработки от веб-сервера Dynos, поэтому отсроченная работа (или аналогичная) будет в порядке.

Что касается интеграции C / C ++, я еще не должен был сделать это. Тем не менее, я знаю, что можно создавать драгоценные камни, которые интегрируют код C или C ++ и скомпилируйте в наклонно. Пока вы используете Ruby, а не JRuby, я не думаю, что Heroku должен иметь проблему с ними. Есть и другие способы достижения этого, посмотрите на такие вопросы конкретно об этой теме, например

Как я могу позвонить в функции C ++ из Ruby

Кажется, вам нужно создать расширение, то создать драгоценный камень, чтобы содержать его. Эти ссылки могут или не могут помочь.

http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-5-minute-100.html

http://guide.rubygems.org/gems-with-extensions/

Я рекомендую сделать драгоценность, так как я думаю, что может быть трудно получить библиотеки или исполняемые файлы на экземпляр Heroku. Вы можете хранить GEM в своем каталоге поставщика, если вы не хотите сделать его публичным.

В целом у меня будет загружена веб-сервер загрузить на S3 или везде, где вы храните изображения (это можно сделать непосредственно в браузере без использования веб-сервера в качестве ступенчатого камня с AWS JS API. Ищите драгоценные камни, чтобы помочь ,)

Затем веб-сервер может запросить фоновую задачу для обработки изображения.

Если вы не храните их, все становится немного интереснее ... вам понадобится база данных, если вы используете фоновые задачи, поэтому вы можете передать данные изображения к работнику в виде блоба в База данных возможно.

Я действительно не сделаю всю обработку только в Webserver Dyno, если вы не очень иногда наберетесь только на эту вещь. С несколькими пользователями вы очень быстро ударили узкое место.

Фоновый процесс может установить флаг на строке таблицы изображения, поэтому веб-сервер может позволить пользователю знать, когда обработка завершена. (Вы можете опросить информацию, используя JS на загрузке полный экран, используя AJAX)

Конечно, есть много других способов выполнения этого, в зависимости от ряда факторов.

Извинения, что ответ расплывчатой, но вопрос довольно открытый.

Удачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top