mardi 22 juillet 2008
OCaml répartit les tâches (sans frotter)
mardi 22 juillet 2008 - Travail
Je me suis remis à coder en caml récemment pour réaliser une file d'attente parallélisée des exports de nos photos 3d. Pour les non initiés Objective Caml est language de programmation né il y a quelques années seulement à l'INRIA en France. Il réunit sous une même grammaire les styles de programmation fonctionnelle, imperative, et orientée objet.
L'intérêt est que OCaml étant un langage de haut niveau (d'abstraction!) il est capable d'analyser et de vérifier la validité du code écrit. Il doit cela à son système de typage qui permet de déduire automatiquement le type d'une expression, et de détecter les incohérences avec le reste du programme. De cette manière, les programmes compilés en caml ont moins de bugs et sont beaucoup plus stables que leurs homologues sibyllins. Du coup mon petit bout de code en caml sera suffisament stable pour recevoir et distribuer des tâches sur plein de machines différentes sans interruption pendant des années.
Le design est assez simple :
- Une petite base de donnée fait office de file d'attente. En l'occurence j'utilise SQLite, celle-ci supporte d'être accédé simultanément par plusieurs processus (ou plusieurs threads, mais les threads, c'est mal) ce qui règle le problème le plus problématique du design.
- Un client web permet d'ajouter des jobs dans la file d'attente. J'ai découvert OCamlNet qui permet de créer assez simplement des CGI pour faire des pages web dynamiques.
- Un serveur de calcul qui sort les jobs de la file d'attente et lance l'exportation de la photo 3d. Ce serveur peut lancer plusieurs jobs à la fois sur la même machine pour tirer toute la puissance des nouveaux processeurs multi-coeurs (et de notre MacPro bi-processeur G4 trouvé sur e-bay ^^).
