Procesamiento de imágenes en un servidor web.
-
21-12-2019 - |
Pregunta
Quiero ejecutar imágenes procesando algos en el servidor que puede interactuar fácilmente con las aplicaciones web.Los algos de procesamiento de imágenes son calcular pesados y no estarán disponibles en bibliotecas de construcción personalizada.Actualmente estoy usando Ruby en rieles en Heroku para mi sitio web.
¿Cuál sería la mejor arquitectura para lograr esto?Tome imágenes del sitio web: ejecute la imagen Procesando Algo en él: visualización de la imagen en el sitio web
La mayor parte de mi código de procesamiento de imágenes está en C / C ++.
¿Puedo llamar al código C / C ++ de Ruby On Rails directamente?¿Es esto posible en Heroku?
¿O debería diseñar un sistema donde el código C / C ++ expone algunas APIs que pueden ser llamadas por Ruby On Rails Server?
Solución
Heroku típicamente utiliza instancias pequeñas de máquinas virtuales, por lo que dependiendo de cuán pesado es su procesamiento, puede que no sea la mejor opción de arquitectura. Sin embargo, si lo usa, haría esto:
Use una gema de tareas de fondo para realizar su procesamiento. Haga que esto se ejecute en un proceso separado (llamado un trabajador en lugar de un dinómetro en la terminología de Heroku). El trabajo retrasado es una solución probada y probada para tareas de fondo con una gran cantidad de información en línea relacionada con la integración en Heroku, pero hay más nuevos como Sidekiq que usa el nuevo sistema de roscado en las versiones modernas de Ruby. Permitiría que todo se haga en el Dyno, pero diría que sería útil mantener todo el procesamiento de antecedentes alejado de los Dynos de servidores web, por lo que el trabajo retrasado (o similar) estaría bien.
En cuanto a la integración de C / C ++, todavía no necesito hacer esto. Sin embargo, sé que es posible crear gemas que integren el código C o C ++ y compilen de forma nativa. Mientras esté usando Ruby en lugar de jruby, no creo que Heroku tenga un problema con ellos. Hay otras formas de lograr esto, observan las preguntas específicamente sobre este tema, como
¿Cómo puedo llamar a las funciones de C ++ desde Ruby
http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.html
http://guides.rubygems.org/gems-with-extensions/
Luego, el servidor web puede solicitar una tarea de antecedentes para procesar la imagen.
Por supuesto, hay muchas otras formas de lograr esto, dependiendo de una serie de factores.
Disculpas de que la respuesta es vaga, pero la pregunta es bastante abierta.