18/11/2011 - Dotcloud : La fin de l’administration système ?

Depuis maintenant quelques années, le mot "cloud" fait partie du vocabulaire à la mode du monde de l'informatique. Rejoignant les mots tels que "virtualisé", "web2.0" ou "ajax", n’importe quel décideur voulant être à jour sur les dernières technologies est obligé de s’intéresser à ce concept qui commence à faire ses preuves afin de comprendre ce qu'il peut nous apporter dans le monde du développement et plus précisément dans le monde python.

1) Le cloud

Je suis certain que vous avez déjà vu la pub d'IBM ventant le "Cloud Computing" comme LA solution d'avenir, LA technologie que toute société digne de ce nom se doit d'utiliser. Cette présentation du cloud est certes attractive, mais que se cache-t-il réellement derrière ce "nuage" ? Si l'objet de cet article n'est pas de lister précisément toutes les technologies liées au cloud computing (wikipedia le fait déjà parfaitement http://fr.wikipedia.org/wiki/Cloud_computing ), il est bon de définir brièvement ce concept. Le Cloud computing c'est tout simplement l'action de déporter l'ensemble de ses services informatiques internes sur des serveurs distants. Alors certes, les plus perspicaces noteront judicieusement que cela fait déjà plusieurs années que leur intranet/extranet est stocké sur un serveur dédié, et qu'il n'y a rien de nouveau ! Mais là où le système "Cloud" va plus loin c'est grâce à l'apport de la virtualisation. Tout cela gagne en souplesse d'utilisation car au lieu d'installer ça sur un serveur fixe, souvent trop puissant au début et qui peut se retrouver limité lors de montée en charge, le cloud, par des mécanismes assez poussés en administration et de manière totalement invisible pour l'utilisateur va pouvoir adapter le support de l'application en fonction de la demande. La facturation de l’hébergement ne va donc plus fonctionner en terme de machine, mais en termes de consommation de services (bande passante, nombre de requêtes, consommation espace disque ....) L'exemple le plus connu et utilisé reste à ce jour Amazon EC2 (Elastic Compute Cloud). Ceci dit, même si tout cela est transparent pour l'utilisateur, la configuration et la gestion de ces systèmes demandent des compétences de plus en plus poussées en "administration système". Si cela ne pose aucun problème pour les grands comptes, le cas n'est pas identique pour une majorité de PME où souvent la casquette d'administrateur système est joué, à ses temps perdus par un développeur bien dépassé par ces nouveaux concepts. Une des solutions serait donc de proposer à ces développeurs (et donc aux PME qui les emploient) un système clef en main, prêt à être déployé à tout moment et qui permet au développeur de travailler sur ce qui le concerne: "le développement".

2) Développement et hébergement de services sur le cloud

Dans le monde python, Google a ouvert le bal le premier "médiatiquement parlant" avec Google App Engine et son framework basé sur Django associé a une base de données maison, puis par la suite a fait évoluer son produit permettant d'héberger des projets en Java, Go, Python. Par un ensemble de lignes de commande il était très facile de développer un site sur son ordinateur puis de le déployer sur les serveurs de Google. Dans le monde de ruby, Heroku fait parler de lui depuis quelques années et permet grâce à Git de déployer très facilement une applis Rails sur les serveurs d'Amazon. Ceci dit dans les 2 cas un inconvénient assez important peut être souligné: une seule et unique technologie peut être utilisée. Impossible de faire héberger sur une même application un forum php, une instance Redmine sous RoR et un site en Django. De plus, souvent certaines concessions sur la technologie/framework employés sont à faire. (Toujours sous Google App Engine, l'utilisation de leur base de données). Mais depuis quelques mois une société du nom de Dotcloud propose un service du même nom qui semble s’affranchir de ces défauts. Leur concept : voir une application comme un ensemble de briques framework/technologiques. On choisit donc l'ensemble des services que l'on veut et afin de créer une "stack" que l'on déploie ensuite sur leurs serveurs. Plus que prometteur, il restait à voir ce que cela donne en réalité.

3) Dotcloud: La fin de l’administration système ?

