18 septembre 2009

Apps.gov

Je viens de lire l’article [1] de ZDNet France "La Maison Blanche s’ouvre au Cloud Computing pour réduire ses dépenses IT" et quelques autres en Anglais sur le même sujet. En période de crise, l’annonce du Gouvernement Américain ne peut que réjouir ses concitoyens. Mais attention, plusieurs acteurs du marché comme Google et SalesForce.com ont déjà annoncé qu’ils collaborent ou vont collaborer avec le Gouvernement Américain pour ce projet apps.gov. Amazon a quand à lui annoncé le 26 août 2009 [2] qu’il allait offrir une version privée d’EC2. Est-ce que la Maison Blanche utilisera cette dernière solution ?
Même si l’État se doit d'être un des moteurs de l’économie, il doit aussi protéger la vie privée de ses concitoyens. Le Gouvernement Américain devra donc faire attention aux données stockées sur des "Public Cloud" ou il devra transformer ses "Data Center" pour fabriquer son "Private Cloud" afin de garantir la sécurité de l'information.

En Europe, je n’ai pas entendu parler de tels projets ! Allons-nous aussi héberger nos données chez Google et Force.com ou allons-nous développer nos propres solutions ?

[1] ZDNET.fr, Christophe Auffray, La Maison Blanche s’ouvre au Cloud Computing pour réduire ses dépenses IT, http://www.zdnet.fr/actualites/informatique/0,39040745,39706848,00.htm, publié le 16/09/2009, consulté le 17/07/2009
[2] InformationWeek, Charles Babcock, Amazon's Private Cloud: Virtually Private Or Maybe Private?, http://www.informationweek.com/cloud-computing/blog/archives/2009/08/amazons_private.html, publié le 28/08(2009, consulté le 30/08/2009

Origine du terme "Cloud Computing"

Le "Cloud Computing" est l’évolution des notions que j’ai décrites dans les articles précédents. La première citation de ce terme date de 2001. Cette année là, Microsoft [1] en lançant sa nouvelle plate-forme de développement ".Net" présente le "Cloud" comme l’endroit où seront hébergés les "Web Services". Ces services seront accessibles sur l’internet et l’utilisateur pourra les consommer sans se soucier où sont-ils hébergés et avec quelle technologie sont-ils développés. Le terme "Cloud" (nuage en Français) est utilisé par analogie au symbole communément utilisé pour représenter l’internet dans les schémas des ingénieurs réseau. C’est en août 2006, lors de la conférence Search Engine Strategies, qu’Eric Schmidt PDG de Google présente un nouveau modèle architectural informatique où les données et les services seront hébergés quelque part sur le "Cloud" [2]. Le 24 août de la même année Amazon annonce son nouveau service "Elastic Compute Cloud" (EC2). Ce service web, qui est le premier du genre, offre aux développeurs le premier ordinateur redimensionnable sur le "Cloud" [3]. Grâce à cette solution, chaque développeur peut virtuellement créer le serveur dont il a besoin pour son projet et le dimensionner pour ses besoins.

C’est au second semestre 2008 que le terme "Cloud Computing" se répand et deviennent un concept phare en informatique. En octobre 2008, Amazon a lancé la version commerciale d'EC2 [4]. Amazon a depuis aussi ouvert son premier "Data Center" en Irlande, afin de diminuer les temps de latence réseau liés aux connections transatlantiques. Cette ouverture à aussi permis à Amazon d’offrir une solution conforme aux standards Européens en matière de stockage de données [5]. Entre 2008 et le premier semestre 2009, tous les autres grands acteurs du marché informatique, comme Google, Microsoft, IBM, HP, Dell, Sun, Cisco, VMware, Xen et Ubuntu ont rejoint le marché du "Cloud Computing" ou ils ont lancé des projets liés à ces concepts.

