Обработка изображений на веб-сервере
-
21-12-2019 - |
Вопрос
Я хочу запустить обработку изображений 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/
Затем веб-сервер может запросить фоновую задачу для обработки изображения.
Конечно, есть много других способов выполнения этого, в зависимости от ряда факторов.
Извинения, что ответ расплывчатой, но вопрос довольно открытый.