Cet article est le premier d'une série de 3 articles dans lesquels nous allons voir comment prendre une application PHP/MySQL classique, et la mettre "dans le cloud".
Derrière cette expression très "hype" se cache en fait un service d'hébergement permettant de déployer l'application facilement, et surtout de la dimensionner facilement en rajoutant ou retirant des serveurs à la volée.
Mais avant de migrer une application vers le cloud "parce que c'est à la mode", voyons quelles sont les raisons qui pourraient pousser à vouloir effectuer cette migration.
Le deuxième article contiendra un tutorial détaillé expliquant comment effectuer la migration sur le service Amazon EC2, et le troisième comment configurer Amazon EC2 pour augmenter ou diminuer dynamiquement le nombre de machines allouées à votre application.
Pour cet article, nous allons nous concentrer sur Amazon EC2. C'est le service de cloud computing le plus connu, et le plus utilisé.
Les services d'Amazon, bien que relativement bon marchés ne sont pas les plus accessibles. Un serveur low-cost chez OVH ou Dedibox reviendra souvent moins cher.
L'intérêt principal d'Amazon est son élasticité. Si vous avez des besoins importants (nécessitant plus d'un serveur) pour votre application, et si vous avez une activité avec des pics marqués, utiliser Amazon EC2 prend du sens.
Un cas d'utilisation typique est une campagne marketing à la télévision. Au moment des publicités, un grand nombre de visiteurs vont affluer sur votre site. Vous allez multiplier les nombre de visiteurs moyen sur votre site par 10 ou 100, l'espace de 20 minutes. Pour de telles pics de charges, le cloud computing est idéal. Il permet de commander à la volée des dizaines de machines pour répondre temporairement à la charge.
Pour vous faire une idée de la rentabilité d'un service de cloud computing par rapport à un hébergement classique, vous pouvez faire appel à la calculatrice Amazon: http://calculator.s3.amazonaws.com/calc5.html
Vous êtes convaincus que le cloud peut vous aider? Voyons comment migrer une application PHP/MySQL.
Pour cette migration, nous allons créer 2 AMI. Une AMI est une image de machine virtuelle, qui peut être déployée et multipliée pour augmenter l'élasticité de la solution.
Nous allons donc créer:
A partir de ces AMIs, nous allons créer plusieurs instances.
Une instance pour la base MySQL et plusieurs instances pour Apache/PHP
Nous pourrons directement rajouter des serveurs Apache/PHP lorsque la charge augmentera. Cependant, tous les serveurs se connecteront à la même base de données MySQL. Il ne faut donc pas longtemps pour comprendre qu'en cas de forte charge, nous n'aurons jamais de problèmes avec les serveurs PHP, mais la base de données sera le goulot d'étranglement.
Il existe des solutions pour augmenter les performances de MySQL (configuration master/slave, etc...) mais le sujet nécessiterait un article à part entière.
La solution préconisée par les gourous du cloud est d'utiliser une base de données NoSQL. Ces bases de données sont "élastiques" comme tous les services estampillés "cloud computing". Une base de données NoSQL peut ainsi accueillir dans milliards d'enregistrement, et des milliers de requêtes simultanées sans broncher. Revers de la médaille, ce ne sont pas des bases de données relationnelles. On en peut notamment pas écrire de SQL dessus, on ne peut pas effectuer de jointures non plus. Une application doit donc être pensée dès le départ pour utiliser une base NoSQL, ce qui n'est pas le cas de la plupart des applications.
Pour cet article, nous allons nous tenir à une base de données MySQL, en sachant qu'elle sera le goulot d'étranglement en cas de trop forte affluence sur notre site.
Si vous voulez en apprendre plus sur les bases NoSQL, le site nosql-database.org recense toutes les bases de données NoSQL. Le marché est en plein "boom". Citons quelques unes des plus connues: Hadoop soutenu par la fondation Apache, CouchDB, soutenu par la fondation Apache également, ou encore SimpleDB de Amazon.
Vous pouvez maintenant consulter le deuxième article, beaucoup plus technique, qui explique comment migrer pas-à-pas une application PHP/MySQL vers Amazon EC2.