Pour analyser les évolutions technologiques, le Gartner publie chaque année sa courbe de "hype" (popularité) pour les technologies émergentes [6]. Le "Cloud Computing" a été annoncé pour la première fois dans ce rapport en 2008 et il a atteint en 2009 le sommet du "pic des attentes exagérées". Ce phénomène est dû au fait que le concept de "Cloud Computing" est nouveau. Comme avec toutes nouveautés, pour dominer le marché les concepteurs se doivent de promettre l’impensable. Dans son article "Twenty-One Experts Define Cloud Computing" [G_09], Jeremy Geelan relève déjà 21 définitions reprisent et complétées dans la publication scientifique "A Break in the Clouds: Towards a Cloud Definition" [VRCL_09]. Durant nos recherches, j’ai trouvé d’autres définitions comme celle de l’université de Berkeley [AFG_09], celle de l’université de Karlsruhe [WTK_09] ou la quinzième version de la définition du National Institute of Standards and Technology (NIST) américain [MG_09]. Toutes ces définitions présentent des aspects novateurs et prometteurs pour l’informatique, mais comme le rappel les auteurs de la définition du NIST le "Cloud Computing" est encore un paradigme en pleine évolution. Toutefois, comme pour les autres technologies émergentes, le concept de "Cloud Computing" devrait, selon le Gartner, rapidement tomber dans le "fossé des désillusions", car les acteurs du marché ne pourront tenir toutes leurs promesses. Mise à part les pannes un des premiers exemples est Amazon. Pour éviter les problèmes de goulets d’étranglement réseau et afin de permettre à ses clients d’envoyer des gigas octets de données rapidement, ce dernier a du proposer l’envoie par courrier (Fedex) de disques durs [7]. Finalement, le concept de "Cloud Computing" devrait atteindre, selon les analyses du Gartner, le plateau de la productivité d’ici 2 à 5 ans. Toujours selon le Gartner, ce concept devrait à terme aussi modifier le monde des technologies en offrant l’informatique comme un service consommable et non plus comme un investissement couteux. Dans les articles suivants je vais donc présenter les concepts qui me semblent déterminant pour donner une définition du "Cloud Computing".
[1] Microsoft, Sanjay Parthasarathy, WinHEC Conference 2001, http://www.microsoft.com/presspass/exec/sanjay/03-26winhecsanjayp.mspx, publié le 26/03/2001, consulté le 11/09/2009
[2] Eric Schmidt, Search Engine Strategies Conference, Conversation with Eric Schmidt hosted by Danny Sullivan, http://www.google.com/press/podium/ses2006.html, publié le 09/08/2006, consulté le 05/07/2009
[3] Amazon, Announcing Amazon Elastic Compute Cloud (Amazon EC2) - beta, http://aws.amazon.com/about-aws/whats-new/2006/08/24/announcing-amazon-elastic-compute-cloud-amazon-ec2---beta/, publié le 26/08/2006, consulté le 11/09/2009
[4] Amazon, Amazon EC2 Exits Beta and Now Offers a Service Level Agreement, http://aws.amazon.com/about-aws/whats-new/2008/10/23/amazon-ec2-exits-beta-and-now-offers-a-service-level-agreement/, publié le 23/10/2008, consulté le 11/09/2009
[5] Le Monde Informatique, Emmanuelle Delsol, Le cloud d'Amazon EC2 arrive en Europe, http://www.lemondeinformatique.fr/actualites/lire-le-cloud-d-amazon-ec2-arrive-en-europe-27631.html, publié le 11/12/2008, consulté le 17/12/2008
[6] Gartner, Gartner's 2009 Hype Cycle Special Report Evaluates Maturity of 1,650 Technologies, http://www.gartner.com/it/page.jsp?id=1124212, publié le 11/08/2009, consulté le 12/09/2009
[7] GigaOM, Stacey Higginbotham, Amazon’s New Service Goes Postal Over Slow Broadband, http://gigaom.com/2009/05/21/amazons-new-service-goes-postal-over-slow-broadband/, publié le 21/05/2009, consulté le 13/06/2009
[AFG_09] Michael Armbrust, Armando Fox, Rean Griffith, Anthony D. Joseph, Randy H. Katz, Andrew Konwinski, Gunho Lee, David A. Patterson, Ariel Rabkin, Ion Stoica et Matei Zaharia, Above the Clouds: A Berkeley View of Cloud Computing, publié en février 2009
[G_09] Jeremy Geelan, Twenty-One Experts Define Cloud Computing, http://cloudcomputing.sys-con.com/node/612375, publié en janvier 2009, consulté le 12/08/2009
[MG_09] Peter Mell, Tim Grance, Working Definition of Cloud Computing, publié en août 2009
[VRCL_09] Luis M. Vaquero, Luis Rodero-Merino , Juan Caceres, Maik Lindner, A Break in the Clouds: Towards a Cloud Definition, publié en 2009
[WTK_09] Lizhe Wang, Jie Tao, Marcel Kunze, Alvaro Canales Castellanos, David Kramer et Wolgang Karl, Scientific Cloud Computing : Early Definition and Experience, publié en octobre 2008

