Déployer son application sur le Cloud

Quelle application voulons nous déployer et pourquoi ?

Lors de Devoxx nous avions un jeu concours sous forme de quiz en ligne, en plus d’animer le stand le but était de faire une démonstration de nos compétences dans le développement distribué et tout particulièrement dans le domaine du cloud computing.

Le temps où l’on regardait le cloud avec des yeux curieux mais distants, mêlés d’une pointe d’appréhension vers cette « technologie de demain » arrive à sa fin. En effet le cloud computing arrive à maturité, ses contours sont mieux définis et de nombreux outils ont été développés afin de simplifier son utilisation et son apprentissage.

C’est dans cette optique que nous avons conçu notre application de quiz en ligne, afin d’en faire une petite vitrine faisant la promotion de l’utilisation et des possibilités du cloud et plus particulièrement des offres PaaS qui nous semble avoir le plus de valeur pour le SI. Nous avons voulu montrer aussi quelques pratiques faciles à mettre en place pour que l’application soit portable et ne soit liée ni à un cloud ni à un paas-fabric spécifique et garde toute son indépendance. Nous voulons en quelque sorte démystifier le cloud et montrer que son utilisation n’est finalement pas si complexe et que le moment opportun est peut-être arrivé pour prendre le cloud en vol !

Revenons en à notre application, c’est donc un quiz en ligne, elle est écrite en Java et utilise Spring MVC ainsi que la bibliothèque Jquery qui permet d’avoir un rendu optimal pour téléphone portable. Tomcat a été choisi pour le conteneur web et MongoDB comme base de données. Lors de Devoxx l’application tournait sur le cloud Amazon EC2 et plus précisément sur le data center « eu-west-1″ situé en Irlande, le déploiement étant automatisé via le paas-fabric Cloudify.
Durant le développement et les tests nous déployons en local ou sur CloudFoundry. Déploiements rapides en local pour les premiers tests, puis déploiement sur Cloudfoundry pour les tests plus poussés, et enfin déploiement de production sur EC2 via Cloudify.

C’est ce cheminement que avons retenu lors du développement de notre application et c’est celui que nous allons présenter ici.

En développement …

En phase de développement nous voulons voir si telle fonctionnalité marche comme attendue, où si telle page s’affiche comme l’on voudrait. Un simple déploiement local fait l’affaire : il suffit donc de lancer MongoDB et Tomcat et d’y déployer le WAR de l’application. Simple et rapide cette méthode a aussi l’avantage d’être réactive ; sous Eclipse on peut ainsi corriger une classe et le nouveau WAR est redéployé à chaud, permettant de voir tout de suite les conséquences de la correction.

Déploiement sur CloudFoundry

Mais notre ordinateur de développeur ne permet sûrement pas de faire tous les tests que nous souhaitons mener : tests de charge, de résilience, etc. Ou alors nous voulons faire des tests distants tout en gardant une certaine rapidité et simplicité de déploiement. CloudFoundry peut alors être la solution idéale, ce PaaS Open Source initié par vmware permet en effet avec peu de changement de code et très peu de configuration de déployer son application sur un ensemble de PaaS dont cloudfoundry.com (opéré par vmware) qui offre les avantages de simplicité et d’une vitesse de déploiement relativement rapide.

Pour cela il suffit d’installer le plugin d’intégration de CloudFoundry dans Eclipse, de créer un compte (on peut créer un compte de test gratuitement), puis l’on est prêt à démarrer l’utilisation. On sélectionne alors les applications que l’on veux déployer, dans notre cas le quiz, puis l’on choisit l’url du site web et les services dont l’on dépend, ici MongoDB. Ensuite le déploiement sur cloudfoundry.com commence : le type de l’application est détecté automatiquement, dans notre cas un conteneur web est utilisé. Les services comme le conteneur web et MongoDB sont déjà pré-déployés sur le cloud, ce qui permet d’avoir un déploiement relativement rapide, dans notre cas une minute suffit.

L’effort de configuration est très réduit, une grand partie est automatiquement prise en charge et cachée à l’utilisateur. Pour le quiz il a juste fallu remplacer le bean qui crée la connexion vers Mongo, au lieu de donner une IP on donne le nom du service Mongo précédemment déployé dans Cloudfoundry. Afin de gérer les différentes configurations nous avons utilisé les profiles Spring apparus avec Spring 3.1. Ainsi un profile « défaut » est utilisé pour le déploiement local dans Tomcat tandis qu’un profil « cloud » est automatiquement activé lors du déploiement sur CloudFoundry et nous avons créé un profil Cloudify pour les déploiements opérés par Cloudify. La contre-partie à la facilité d’utilisation de Cloudfoundry est qu’on a que peu de maîtrise sur les détails de configuration des services comme la version de Mongo où son tunning, de même pour le conteneur web.

Déploiement en production sur Amazon EC2 à l’aide de Cloudify

Notre application est maintenant prête à passer en production. Nous voulons pouvoir automatiser le déploiement sur le cloud sans pour autant être dépendant d’une solution donnée et en gardant une grande liberté de configuration, Cloudify devient alors un outil attractif. C’est un paas-fabric Open Source initié par GigaSpaces tout comme CloudFoundry mais leur philosophie est très différente, Cloudify tente de concilier le paas-fabric et les principes du dev-ops.

L’idée est d’avoir une solution non intrusive qui gère tout le cycle de vie des applications et non pas seulement le déploiement, et ceci par exécution de recettes/scripts « à la chef (ou puppet) », pouvant être écrits en groovy, bash ou bat. Cette utilisation des scripts rend l’utilisation de Cloudify plus complexe que CloudFoundry mais offre un niveau de contrôle et de configuration bien plus poussé. Des fonctionnalités supplémentaires sont en plus disponibles, un monitoring customisable des applications, le self-healing qui redémarre automatiquement les services en erreur ou encore l’auto-scaling en fonction de critères monitorés.

L’intégration de Cloudify avec les différents clouds se fait via des drivers d’infrastructure, grâce à cela on est capable de déployer la même application avec la même configuration sur différents clouds public dont Amazon Ec2, Rackspace et Windows Azure ou privés comme OpenStack.
C’est par ce biais que nous avons pu déployer notre quiz sur Amazon Ec2 en Irlande. Cloudify n’est pas intrusif, mais il faut tout de même s’adapter à la dynamicité de l’environnement. Dans notre cas on récupère les IPs des bases Mongo via une variable d’environnement qui est settée par Cloudify et qui est ensuite utilisée dans la config spring pour créer le proxy Mongo.

Conclusion

Au travers de cet exemple de développement et de déploiement d’une application de quiz en ligne nous avons voulu montrer un premier aperçu des possibilités et outils du Cloud et que ces différent(e)s méthodes et outils ne sont pas forcément concurrent(e)s
mais peuvent être complémentaires. De même avec quelques bonnes pratiques il est facile d’avoir une application portable pouvant prendre en charge différentes configurations.

Nous pensons qu’il est temps de lever les yeux vers le cloud car celui-ci est maintenant suffisamment accessible et mature pour devenir la solution idéale à un certain nombre des besoins et défis de l’informatique d’aujourd’hui et de demain.

Le déploiement de notre quiz via CloudFoundry et Cloudify est illustré dans cette vidéo qui inaugure l’arrivée de la chaîne youtube FastConnectTV.

De nouvelles vidéos sur le cloud vont y être ajoutées très prochainement !