Ruby En vrac spécial Ruby : JRuby, Sinatra et Goliath

Posté par (page perso) . Modéré par Xavier Teyssier.
Tags :
27
20
mar.
2011
Ruby

JRuby

JRuby est une implémentation complète de Ruby au-dessus de la machine virtuelle Java. La version 1.6 récemment sortie apporte des fonctionnalités majeures :

  • compatibilité avec Ruby 1.9.2, aussi bien pour le langage que pour l'API ;
  • prise en charge expérimentale des extensions écrites en C ;
  • profiler intégré ;
  • performances améliorées ;
  • meilleure expérience utilisateur sous windows ;
  • etc.

Sinatra

Sinatra est un micro-framework en Ruby pour construire rapidement des applications web (licence MIT). La version 1.2 est sortie au début du mois avec des nouveautés intéressantes :

Goliath

Goliath est un serveur HTTP en Ruby sous licence MIT. Sa particularité est de s'appuyer sur EventMachine et les fibres de Ruby 1.9. Il peut ainsi fonctionner de manière asynchrone et performante tout en gardant le code lisible (l'exécution reste linéaire et ne repose pas sur des callbacks enchainés comme on peut le voir dans d'autres environnements).

En pratique, Goliath convient bien pour écrire des services HTTP en complément d'une application web : API de streaming, upload de fichiers volumineux, proxy HTTP adaptés, etc.

  • # Goliath

    Posté par (page perso) . Évalué à  6 .

    On peut comparer facilement Goliath à node.js car c'est aussi un framework asynchrone (event driven).
    L'avantage de Goliath (hormis qu'il est écrit en Ruby pour ceux qui préfèrent ce langage au Javascript), c'est qu'il évite le "spaghetti de code" qu'on retrouve souvent lorsqu'on utilise un framework asynchrone (les développeurs de node.js sauront de quoi je parle), on peut effectivement coder en pensant "synchrone" et le framework et surtout les drivers s'occupent du reste en background.
    L’inconvénient, c'est que contrairement à node.js où il faut absolument écrire en asynchrone sinon ca ne marche pas, il faudra que le développeur fasse attention aux drivers qu'il utilise et l'architecture de son programme (aucun appel ne doit être bloquant).

    Ilya Grigorik, un des créateurs de Goliath, explique que le use case principal de Goliath est de fournir le "datasource" d'applications Rails ou Sinatra (popuplaires frameworks Ruby), en offrant l'abstraction de ressources externes de type API, Rails ayant plus comme vocation d'être user facing. Pour ceux qui connaissent l'architecture Rack (interface standard entre les servers web et les frameworks ruby), Goliath peut se placer comme endpoint et servir du XML, du JSON, ... et peut donc s'intégrer facilement avec une application Rails.

    Au rayon performance, pour le moment Ruby MRI (runtime officiel) 1.9.2 fait tourner Goliath le plus rapidement. Mais JRuby qui n'a pas de GIL (global Interpretation Lock) devrait pouvoir sous peu battre MRI car il mappe les fibers Ruby (coroutines) en Java threads, sans lock au milieu.

    Goliath devrait démocratiser le code asynchrone dans l'écosystème Ruby, car EventMachine n'a rien à prouver au niveau performances mais pouvait être rebutant pour des gros projets car le code asynchrone est plus difficilement lisible, maintenable et surtout debuggable.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.