Fin septembre, dans les bureaux d'Emencia a eu lieu une petite réunion où quelques geeks du monde python viennent présenter les projets sur lesquels ils bossent. Jérôme Petazzoni profite de sa venue en France pour venir nous faire une démo de Dotcloud et je dois dire qu'au bout d’une heure de démonstration je suis fortement convaincu ! Comme décrit plus haut, Dotcloud est un système d’hébergement sur le cloud, permettant de déployer une application en utilisant plusieurs technologies. Premier constat : après à peine 6 mois d’existence la liste des services proposés est juste énorme. On retrouve les principales technologies du web: Php, Ruby, Python, Java, Mysql Postgresl mais aussi des plus minoritaires comme des bases NoSql (MongoDB, Redis), PostGIS (postgres avec le support d'objets géographiques), le moteur d'indexation Solr et de nombreux autres devraient faire rapidement leur apparition ( http://docs.dotcloud.com/services/roadmap/ ). Pour sa présentation, Jérome s'est penché sur l'installation d'un serveur Django couplé d'une base en postgres. Pour cela il se base sur la documentation présente sur le site. ( http://docs.dotcloud.com/tutorials/python/django/ ). Et là, 2eme point très agréable, il en profite pour nous montrer la richesse de la documentation. Chaque service possède sa documentation, claire et précise. Elle est couplée d'une suite de tutoriaux très clairs expliquant pas a pas comment déployer "from scratch" telle technologie. Un autre élément impressionnant vient du fait que ces tutoriaux ont été créés par un outil appelé Gitorial qui utilise les commits réalisés sur un repo Git pour créer un tutoriel. Résultat : tous ces tutoriaux sont en faite un ensemble de base de configuration permettant à tout moment via un "git clone" de créer une conf dotcloud associée à la technologie choisie et de le déployer en quelques lignes de commande. D'un point de vue développeur, cela peut être comparé à la DDD (développement dirigé par la documentation) et nous assure que la documentation fournit par Dotcloud sera toujours de qualité. Au final, la création d'un projet se résume a sa création via la commande:: dotcloud create monprojet Une récupération du squelette via git et quelques personnalisations de la configuration pour l'adapter à notre cas que l'on commit. Puis au déploiement:: dotcloud push monprojet Le projet se retrouve alors déployé sur les serveurs de Dotcloud. (il est bon de noter que l'on n'est pas du tout obligé de passer via Git pour commit et déployer son projet. Si Dotcloud ne trouve pas de folder .git dans le projet il utilisera alors rsync pour faire la synchro lors du dotcloud push)

4) Dans les entrailles d'un projet Dotcloud

La structure d'un projet est assez simple. Il y a à la racine du projet un fichier dotcloud.yml qui décrit la configuration sous une syntaxe de type yaml. On va lister les services qu’on veut utiliser. Chaque entrée correspondra à 1 service dotcloud. Un exemple de configuration pour un Django: il va nous falloir python et postgresql:: www: type: python db: type: postgresql Je défini donc 2 types de services, le www qui hébergera mon serveur python (puis Django) et ma db de type postgresql Lors du déploiement de l'application, Dotcloud va alors déployer 2 systèmes virtualisés (de type LXC), un hébergeant le serveur python et l'autre la base postgresql. Les 2 systèmes communiqueront ensemble à travers le réseau. Pour ceux qui le veulent il est possible d’accéder via un ssh et un shell restreint aux vm hébergeant les services. Enfin la configuration du domaine web se fait très facilement puisqu'il suffit de mettre son bout de configuration nginx dans le fichier nginx.conf. On peut donc très facilement créer son vhost pour son domaine personnel.

5) Et le prix dans tout ça ?

La grille de prix est ultra simple et très claire. Il existe 3 forfaits, un gratuit, un "pro" a 99$ par mois et un "entreprise" au tarif non communiqué. Leur principale différence se fera au niveau du nombre de services que l'on peut utiliser et un support plus adapté au monde de l'entreprise. Mise à part cela, pas de restrictions techniques sur la bande passante, l'espace disque ou les performances du serveur. Quant aux services proposés, le choix est total dans toutes les gammes de prix. A noter que Dotcloud s'engage à héberger gratuitement les projets d'étudiants, ceux associatifs ou en rapport avec le logiciel libre. Il suffit de les contacter si cela vous intéresse. Au final, nous pouvons voir que même si Dotcloud est jeune, ce service n'en possède pas moins de nombreux avantages. Un usage simple, une documentation claire et fournit, un nombre de technologies supportées déjà très élevé. Il est à coup sûr une option plus qu’intéressante pour tous développeur qui n'a pas envie ou le temps de gérer ses propres serveurs dédiés. Pratiquement tous les inconvénients (vus ci-dessus dans l’hébergement dans le cloud) disparaissent avec cette technologie. Ceci dit, on peut encore constater une petite zone d’ombre. Leur infrastructure se base sur Amazon EC2 donc des serveurs basés aux Etats- Unis et tributaires du service Amazon. Mais cela devrait être bientôt corrigé car Dotcloud est en train de se munir de ses propres serveurs en Europe.

Ressources:

Ibm: http://www.ibm.com/cloud/fr Cloud Computing: http://fr.wikipedia.org/wiki/Cloud_computing Amazon EC2: http://aws.amazon.com/ec2/ Google App Engine: http://code.google.com/appengine/ Django: https://www.djangoproject.com/ Java: http://www.java.com/fr/ Python: http://www.python.org Dotcloud: http://www.dotcloud.com http://docs.dotcloud.com/services/roadmap/ http://docs.dotcloud.com/tutorials/python/django/ Emencia: http://www.emencia.fr