Traitement d'image sur un serveur Web
-
21-12-2019 - |
Question
Je souhaite exécuter des algos de traitement d'image sur le serveur pouvant interagir facilement avec des applications Web.Les algos de traitement d'images sont calculées lourdes et ne seront pas disponibles dans des bibliothèques personnalisées.Actuellement, j'utilise Ruby sur Rails sur Heroku pour mon site Web.
Quelle serait la meilleure architecture pour y parvenir?Prenez des images du site Web - Exécutez l'image Traitement de l'image Algo dessus - Displayez sur le site Web
La plupart de mon code de traitement d'image se trouve sur C / C ++.
Puis-je appeler C / C ++ code de Ruby sur Rails directement?Est-ce possible sur Heroku?
ou dois-je concevoir un système sur lequel C / C ++ Code expose certaines API qui peuvent être appelées par Ruby sur Rails Server?
La solution
Heroku utilise généralement de petites instances de la machine virtuelle, donc en fonction de la taille de votre traitement, ce n'est peut-être pas le meilleur choix d'architecture. Cependant, si vous l'utilisez, je ferais ceci:
Utilisez un gemme de travail d'arrière-plan pour faire votre traitement. Demandez à cela sur un processus distinct (appelé travailleur plutôt qu'un dyno dans la terminologie de Heroku). Le travail différé est une solution éprouvée pour les tâches de base avec une multitude d'informations en ligne concernant l'intégration de Heroku, mais il y a des plus récents comme Sidekiq, qui utilisent le nouveau système de threading dans des versions modernes de Ruby. Ils permettraient à tout de se faire dans le Dyno, mais je dirais qu'il serait utile de garder tout le traitement de l'arrière-plan loin du serveur Web Dynos, un travail aussi retardé (ou similaire) irait bien.
Quant à l'intégration de C / C ++, je n'ai pas encore besoin de le faire comme ça. Cependant, je sais qu'il est possible de créer des gemmes qui intègrent le code C ou C ++ et compiler de manière nativement. Tant que vous utilisez Ruby plutôt que Jruby, je ne pense pas que Heroku devrait avoir un problème avec eux. Il existe d'autres moyens d'accomplir cela, examinez des questions spécifiquement sur ce sujet, telles que
Comment puis-je appeller des fonctions C ++ à partir de rubis
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/
Ensuite, le serveur Web peut demander une tâche d'arrière-plan pour traiter l'image.
excuses que la réponse est vague, mais la question est assez ouverte.