Server farm et Web farm

Un dernier article de théorie qui présente une des étapes importantes à la base du "Cloud Computing". Je l’ai plus orienté sur "Web farm" que sur les "Serever farm", car l’objectif de mon mémoire est de construire un site Web 2.0 sur un "Cloud".

Historiquement, les fermes de serveurs et plus particulièrement les "Web farms" se sont développées au début des années 2000 [CT_01, WY_01] pour répondre aux besoins de la bulle internet. Ces "fermes" hébergent des centaines de serveurs montés en "Cluster". Le nom "farm" a été choisi par analogie avec les grandes granges américaines qui servent au stockage des céréales. Tout comme pour l’agriculture, ces fermes de serveurs sont installées en campagne ce qui permet aux exploitants de diminuer les coûts de stockage et de garantir un approvisionnement facilité en eau (nécessaire pour le refroidissement des machines) et en électricité.

Ces "fermes" de serveurs ont permis de répondre aux besoins de "haute disponibilité" (HA – "high availability" en Anglais) nécessaire à une grande majorité de services accessibles au travers de l’internet. La HA permet de garantir l’accomplissement des tâches même en cas de défaillance d’un des nœuds ("nodes" en Anglais) du "Cluster". Ce principe de "haute disponibilité" est réalisé grâce à la redondance des infrastructures physiques et logiques ainsi que la mise en place de mécanismes de reprise sur panne ("failover" en Anglais) et de répartition de charge ("load balancing" en Anglais). Malgré la HA l’utilisateur peut ressentir des baisses de performance, mais ne perdra pas complètement accès au service qu’il est entrain de consommer.

Pour répondre à ce besoin de "haute disponibilité" dans les "Web Farms" deux concepts sont primordiaux : celui de la "scalabilité" et celui de la "répartion de charge".
·         La "scalabilité" permet de facilement augmenter la taille du "Cluster" en ajoutant des machines. Cette propriété permet de faciliter la montée en charge grâce à l’augmentation de la puissance de calcul et de la mémoire offerte dans la ferme. Ce concept permet aussi de garantir la "haute disponibilité" en permettant le remplacement d’une machine sans interruption de service.
·         La répartition de charge en Anglais "load balancing" est un énorme challenge pour les ingénieurs et fait l’objet de nombreuses publications [BDH_03, CT_01, WY_01]. L’objectif de toutes les solutions proposées est de minimiser le temps de réponse moyen et éviter de surcharger une machine particulière. Pour atteindre ce but, les paramètres à prendre en compte sont divers et varient en fonction des projets.
La solution la plus simple, pour le "load balancing", est basée sur la répartition de charge au niveau du serveur DNS (Domain Name System). Cette première solution ne fait que convertir un nom de domaine en une IP. Cette solution est externe au "Cluster" et elle ne permet pas d'éviter de diriger l’utilisateur sur une machine surchargée ou qui ne répond plus.
La seconde solution consiste à utiliser un serveur frontal, appelé communément "dispatcheur", pour répartir la charge. Le "dispatcheur", pour faire son travail, prend en compte plusieurs paramètres tels que la nature du site (statique ou dynamique), l’URL demandé, les cookies ou la popularité momentanée du site. En fonction de la nature du site statique ou dynamique le "dispatcheur" mettra en œuvre un algorithme différent.
Des solutions peuvent aussi être développées pour répondre à des besoins spécifiques. Les ingénieurs de Google, dans l’article "Web Search for a Planet: The Google Cluster Architecture" [BDH_03], décrivent la solution mise en œuvre, par ce leader des moteurs de recherche, pour répondre aux requêtes faites sur son moteur de recherche. La solution consiste premièrement en une répartition de la charge au niveau du serveur DNS. Cette première étape dirige l’utilisateur sur le "Cluster" le plus proche de lui géographiquement. Dans une seconde phase, un serveur exécute la demande en interrogeant un serveur d’"index" et complète le contenu de la page de résultats en interrogeant un serveur dit de "documents" avant de la retourner à l’internaute.
Dans leur article "Load Balancing for Clustered Web Farms" [WY_01] Joel L. Wolf et Philip S. Yu, ingénieurs chez IBM, proposent d’héberger plusieurs sites web indépendants sur un nœud du "Cluster" et chacun de ces sites web est lui-même répliqué sur plusieurs nœuds du "Cluster". Ce chevauchement de sites sur plusieurs nœuds permet d’optimiser l’utilisation des ressources du serveur, car un site peut être temporairement fortement sollicité tandis que les autres sites hébergés sur le même serveur ne le sont pas. Cette solution, de partage des ressources physiques, pause toutefois un problème pour la confidentialité des données, car ces dernières sont toutes hébergées sur le même serveur. Un concurrent pourrait donc accéder aux données qui ne lui appartiennent pas.


Pour conclure cette section, je peux dire que les "Web Farm" ont permis et permettent toujours d’héberger des services accessibles sur l’internet nécessitant sur une très haute disponibilité. La principale difficulté, pour le développement des services hébergés dans ces fermes, est liée au fait que chaque machine reste indépendante, malgré qu’elles fassent toutes parties du même "Cluster". Il faut donc, tout comme pour le "Grid Computing" développer spécifiquement les applications, pour quelle fonctionne sur un "Cluster".

[BDH_03] Luiz André Barroso, Jeffrey Dean, Urs Hölzle, Web Search for a Planet: The Google Cluster Architecture, publié en 2003
[CT_01] Emiliano Casalicchio, Salvatore Tucci, Static and Dynamic Scheduling Algorithms for Scalable Web Server Farm, publié en 2001
[WY_01] Joel L. Wolf, Philip S. Yu, Load Balancing for Clustered Web Farms, publié en 2001

02 septembre 2009

Gmail – Panne ?!?

Comme tout le monde le sait, hier soir Gmail est tombé en panne, suite à une mise à jour de routine et une sous-estimation de la charge que certaines modifications récentes (ironie du sort, certaines ont été mises en œuvre pour améliorer la disponibilité du service) placé sur les routeurs/serveurs qui gère le load balancing [1].
Depuis un petit mois, je me documente sur les "Web Farms" et les "Clusters" afin de rédiger la prochaine section de mon mémoire. Je vais essayer de publier cette dernière d’ici à mi-septembre. Dans cette section, un des points principaux que je développe est justement le "Load Balancing". Ce sujet a fait l’objet de nombreuses publications et ça reste le nerf de la guerre tous les gros projets.
Pour résoudre ce problème, je me demandais si la virtualisation est un pré requis pour ce type d’application hébergée sur le "Cloud". En lisant l’article de Gary Orenstein "Is Virtualization a Cloud Prerequisite?" [2], je comprends qu’à l’heure actuelle si on utilise des architectures système dédiées et développées spécifiquement pour un projet, on obtient des performances plus grandes. Toutefois, si on virtualise et que l’on met en œuvre des mécanismes de haute disponibilité, on est sensé diminuer le risque de pannes par surcharge. Je vais donc essayer de tester ce point lors de la mise en œuvre pratique de mon projet de mémoire au début 2010. J’émets déjà une réserve quand à la taille du projet. Si j’ai quelques centaines d’utilisateurs à la seconde je suis un homme heureux, tandis que si Google ou un autre major n’a que quelques centaines d’utilisateurs à la seconde ils se posent des questions!
[1] More on today's Gmail issue, http://gmailblog.blogspot.com/2009/09/more-on-todays-gmail-issue.html, consulté le 02/09/2009
[2] Is Virtualization a Cloud Prerequisite?, http://gigaom.com/2009/08/30/is-virtualization-a-cloud-prerequisite/, consulté le 31/08/2009